From 4804d677c981c82df821f9832589b696431a0982 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 4 Aug 2020 16:28:15 -0400 Subject: [PATCH 001/481] Initial commit --- .gitignore | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++ LICENSE | 21 +++++++++++ 2 files changed, 125 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..67045665db --- /dev/null +++ b/.gitignore @@ -0,0 +1,104 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and *not* Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..f5dab6f2b8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Serverless Stack + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From 708c9ace1f0176d60a550ae9befd6f3aee20c6ec Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 4 Aug 2020 17:37:47 -0400 Subject: [PATCH 002/481] First real commit --- .eslintignore | 8 + .eslintrc.json | 33 + .gitignore | 3 + README.md | 1 + lerna.json | 6 + package.json | 40 + packages/cli/README.md | 1 + packages/cli/bin/scripts.js | 146 + packages/cli/package.json | 56 + packages/cli/scripts/build.js | 22 + packages/cli/scripts/cdk.js | 25 + packages/cli/scripts/config/.babelrc.json | 14 + .../cli/scripts/config/babelJestTransform.js | 10 + .../cli/scripts/config/cacheCdkContext.js | 13 + .../cli/scripts/config/createJestConfig.js | 103 + packages/cli/scripts/config/paths.js | 26 + packages/cli/scripts/config/prepareCdk.js | 81 + packages/cli/scripts/deploy.js | 60 + packages/cli/scripts/remove.js | 21 + packages/cli/scripts/test.js | 90 + packages/cli/scripts/wrapper/cdk.json | 7 + packages/cli/scripts/wrapper/include.js | 3 + packages/cli/scripts/wrapper/run.js | 27 + packages/cli/tests/base-ts/base-ts.test.js | 22 + packages/cli/tests/base-ts/lib/index.ts | 7 + .../tests/base-ts/lib/stacks/sample-stack.ts | 12 + packages/cli/tests/base-ts/package.json | 17 + packages/cli/tests/base-ts/tsconfig.json | 23 + packages/cli/tests/base-ts/yarn.lock | 152 + packages/cli/tests/base/base.test.js | 22 + packages/cli/tests/base/cdk.context.json | 5 + packages/cli/tests/base/lib/cognito.js | 101 + packages/cli/tests/base/lib/dynamodb.js | 29 + packages/cli/tests/base/lib/index.js | 15 + packages/cli/tests/base/lib/nested-stack.js | 20 + packages/cli/tests/base/lib/s3.js | 33 + packages/cli/tests/base/package.json | 23 + packages/cli/tests/base/sst.json | 5 + packages/cli/tests/base/yarn.lock | 378 + packages/cli/tests/config/config.test.js | 18 + packages/cli/tests/config/lib/index.js | 18 + packages/cli/tests/config/package.json | 16 + packages/cli/tests/config/sst.json | 5 + packages/cli/tests/config/yarn.lock | 344 + packages/cli/tests/context/cdk.context.json | 3 + packages/cli/tests/context/context.test.js | 18 + packages/cli/tests/context/lib/index.js | 18 + packages/cli/tests/context/package.json | 16 + packages/cli/tests/context/yarn.lock | 344 + .../cli/tests/helpers/clear-build-output.js | 14 + packages/cli/tests/helpers/index.js | 18 + .../cli/tests/helpers/remove-node-modules.js | 14 + .../cli/tests/helpers/run-build-command.js | 21 + .../cli/tests/helpers/run-jest-command.js | 19 + packages/cli/tests/helpers/setup-tests.js | 24 + packages/cli/tests/helpers/yarn-install.js | 23 + packages/cli/tests/jest-ts/jest-ts.test.js | 10 + packages/cli/tests/jest-ts/lib/index.ts | 6 + .../cli/tests/jest-ts/lib/sample-stack.ts | 19 + packages/cli/tests/jest-ts/package.json | 24 + .../tests/jest-ts/tests/sample-stack.test.js | 33 + packages/cli/tests/jest-ts/tsconfig.json | 23 + packages/cli/tests/jest-ts/yarn.lock | 567 + packages/cli/tests/jest/jest.test.js | 10 + packages/cli/tests/jest/lib/dynamodb.js | 30 + packages/cli/tests/jest/package.json | 20 + .../cli/tests/jest/tests/dynamodb.test.js | 20 + packages/cli/tests/jest/yarn.lock | 555 + packages/cli/webpack.config.js | 14 + packages/resources/README.md | 1 + packages/resources/package.json | 28 + packages/resources/src/App.ts | 70 + packages/resources/src/Stack.ts | 28 + packages/resources/src/index.ts | 2 + packages/resources/tsconfig.json | 22 + yarn.lock | 10266 ++++++++++++++++ 76 files changed, 14341 insertions(+) create mode 100644 .eslintignore create mode 100644 .eslintrc.json create mode 100644 README.md create mode 100644 lerna.json create mode 100644 package.json create mode 100644 packages/cli/README.md create mode 100755 packages/cli/bin/scripts.js create mode 100644 packages/cli/package.json create mode 100644 packages/cli/scripts/build.js create mode 100644 packages/cli/scripts/cdk.js create mode 100644 packages/cli/scripts/config/.babelrc.json create mode 100644 packages/cli/scripts/config/babelJestTransform.js create mode 100644 packages/cli/scripts/config/cacheCdkContext.js create mode 100644 packages/cli/scripts/config/createJestConfig.js create mode 100644 packages/cli/scripts/config/paths.js create mode 100644 packages/cli/scripts/config/prepareCdk.js create mode 100644 packages/cli/scripts/deploy.js create mode 100644 packages/cli/scripts/remove.js create mode 100644 packages/cli/scripts/test.js create mode 100644 packages/cli/scripts/wrapper/cdk.json create mode 100644 packages/cli/scripts/wrapper/include.js create mode 100644 packages/cli/scripts/wrapper/run.js create mode 100644 packages/cli/tests/base-ts/base-ts.test.js create mode 100644 packages/cli/tests/base-ts/lib/index.ts create mode 100644 packages/cli/tests/base-ts/lib/stacks/sample-stack.ts create mode 100644 packages/cli/tests/base-ts/package.json create mode 100644 packages/cli/tests/base-ts/tsconfig.json create mode 100644 packages/cli/tests/base-ts/yarn.lock create mode 100644 packages/cli/tests/base/base.test.js create mode 100644 packages/cli/tests/base/cdk.context.json create mode 100644 packages/cli/tests/base/lib/cognito.js create mode 100644 packages/cli/tests/base/lib/dynamodb.js create mode 100644 packages/cli/tests/base/lib/index.js create mode 100644 packages/cli/tests/base/lib/nested-stack.js create mode 100644 packages/cli/tests/base/lib/s3.js create mode 100644 packages/cli/tests/base/package.json create mode 100644 packages/cli/tests/base/sst.json create mode 100644 packages/cli/tests/base/yarn.lock create mode 100644 packages/cli/tests/config/config.test.js create mode 100644 packages/cli/tests/config/lib/index.js create mode 100644 packages/cli/tests/config/package.json create mode 100644 packages/cli/tests/config/sst.json create mode 100644 packages/cli/tests/config/yarn.lock create mode 100644 packages/cli/tests/context/cdk.context.json create mode 100644 packages/cli/tests/context/context.test.js create mode 100644 packages/cli/tests/context/lib/index.js create mode 100644 packages/cli/tests/context/package.json create mode 100644 packages/cli/tests/context/yarn.lock create mode 100644 packages/cli/tests/helpers/clear-build-output.js create mode 100644 packages/cli/tests/helpers/index.js create mode 100644 packages/cli/tests/helpers/remove-node-modules.js create mode 100644 packages/cli/tests/helpers/run-build-command.js create mode 100644 packages/cli/tests/helpers/run-jest-command.js create mode 100644 packages/cli/tests/helpers/setup-tests.js create mode 100644 packages/cli/tests/helpers/yarn-install.js create mode 100644 packages/cli/tests/jest-ts/jest-ts.test.js create mode 100644 packages/cli/tests/jest-ts/lib/index.ts create mode 100644 packages/cli/tests/jest-ts/lib/sample-stack.ts create mode 100644 packages/cli/tests/jest-ts/package.json create mode 100644 packages/cli/tests/jest-ts/tests/sample-stack.test.js create mode 100644 packages/cli/tests/jest-ts/tsconfig.json create mode 100644 packages/cli/tests/jest-ts/yarn.lock create mode 100644 packages/cli/tests/jest/jest.test.js create mode 100644 packages/cli/tests/jest/lib/dynamodb.js create mode 100644 packages/cli/tests/jest/package.json create mode 100644 packages/cli/tests/jest/tests/dynamodb.test.js create mode 100644 packages/cli/tests/jest/yarn.lock create mode 100644 packages/cli/webpack.config.js create mode 100644 packages/resources/README.md create mode 100644 packages/resources/package.json create mode 100644 packages/resources/src/App.ts create mode 100644 packages/resources/src/Stack.ts create mode 100644 packages/resources/src/index.ts create mode 100644 packages/resources/tsconfig.json create mode 100644 yarn.lock diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000000..c35a6ea721 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,8 @@ +# Don't ever lint node_modules +node_modules +# Don't lint build output (make sure it's set to your correct build folder name) +dist +# Don't lint nyc coverage output +coverage +# Don't lint build outputs in test +/packages/cli/tests/*/build/** diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000000..92f5243f29 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "root": true, + "env": { + "commonjs": true, + "es6": true, + "node": true, + "jest": true + }, + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly" + }, + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "extends": "eslint:recommended", + "rules": {}, + "overrides": [ + { + "files": ["**/*.ts", "**/*.tsx"], + "env": { "browser": true, "es6": true, "node": true }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended" + ], + "globals": { "Atomics": "readonly", "SharedArrayBuffer": "readonly" }, + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], + "rules": {} + } + ] +} diff --git a/.gitignore b/.gitignore index 67045665db..2a3ce969aa 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,6 @@ dist # TernJS port file .tern-port + +# Build outputs in test +/packages/cli/tests/*/build/** diff --git a/README.md b/README.md new file mode 100644 index 0000000000..47a478af56 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# serverless-stack diff --git a/lerna.json b/lerna.json new file mode 100644 index 0000000000..0fa3dd6103 --- /dev/null +++ b/lerna.json @@ -0,0 +1,6 @@ +{ + "packages": ["packages/*"], + "npmClient": "yarn", + "useWorkspaces": true, + "version": "0.0.0" +} diff --git a/package.json b/package.json new file mode 100644 index 0000000000..3668db33dd --- /dev/null +++ b/package.json @@ -0,0 +1,40 @@ +{ + "name": "serverless-stack", + "license": "MIT", + "private": true, + "workspaces": [ + "packages/*" + ], + "scripts": { + "version": "lerna version", + "publish": "lerna publish", + "clean": "lerna run clean", + "prepare": "lerna run prepare", + "test": "lerna run test --stream --scope=@serverless-stack/cli" + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^3.8.0", + "@typescript-eslint/parser": "^3.8.0", + "eslint": "^7.6.0", + "husky": "^4.2.5", + "lerna": "^3.22.1", + "lint-staged": "^10.2.11", + "prettier": "^2.0.5", + "typescript": "^3.9.7" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "*.{js,ts,css,json,md}": [ + "prettier --write", + "git add" + ], + "*.{js,ts}": [ + "eslint --fix", + "git add" + ] + } +} diff --git a/packages/cli/README.md b/packages/cli/README.md new file mode 100644 index 0000000000..b23fbd9262 --- /dev/null +++ b/packages/cli/README.md @@ -0,0 +1 @@ +# @serverless-stack/cli diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js new file mode 100755 index 0000000000..70745775f7 --- /dev/null +++ b/packages/cli/bin/scripts.js @@ -0,0 +1,146 @@ +#!/usr/bin/env node +/** + * Based on https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/bin/react-scripts.js + */ + +"use strict"; + +// Makes the script crash on unhandled rejections instead of silently +// ignoring them. In the future, promise rejections that are not handled will +// terminate the Node.js process with a non-zero exit code. +process.on("unhandledRejection", (err) => { + throw err; +}); + +const yargs = require("yargs"); +const spawn = require("cross-spawn"); + +const args = process.argv.slice(2); + +const cmd = { + s: "sst", + cdk: "cdk", + test: "test", + build: "build", + deploy: "deploy", + remove: "remove", +}; + +const internals = { + [cmd.build]: require("../scripts/build"), + [cmd.deploy]: require("../scripts/deploy"), + [cmd.remove]: require("../scripts/remove"), +}; + +const scriptIndex = args.findIndex((x) => x === "test"); +const script = scriptIndex === -1 ? args[0] : args[scriptIndex]; +const nodeArgs = scriptIndex > 0 ? args.slice(0, scriptIndex) : []; + +function addOptions(currentCmd) { + return function (yargs) { + yargs + .option("stage", { + describe: "The stage you want to deploy to", + }) + .option("region", { + describe: "The region you want to deploy to", + }); + + if (currentCmd === cmd.deploy || currentCmd === cmd.remove) { + yargs.positional("stack", { + describe: "Specify a stack, if you have multiple stacks", + }); + } + + return yargs; + }; +} + +const argv = yargs + .usage(`${cmd.s} `) + .demandCommand(1) + + .command( + cmd.build, + "Build your app and prepare to deploy", + addOptions(cmd.build) + ) + .command( + `${cmd.deploy} [stack]`, + "Deploy your app to AWS", + addOptions(cmd.deploy) + ) + .command( + `${cmd.remove} [stack]`, + "Remove your app and all its resources", + addOptions(cmd.remove) + ) + + .command(cmd.test, "Run your tests") + .command(cmd.cdk, "Access the AWS CDK CLI") + + .example([ + [`$0 ${cmd.build}`, "Build using defaults"], + [`$0 ${cmd.remove} my-s3-stack`, "Remove a specific stack"], + [ + `$0 ${cmd.deploy} --stage prod --region us-west-1`, + "Deploy to a stage and region", + ], + ]) + + .help("h") + .version() + .alias("h", "help") + .alias("v", "version") + .epilogue("For more information, visit www.serverless-stack.com") + + .strictCommands(true) + .wrap(yargs.terminalWidth()) + + .fail((msg, err) => { + if (err) throw err; + + yargs.showHelp(); + + process.exit(0); + }) + .parse(); + +switch (script) { + case cmd.build: + case cmd.deploy: + case cmd.remove: + internals[script](argv); + break; + case cmd.cdk: + case cmd.test: { + const result = spawn.sync( + "node", + nodeArgs + .concat(require.resolve("../scripts/" + script)) + .concat(args.slice(scriptIndex + 1)), + { stdio: "inherit" } + ); + if (result.signal) { + if (result.signal === "SIGKILL") { + console.log( + "The command failed because the process exited too early. " + + "This probably means the system ran out of memory or someone called " + + "`kill -9` on the process." + ); + } else if (result.signal === "SIGTERM") { + console.log( + "The command failed because the process exited too early. " + + "Someone might have called `kill` or `killall`, or the system could " + + "be shutting down." + ); + } + process.exit(1); + } + process.exit(result.status); + break; + } + default: + console.log('Unknown script "' + script + '".'); + break; +} diff --git a/packages/cli/package.json b/packages/cli/package.json new file mode 100644 index 0000000000..8e9d07ae66 --- /dev/null +++ b/packages/cli/package.json @@ -0,0 +1,56 @@ +{ + "name": "@serverless-stack/cli", + "version": "0.0.0", + "description": "An extension of the AWS CDK that works with Serverless Framework projects.", + "scripts": { + "build": "webpack --config webpack.config.js", + "clean": "rm -rf scripts/wrapper/dist", + "prepare": "npm run build", + "test": "jest --no-watchman" + }, + "bin": { + "sst": "./bin/scripts.js" + }, + "jest": { + "setupFilesAfterEnv": [ + "/tests/helpers/setup-tests.js" + ], + "testPathIgnorePatterns": [ + "/scripts", + "/tests/jest/tests", + "/tests/jest-ts/tests" + ] + }, + "author": { + "name": "Anomaly Innovations", + "url": "https://anoma.ly" + }, + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "homepage": "https://serverless-stack.com", + "dependencies": { + "@aws-cdk/core": "^1.54.0", + "@babel/cli": "^7.10.5", + "@babel/core": "^7.10.5", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/preset-env": "^7.10.4", + "@serverless-stack/resources": "^0.0.0", + "@types/jest": "^26.0.7", + "@types/node": "^14.0.27", + "aws-cdk": "^1.54.0", + "chalk": "^4.1.0", + "core-js": "^3.6.5", + "cross-spawn": "^7.0.3", + "jest": "^26.1.0", + "ts-jest": "^26.1.4", + "typescript": "^3.9.7", + "yargs": "^15.4.1" + }, + "devDependencies": { + "@serverless-stack/resources": "^0.0.0", + "webpack": "^4.44.0", + "webpack-cli": "^3.3.12" + } +} diff --git a/packages/cli/scripts/build.js b/packages/cli/scripts/build.js new file mode 100644 index 0000000000..faec6abd4d --- /dev/null +++ b/packages/cli/scripts/build.js @@ -0,0 +1,22 @@ +"use strict"; + +const path = require("path"); +const spawn = require("cross-spawn"); + +const paths = require("./config/paths"); +const prepareCdk = require("./config/prepareCdk"); +const cacheCdkContext = require("./config/cacheCdkContext"); + +module.exports = function (argv) { + // Prepare app + prepareCdk(argv); + + // CDK synth + spawn.sync(path.join(paths.ownNodeModules, ".bin/cdk"), ["synth"], { + stdio: "inherit", + cwd: paths.appBuildPath, + }); + + // Cache cdk.context.json + cacheCdkContext(); +}; diff --git a/packages/cli/scripts/cdk.js b/packages/cli/scripts/cdk.js new file mode 100644 index 0000000000..1e93fd7e63 --- /dev/null +++ b/packages/cli/scripts/cdk.js @@ -0,0 +1,25 @@ +"use strict"; + +// Makes the script crash on unhandled rejections instead of silently +// ignoring them. In the future, promise rejections that are not handled will +// terminate the Node.js process with a non-zero exit code. +process.on("unhandledRejection", (err) => { + throw err; +}); + +let argv = process.argv.slice(3); + +const path = require("path"); +const spawn = require("cross-spawn"); + +const paths = require("./config/paths"); +const prepareCdk = require("./config/prepareCdk"); + +// Prepare app +prepareCdk(); + +// CDK command +spawn.sync(path.join(paths.ownNodeModules, ".bin/cdk"), argv, { + stdio: "inherit", + cwd: paths.appBuildPath, +}); diff --git a/packages/cli/scripts/config/.babelrc.json b/packages/cli/scripts/config/.babelrc.json new file mode 100644 index 0000000000..203e1f1b68 --- /dev/null +++ b/packages/cli/scripts/config/.babelrc.json @@ -0,0 +1,14 @@ +{ + "sourceMaps": "inline", + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "node": "8.10" + } + } + ] + ], + "plugins": ["@babel/plugin-proposal-class-properties"] +} diff --git a/packages/cli/scripts/config/babelJestTransform.js b/packages/cli/scripts/config/babelJestTransform.js new file mode 100644 index 0000000000..dd3b69a351 --- /dev/null +++ b/packages/cli/scripts/config/babelJestTransform.js @@ -0,0 +1,10 @@ +"use strict"; + +const babelJest = require("babel-jest"); + +module.exports = babelJest.createTransformer({ + presets: ["@babel/preset-env"], + plugins: ["@babel/plugin-proposal-class-properties"], + babelrc: false, + configFile: false, +}); diff --git a/packages/cli/scripts/config/cacheCdkContext.js b/packages/cli/scripts/config/cacheCdkContext.js new file mode 100644 index 0000000000..aa68aecf01 --- /dev/null +++ b/packages/cli/scripts/config/cacheCdkContext.js @@ -0,0 +1,13 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +const paths = require("./paths"); + +module.exports = function () { + const contextPath = path.join(paths.appBuildPath, "cdk.context.json"); + if (fs.existsSync(contextPath)) { + fs.copyFileSync(contextPath, path.join(paths.appPath, "cdk.context.json")); + } +}; diff --git a/packages/cli/scripts/config/createJestConfig.js b/packages/cli/scripts/config/createJestConfig.js new file mode 100644 index 0000000000..d0105223db --- /dev/null +++ b/packages/cli/scripts/config/createJestConfig.js @@ -0,0 +1,103 @@ +/* eslint-disable */ +/** + * Based on https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/scripts/utils/createJestConfig.js + */ +"use strict"; + +const fs = require("fs"); +const chalk = require("chalk"); +const paths = require("./paths"); + +module.exports = (resolve, rootDir) => { + const config = { + collectCoverageFrom: ["./**/*.{js,jsx,ts,tsx}"], + + preset: "ts-jest", + globals: { + "ts-jest": { + babelConfig: { + presets: [require.resolve("@babel/preset-env")], + }, + }, + }, + + setupFiles: [ + require.resolve("core-js/stable"), + require.resolve("regenerator-runtime/runtime"), + ], + + testMatch: [ + "/**/__tests__/**/*.{js,jsx,ts,tsx}", + "/**/*.{spec,test}.{js,jsx,ts,tsx}", + ], + transform: { + "^.+\\.(js|jsx)$": resolve("scripts/config/babelJestTransform.js"), + }, + transformIgnorePatterns: [ + "[/\\\\]node_modules[/\\\\].+\\.(js|jsx|ts|tsx)$", + ], + }; + if (rootDir) { + config.rootDir = rootDir; + } + const overrides = Object.assign({}, require(paths.appPackageJson).jest); + const supportedKeys = [ + "collectCoverageFrom", + "coverageReporters", + "coverageThreshold", + "extraGlobals", + "globalSetup", + "globalTeardown", + "reporters", + "resetMocks", + "resetModules", + "setupFilesAfterEnv", + "snapshotSerializers", + "testResultsProcessor", + "transform", + "transformIgnorePatterns", + "watchPathIgnorePatterns", + "moduleNameMapper", + ]; + if (overrides) { + supportedKeys.forEach((key) => { + if (overrides.hasOwnProperty(key)) { + if (Array.isArray(config[key]) || typeof config[key] !== "object") { + // for arrays or primitive types, directly override the config key + config[key] = overrides[key]; + } else { + // for object types, extend gracefully + config[key] = Object.assign({}, config[key], overrides[key]); + } + + delete overrides[key]; + } + }); + const unsupportedKeys = Object.keys(overrides); + if (unsupportedKeys.length) { + const isOverridingSetupFile = + unsupportedKeys.indexOf("setupFilesAfterEnv") > -1; + + console.error( + chalk.red( + "\nOut of the box, @serverless-stack/resources only supports overriding " + + "these Jest options:\n\n" + + supportedKeys + .map((key) => chalk.bold(" \u2022 " + key)) + .join("\n") + + ".\n\n" + + "These options in your package.json Jest configuration " + + "are not currently supported by @serverless-stack/resources:\n\n" + + unsupportedKeys + .map((key) => chalk.bold(" \u2022 " + key)) + .join("\n") + + "\n\nIf you wish to override other Jest options, " + + "consider using @serverless-stack/resources directly instead.\n" + ) + ); + + process.exit(1); + } + } + return config; +}; diff --git a/packages/cli/scripts/config/paths.js b/packages/cli/scripts/config/paths.js new file mode 100644 index 0000000000..b0835374db --- /dev/null +++ b/packages/cli/scripts/config/paths.js @@ -0,0 +1,26 @@ +/** + * Based on https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/config/paths.js + */ +"use strict"; + +const path = require("path"); +const fs = require("fs"); + +// Make sure any symlinks in the project folder are resolved: +// https://github.com/facebook/create-react-app/issues/637 +const appDirectory = fs.realpathSync(process.cwd()); +const resolveApp = (relativePath) => path.resolve(appDirectory, relativePath); + +const resolveOwn = (relativePath) => + path.resolve(__dirname, "..", relativePath); + +module.exports = { + appPath: resolveApp("."), + appLibPath: resolveApp("./lib"), + appBuildPath: resolveApp("./build"), + appPackageJson: resolveApp("package.json"), + appNodeModules: resolveApp("node_modules"), + ownPath: resolveOwn("../"), + ownScriptsPath: resolveOwn("../scripts"), + ownNodeModules: resolveOwn("../node_modules"), +}; diff --git a/packages/cli/scripts/config/prepareCdk.js b/packages/cli/scripts/config/prepareCdk.js new file mode 100644 index 0000000000..4f4ef378eb --- /dev/null +++ b/packages/cli/scripts/config/prepareCdk.js @@ -0,0 +1,81 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const spawn = require("cross-spawn"); + +const paths = require("./paths"); + +function transpile() { + const tsconfigPath = path.join(paths.appPath, "tsconfig.json"); + if (fs.existsSync(tsconfigPath)) { + spawn.sync( + path.join(paths.ownNodeModules, ".bin/tsc"), + ["--outDir", paths.appBuildPath, "--rootDir", paths.appLibPath], + { stdio: "inherit", cwd: paths.appPath } + ); + } else { + spawn.sync( + path.join(paths.ownNodeModules, ".bin/babel"), + [ + "--config-file", + path.join(paths.ownPath, "scripts/config/.babelrc.json"), + paths.appLibPath, + "--out-dir", + paths.appBuildPath, + ], + { stdio: "inherit" } + ); + } +} + +function copyWrapperFiles() { + fs.copyFileSync( + path.join(paths.ownScriptsPath, "wrapper/run.js"), + path.join(paths.appBuildPath, "run.js") + ); + fs.copyFileSync( + path.join(paths.ownScriptsPath, "wrapper/dist/include.js"), + path.join(paths.appBuildPath, "include.js") + ); +} + +function copyCdkConfig() { + // Copy cdk.json + fs.copyFileSync( + path.join(paths.ownScriptsPath, "wrapper/cdk.json"), + path.join(paths.appBuildPath, "cdk.json") + ); + // Copy cdk.context.json + const contextPath = path.join(paths.appPath, "cdk.context.json"); + if (fs.existsSync(contextPath)) { + fs.copyFileSync( + contextPath, + path.join(paths.appBuildPath, "cdk.context.json") + ); + } +} + +function setOptions(argv) { + const options = {}; + + if (argv.stage) { + options.stage = argv.stage; + } + + if (argv.region) { + options.region = argv.region; + } + + fs.writeFileSync( + path.join(paths.appBuildPath, "options.json"), + JSON.stringify(options) + ); +} + +module.exports = function (argv) { + transpile(); + copyWrapperFiles(); + copyCdkConfig(); + setOptions(argv); +}; diff --git a/packages/cli/scripts/deploy.js b/packages/cli/scripts/deploy.js new file mode 100644 index 0000000000..ec662420d4 --- /dev/null +++ b/packages/cli/scripts/deploy.js @@ -0,0 +1,60 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const spawn = require("cross-spawn"); + +const paths = require("./config/paths"); +const prepareCdk = require("./config/prepareCdk"); +const cacheCdkContext = require("./config/cacheCdkContext"); + +function cacheBootstrap(call) { + if (call.status !== 0) { + return; + } + + const matches = call.stderr + .toString("utf8") + .match(/Environment (aws:\/\/\d+\/[a-z0-9-]+) bootstrapped/); + + if (matches === null) { + return; + } + + const environment = matches[1]; + + const contextPath = path.join(paths.appBuildPath, "cdk.context.json"); + const context = fs.existsSync(contextPath) ? require(contextPath) : {}; + + context.bootstrappedEnvs = context.bootstrappedEnvs || {}; + context.bootstrappedEnvs[environment] = true; + + fs.writeFileSync(contextPath, JSON.stringify(context, null, 2)); +} + +module.exports = function (argv) { + // Prepare app + prepareCdk(argv); + + // CDK bootstrap + const bsCall = spawn.sync( + path.join(paths.ownNodeModules, ".bin/cdk"), + ["bootstrap", "--no-colors"], + { cwd: paths.appBuildPath } + ); + + // Cache Bootstrap results + cacheBootstrap(bsCall); + + const stackArgs = argv.stack ? [argv.stack] : []; + + // CDK deploy + spawn.sync( + path.join(paths.ownNodeModules, ".bin/cdk"), + ["deploy"].concat(stackArgs), + { stdio: "inherit", cwd: paths.appBuildPath } + ); + + // Cache cdk.context.json + cacheCdkContext(); +}; diff --git a/packages/cli/scripts/remove.js b/packages/cli/scripts/remove.js new file mode 100644 index 0000000000..e29efa11d8 --- /dev/null +++ b/packages/cli/scripts/remove.js @@ -0,0 +1,21 @@ +"use strict"; + +const path = require("path"); +const spawn = require("cross-spawn"); + +const paths = require("./config/paths"); +const prepareCdk = require("./config/prepareCdk"); + +module.exports = function (argv) { + // Prepare app + prepareCdk(argv); + + const stackArgs = argv.stack ? [argv.stack] : []; + + // CDK destroy + spawn.sync( + path.join(paths.ownNodeModules, ".bin/cdk"), + ["destroy"].concat(stackArgs), + { stdio: "inherit", cwd: paths.appBuildPath } + ); +}; diff --git a/packages/cli/scripts/test.js b/packages/cli/scripts/test.js new file mode 100644 index 0000000000..e552f05848 --- /dev/null +++ b/packages/cli/scripts/test.js @@ -0,0 +1,90 @@ +/** + * Based on https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/scripts/test.js + */ +"use strict"; + +// Do this as the first thing so that any code reading it knows the right env. +process.env.BABEL_ENV = "test"; +process.env.NODE_ENV = "test"; + +// Makes the script crash on unhandled rejections instead of silently +// ignoring them. In the future, promise rejections that are not handled will +// terminate the Node.js process with a non-zero exit code. +process.on("unhandledRejection", (err) => { + throw err; +}); + +const jest = require("jest"); +let argv = process.argv.slice(2); + +// Disable watchman +argv.push("--no-watchman"); + +const createJestConfig = require("./config/createJestConfig"); +const path = require("path"); +const paths = require("./config/paths"); +argv.push( + "--config", + JSON.stringify( + createJestConfig( + (relativePath) => path.resolve(__dirname, "..", relativePath), + path.resolve(paths.appPath) + ) + ) +); + +// This is a very dirty workaround for https://github.com/facebook/jest/issues/5913. +// We're trying to resolve the environment ourselves because Jest does it incorrectly. +// TODO: remove this as soon as it's fixed in Jest. +const resolve = require("resolve"); +function resolveJestDefaultEnvironment(name) { + const jestDir = path.dirname( + resolve.sync("jest", { + basedir: __dirname, + }) + ); + const jestCLIDir = path.dirname( + resolve.sync("jest-cli", { + basedir: jestDir, + }) + ); + const jestConfigDir = path.dirname( + resolve.sync("jest-config", { + basedir: jestCLIDir, + }) + ); + return resolve.sync(name, { + basedir: jestConfigDir, + }); +} +let cleanArgv = []; +let env = "jsdom"; +let next; +do { + next = argv.shift(); + if (next === "--env") { + env = argv.shift(); + } else if (next.indexOf("--env=") === 0) { + env = next.substring("--env=".length); + } else { + cleanArgv.push(next); + } +} while (argv.length > 0); +argv = cleanArgv; +let resolvedEnv; +try { + resolvedEnv = resolveJestDefaultEnvironment(`jest-environment-${env}`); +} catch (e) { + // ignore +} +if (!resolvedEnv) { + try { + resolvedEnv = resolveJestDefaultEnvironment(env); + } catch (e) { + // ignore + } +} +const testEnvironment = resolvedEnv || env; +argv.push("--env", testEnvironment); + +jest.run(argv); diff --git a/packages/cli/scripts/wrapper/cdk.json b/packages/cli/scripts/wrapper/cdk.json new file mode 100644 index 0000000000..537dd83da9 --- /dev/null +++ b/packages/cli/scripts/wrapper/cdk.json @@ -0,0 +1,7 @@ +{ + "app": "node run.js", + "context": { + "@aws-cdk/core:enableStackNameDuplicates": "true", + "aws-cdk:enableDiffNoFail": "true" + } +} diff --git a/packages/cli/scripts/wrapper/include.js b/packages/cli/scripts/wrapper/include.js new file mode 100644 index 0000000000..6959ed6a3c --- /dev/null +++ b/packages/cli/scripts/wrapper/include.js @@ -0,0 +1,3 @@ +import { App } from "@serverless-stack/resources"; + +export default App; diff --git a/packages/cli/scripts/wrapper/run.js b/packages/cli/scripts/wrapper/run.js new file mode 100644 index 0000000000..dddf168df0 --- /dev/null +++ b/packages/cli/scripts/wrapper/run.js @@ -0,0 +1,27 @@ +#!/usr/bin/env node + +"use strict"; + +const fs = require("fs"); + +const App = require("./include"); +const main = require("./"); + +const configPath = "../sst.json"; +const config = fs.existsSync(configPath) ? require(configPath) : {}; + +const optionsPath = "./options.json"; +const options = fs.existsSync(optionsPath) ? require(optionsPath) : {}; + +const name = config.name; +const stage = options.stage || config.stage; +const region = + options.region || config.region || process.env.CDK_DEFAULT_REGION; + +main.default( + new App.default({ + name, + stage, + region, + }) +); diff --git a/packages/cli/tests/base-ts/base-ts.test.js b/packages/cli/tests/base-ts/base-ts.test.js new file mode 100644 index 0000000000..759f77c2d8 --- /dev/null +++ b/packages/cli/tests/base-ts/base-ts.test.js @@ -0,0 +1,22 @@ +const { + runBuildCommand, + clearBuildOutput, + successRegex, +} = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("base-ts", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).toMatch(successRegex); +}); diff --git a/packages/cli/tests/base-ts/lib/index.ts b/packages/cli/tests/base-ts/lib/index.ts new file mode 100644 index 0000000000..5d8483da78 --- /dev/null +++ b/packages/cli/tests/base-ts/lib/index.ts @@ -0,0 +1,7 @@ +import { SampleStack } from "./stacks/sample-stack"; +import * as sst from "@serverless-stack/resources"; + +export default function main(app: sst.App): void { + new SampleStack(app, "s3-1"); + new SampleStack(app, "s3-2"); +} diff --git a/packages/cli/tests/base-ts/lib/stacks/sample-stack.ts b/packages/cli/tests/base-ts/lib/stacks/sample-stack.ts new file mode 100644 index 0000000000..5fb5eba243 --- /dev/null +++ b/packages/cli/tests/base-ts/lib/stacks/sample-stack.ts @@ -0,0 +1,12 @@ +import * as s3 from "@aws-cdk/aws-s3"; +import * as sst from "@serverless-stack/resources"; + +export class SampleStack extends sst.Stack { + constructor(scope: sst.App, id: string, props?: sst.StackProps) { + super(scope, id, props); + + new s3.Bucket(this, "sample-bucket", { + publicReadAccess: true, + }); + } +} diff --git a/packages/cli/tests/base-ts/package.json b/packages/cli/tests/base-ts/package.json new file mode 100644 index 0000000000..d03b94ee08 --- /dev/null +++ b/packages/cli/tests/base-ts/package.json @@ -0,0 +1,17 @@ +{ + "name": "base-ts", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "../../bin/scripts.js build" + }, + "keywords": [], + "author": "", + "dependencies": { + "@serverless-stack/resources": "../../../resources", + "@aws-cdk/aws-s3": "^1.55.0", + "@aws-cdk/core": "^1.55.0" + }, + "license": "ISC" +} diff --git a/packages/cli/tests/base-ts/tsconfig.json b/packages/cli/tests/base-ts/tsconfig.json new file mode 100644 index 0000000000..087b99baa9 --- /dev/null +++ b/packages/cli/tests/base-ts/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ES2018", + "module": "commonjs", + "lib": ["es2018"], + "declaration": true, + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "noImplicitThis": true, + "alwaysStrict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": false, + "inlineSourceMap": true, + "inlineSources": true, + "experimentalDecorators": true, + "strictPropertyInitialization": false, + "typeRoots": ["./node_modules/@types"] + }, + "exclude": ["build"] +} diff --git a/packages/cli/tests/base-ts/yarn.lock b/packages/cli/tests/base-ts/yarn.lock new file mode 100644 index 0000000000..6d399a1486 --- /dev/null +++ b/packages/cli/tests/base-ts/yarn.lock @@ -0,0 +1,152 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aws-cdk/aws-events@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.55.0.tgz#3d784b0bf7ac2a2ebe6e52a9b89365d30bdd9398" + integrity sha512-jL9bygowe/6kYoAIApBcYi92zSjSxyn43CfOOILkplEsxdg3nNKfgnkQ4JgS1WwCuBNOhPAY6Zzc6bLKDi4Igw== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-iam@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.55.0.tgz#fedac6b83a9a7ee48e4cda6d877f684f1dac0056" + integrity sha512-cAKQN1sEdDXZ2xFOOoWQskDh/GuQS81m6Qd/o6KQeFli8ftXSlD5dq5+UIs+oHBwhE8xwYJLbHDx79L3lQcMug== + dependencies: + "@aws-cdk/core" "1.55.0" + "@aws-cdk/region-info" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-kms@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.55.0.tgz#eaaa9b2ea9b7f65d3bdcab8109104477b2ff2baf" + integrity sha512-GSNKEn2w5QwKF+vwlz0N9TPnRh/p/tOFHb+AuNmNq4y2f3c3rTmW/anJu+ISE5qIVzTnev6bLQ+y7Iidt8aXKQ== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-s3@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.55.0.tgz#41a0f134608fa068d0ea2b451a5ec039da4ca372" + integrity sha512-VNBTw+ADXcNuIi+ziGpEiGN0kxE/32MGUK6esePMxRr+zv9JqE4q0YwiSSjp0FWnM1g3mufkergXfNcGCCPMrw== + dependencies: + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/cloud-assembly-schema@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" + integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/core@1.55.0", "@aws-cdk/core@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" + integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/cx-api@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" + integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + semver "^7.2.2" + +"@aws-cdk/region-info@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" + integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== + +"@serverless-stack/resources@../../../resources": + version "0.0.1" + dependencies: + "@aws-cdk/core" "^1.55.0" + +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== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +constructs@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" + integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" + integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +semver@^7.2.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/tests/base/base.test.js b/packages/cli/tests/base/base.test.js new file mode 100644 index 0000000000..5e1d7088c1 --- /dev/null +++ b/packages/cli/tests/base/base.test.js @@ -0,0 +1,22 @@ +const { + runBuildCommand, + clearBuildOutput, + successRegex, +} = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("base", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).toMatch(successRegex); +}); diff --git a/packages/cli/tests/base/cdk.context.json b/packages/cli/tests/base/cdk.context.json new file mode 100644 index 0000000000..ceb5f0afc5 --- /dev/null +++ b/packages/cli/tests/base/cdk.context.json @@ -0,0 +1,5 @@ +{ + "bootstrappedEnvs": { + "aws://087220554750/us-west-1": true + } +} diff --git a/packages/cli/tests/base/lib/cognito.js b/packages/cli/tests/base/lib/cognito.js new file mode 100644 index 0000000000..035fa04b81 --- /dev/null +++ b/packages/cli/tests/base/lib/cognito.js @@ -0,0 +1,101 @@ +import { CfnOutput } from "@aws-cdk/core"; +import * as iam from "@aws-cdk/aws-iam"; +import * as cognito from "@aws-cdk/aws-cognito"; +import * as sst from "@serverless-stack/resources"; + +export default class CognitoStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + const { bucketArn } = props; + + const stage = this.node.root.stage; + const service = this.node.root.name; + + const userPool = new cognito.UserPool(this, "userPool", { + selfSignUpEnabled: true, + autoVerify: { email: true }, + signInAliases: { email: true }, // Set email as an alias + }); + + const userPoolClient = new cognito.UserPoolClient(this, "userPoolClient", { + userPool, + authFlows: { adminUserPassword: false }, + generateSecret: false, + }); + + const identityPool = new cognito.CfnIdentityPool(this, "identityPool", { + allowUnauthenticatedIdentities: false, // Don't allow unathenticated users + cognitoIdentityProviders: [ + { + clientId: userPoolClient.userPoolClientId, + providerName: userPool.userPoolProviderName, + }, + ], + }); + + // IAM role used for authenticated users + const authenticatedRole = new iam.Role( + this, + "cognitoDefaultAuthenticatedRole", + { + assumedBy: new iam.FederatedPrincipal( + "cognito-identity.amazonaws.com", + { + StringEquals: { + "cognito-identity.amazonaws.com:aud": identityPool.ref, + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "authenticated", + }, + }, + "sts:AssumeRoleWithWebIdentity" + ), + } + ); + authenticatedRole.addToPolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: [ + "mobileanalytics:PutEvents", + "cognito-sync:*", + "cognito-identity:*", + ], + resources: ["*"], + }) + ); + authenticatedRole.addToPolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ["s3:*"], + resources: [ + bucketArn + "/private/${cognito-identity.amazonaws.com:sub}/*", + ], + }) + ); + + new cognito.CfnIdentityPoolRoleAttachment( + this, + "identityPoolRoleAttachment", + { + identityPoolId: identityPool.ref, + roles: { authenticated: authenticatedRole.roleArn }, + } + ); + + // Export values + new CfnOutput(this, "userPoolId", { + value: userPool.userPoolId, + }); + new CfnOutput(this, "userPoolClientId", { + value: userPoolClient.userPoolClientId, + }); + new CfnOutput(this, "identityPoolId", { + value: identityPool.ref, + }); + new CfnOutput(this, "authenticatedRoleName", { + exportName: `ExtCognitoAuthRole-${stage}-${service}`, + value: authenticatedRole.roleName, + }); + } +} diff --git a/packages/cli/tests/base/lib/dynamodb.js b/packages/cli/tests/base/lib/dynamodb.js new file mode 100644 index 0000000000..c7180b9915 --- /dev/null +++ b/packages/cli/tests/base/lib/dynamodb.js @@ -0,0 +1,29 @@ +import { CfnOutput } from "@aws-cdk/core"; +import * as dynamodb from "@aws-cdk/aws-dynamodb"; +import * as sst from "@serverless-stack/resources"; + +export default class DynamoDBStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + const stage = this.node.root.stage; + const service = this.node.root.name; + + const stageTableName = this.node.root.logicalPrefixedName("notes"); + const table = new dynamodb.Table(this, stageTableName, { + partitionKey: { name: "userId", type: dynamodb.AttributeType.STRING }, + sortKey: { name: "noteId", type: dynamodb.AttributeType.STRING }, + billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, + }); + + // Export values + new CfnOutput(this, "notesTableName", { + exportName: `${stage}-${service}-ExtNotesTableName`, + value: table.tableName, + }); + new CfnOutput(this, "notesTableArn", { + exportName: `${stage}-${service}-ExtNotesTableArn`, + value: table.tableArn, + }); + } +} diff --git a/packages/cli/tests/base/lib/index.js b/packages/cli/tests/base/lib/index.js new file mode 100644 index 0000000000..7aca5c8b0a --- /dev/null +++ b/packages/cli/tests/base/lib/index.js @@ -0,0 +1,15 @@ +import S3Stack from "./s3"; +import CognitoStack from "./cognito"; +import DynamoDBStack from "./dynamodb"; +import MyParentStack from "./nested-stack"; + +// Add stacks +export default function main(app) { + new DynamoDBStack(app, "dynamodb"); + + const s3 = new S3Stack(app, "s3"); + + new CognitoStack(app, "cognito", { bucketArn: s3.bucket.bucketArn }); + + new MyParentStack(app, "nested"); +} diff --git a/packages/cli/tests/base/lib/nested-stack.js b/packages/cli/tests/base/lib/nested-stack.js new file mode 100644 index 0000000000..863aa9d735 --- /dev/null +++ b/packages/cli/tests/base/lib/nested-stack.js @@ -0,0 +1,20 @@ +import * as cfn from "@aws-cdk/aws-cloudformation"; +import * as s3 from "@aws-cdk/aws-s3"; +import * as sst from "@serverless-stack/resources"; + +class MyNestedStack extends cfn.NestedStack { + constructor(scope, id, props) { + super(scope, id, props); + + new s3.Bucket(this, "NestedBucket"); + } +} + +export default class MyParentStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + new MyNestedStack(this, "Nested1"); + new MyNestedStack(this, "Nested2"); + } +} diff --git a/packages/cli/tests/base/lib/s3.js b/packages/cli/tests/base/lib/s3.js new file mode 100644 index 0000000000..709adf1252 --- /dev/null +++ b/packages/cli/tests/base/lib/s3.js @@ -0,0 +1,33 @@ +import * as cdk from "@aws-cdk/core"; +import * as s3 from "@aws-cdk/aws-s3"; +import * as sst from "@serverless-stack/resources"; + +export default class S3Stack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + const stage = this.node.root.stage; + const service = this.node.root.name; + + this.bucket = new s3.Bucket(this, "uploads", { + cors: [ + { + allowedMethods: ["GET", "PUT", "POST", "DELETE", "HEAD"], + allowedOrigins: ["*"], + allowedHeaders: ["*"], + maxAge: 3000, + }, + ], + }); + + // Export values + new cdk.CfnOutput(this, "uploadsBucketArn", { + exportName: `${stage}-${service}-ExtAttachmentsBucketArn`, + value: this.bucket.bucketArn, + }); + new cdk.CfnOutput(this, "uploadsBucketName", { + exportName: `${stage}-${service}-ExtAttachmentsBucket`, + value: this.bucket.bucketName, + }); + } +} diff --git a/packages/cli/tests/base/package.json b/packages/cli/tests/base/package.json new file mode 100644 index 0000000000..c3fb9bcb94 --- /dev/null +++ b/packages/cli/tests/base/package.json @@ -0,0 +1,23 @@ +{ + "name": "base", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "compile": "cd ../../../resources && yarn run prepare && cd ../cli && yarn run prepare", + "build": "../../bin/scripts.js build", + "remove": "../../bin/scripts.js remove", + "deploy": "../../bin/scripts.js deploy" + }, + "keywords": [], + "author": "", + "dependencies": { + "@serverless-stack/resources": "../../../resources", + "@aws-cdk/aws-cognito": "^1.54.0", + "@aws-cdk/aws-dynamodb": "^1.54.0", + "@aws-cdk/aws-iam": "^1.54.0", + "@aws-cdk/aws-s3": "^1.54.0", + "@aws-cdk/core": "^1.54.0" + }, + "license": "ISC" +} diff --git a/packages/cli/tests/base/sst.json b/packages/cli/tests/base/sst.json new file mode 100644 index 0000000000..dc2fd52942 --- /dev/null +++ b/packages/cli/tests/base/sst.json @@ -0,0 +1,5 @@ +{ + "name": "notes", + "stage": "prod", + "region": "us-west-1" +} diff --git a/packages/cli/tests/base/yarn.lock b/packages/cli/tests/base/yarn.lock new file mode 100644 index 0000000000..a5ffef9112 --- /dev/null +++ b/packages/cli/tests/base/yarn.lock @@ -0,0 +1,378 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aws-cdk/assets@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.55.0.tgz#02442aea514d08b8f1fb744a3e3f944ab9a5e389" + integrity sha512-fOdk2eW8GEgS9vwgpt/BljV1IvCZ/Et7zYcL331+3XAxZpptOYDjNvV/tfhadX9fe1DhwZnsdqQqDO7eAY2+ig== + dependencies: + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-applicationautoscaling@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.55.0.tgz#ba0a1ee4b8bbe5f565c8d76d32408fcfdd8ba046" + integrity sha512-6BCvybrCYqhmtIckpAdDmNvn6B85+D1tL0ZJofiF8/0DOvuV5noZyzJwvwMO4q/WLzqavxoMSxBd7OswVX3trw== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.55.0" + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-autoscaling-common@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.55.0.tgz#dc0f64351b2d388d9a195f4316a76ec349cee3f5" + integrity sha512-uQTjJmez/2QOYjmwLhQ/nQg4ywsoWvciS/y55nIlp409Ttuw/RapsrRhVAj3q58/3uTERuIUha4vpNe5C2gUKA== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-certificatemanager@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.55.0.tgz#3b7d34e63ca47310778ed3354411bfa0c1f032af" + integrity sha512-nSJNpm1sPKhde1tvZoKiNxdK7jMrh3YSIGL8XsGE0MkNUIFJFu9NQA8JysCs1Fl+WUM2F18KX3OpmXUuzMbrug== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/aws-route53" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-cloudformation@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.55.0.tgz#bf902768eb09623ae8e9439e1cde03619e3cd62c" + integrity sha512-Jd8ArtzRv6gKKrGlwMXnn5Gsg3xv8V0esRn3P9jfoNR7qMkH/u2O9mGJ8C2UXMdeAeDPJld0Xk5DxFYtHFrx2Q== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-sns" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-cloudwatch@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.55.0.tgz#3e58110d008b9dc0c0cd8a8973b4f0b1ca385fc3" + integrity sha512-WxJyDnrYHH7ox/1gWe4v+TfFR6LC7Q/bQS5jfdG1Wm3ZHzlSjOegcIw7jrkOXY5QI6N4jHM5bVwpQgX9cS8/dQ== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-codeguruprofiler@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.55.0.tgz#9e1504db79fe469dbd1678b9ed1e020f30b816c8" + integrity sha512-MeXlEPAQjhCOs7+u1Q+Stva97E/QkE37E5EgoNRWVMoel8TPlfg3/ogYlsvJzfh2/7N11Z2jsU2kPaFw0czdfw== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + +"@aws-cdk/aws-cognito@^1.54.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.55.0.tgz#a8891bc6f023c88cce8c919be509751a424e7f0b" + integrity sha512-necM/Ef7HYgExaSqRh5ximMW6AbDhtj0ARZv3jLN1VTCc7VHgUp+8kkBQ7XUwJVzAhD1D1yumpq51ymyy5vREA== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/custom-resources" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-dynamodb@^1.54.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.55.0.tgz#da2da006d03933385cd9aebf2404e175cc730cda" + integrity sha512-MqiTSZ2B1XFoQ28Y9GCtSPRyQGtTwxJxOiECXQZ3axnCz/3x3HFilvvBL31QsBmGkkRuiCNZ67u6+VUCn3J+LQ== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.55.0" + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/custom-resources" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-ec2@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.55.0.tgz#a6c2ab965bd75dd3f255027c11314775289e53a8" + integrity sha512-3FQ6X7BALEFMScsYUNCf+wAY4Zw6FE8V42S6i/OVZhZXY3/iZqiJh/BAJruj/VM1QO9nPRYdF5lnTwFssp17PQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-ssm" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + "@aws-cdk/region-info" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-efs@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.55.0.tgz#dfff8ceb245d2cc9f03b158c9d55b64d6a57c0cf" + integrity sha512-BGbF9vby78BNAPwyqzdsErrPgkC0ZCmhIekiTpMdlmhNFuMf6GJMOXY2rr81N7mW6HaAMe6Lqd6w+Te/G0IzHA== + dependencies: + "@aws-cdk/aws-ec2" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-events@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.55.0.tgz#3d784b0bf7ac2a2ebe6e52a9b89365d30bdd9398" + integrity sha512-jL9bygowe/6kYoAIApBcYi92zSjSxyn43CfOOILkplEsxdg3nNKfgnkQ4JgS1WwCuBNOhPAY6Zzc6bLKDi4Igw== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-iam@1.55.0", "@aws-cdk/aws-iam@^1.54.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.55.0.tgz#fedac6b83a9a7ee48e4cda6d877f684f1dac0056" + integrity sha512-cAKQN1sEdDXZ2xFOOoWQskDh/GuQS81m6Qd/o6KQeFli8ftXSlD5dq5+UIs+oHBwhE8xwYJLbHDx79L3lQcMug== + dependencies: + "@aws-cdk/core" "1.55.0" + "@aws-cdk/region-info" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-kms@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.55.0.tgz#eaaa9b2ea9b7f65d3bdcab8109104477b2ff2baf" + integrity sha512-GSNKEn2w5QwKF+vwlz0N9TPnRh/p/tOFHb+AuNmNq4y2f3c3rTmW/anJu+ISE5qIVzTnev6bLQ+y7Iidt8aXKQ== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-lambda@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.55.0.tgz#751c89a64797bc4ae1ea0801fb39083752455ff9" + integrity sha512-/5df6QR3vbJr/G5/HFmxG/QvxPIjSdzSgaXjK7a/7tzxRISWPaYLN4sVZQHVDYHPe+WZ291uulYE+juiyGrvqQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-codeguruprofiler" "1.55.0" + "@aws-cdk/aws-ec2" "1.55.0" + "@aws-cdk/aws-efs" "1.55.0" + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-s3-assets" "1.55.0" + "@aws-cdk/aws-sqs" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-logs@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.55.0.tgz#267aa66bff737e47be5dc3d326ea936cf73c62e6" + integrity sha512-sUflJ+MuB69MwHhtWZUY8jf2JLxXXbmGzs/T3VHnscULAsQoo6Tu5v/kXvtXU04CC8YxUG6+hQkO6bl3bF6M1Q== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-route53@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.55.0.tgz#b6de1cb4ece3897e506ded8caefad6c14c53a033" + integrity sha512-HI0UJLa73iLUv+mnZjOPQmcfhESvqNoUCPN3PwEBAwGECVk/gKBomNV7g/dYNE1MfRHdi/4nIM3T7yC6Br+zNw== + dependencies: + "@aws-cdk/aws-ec2" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-s3-assets@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.55.0.tgz#7243ee94f767d6686b6b9c0caaf9af3aa38a656d" + integrity sha512-zyYFRw1xFmuONiuj9ym9HsnYyAeE2a1L1q2/vpvlXARLIsk7JDG37nnnh40ccm2/YQAoVLXqKZb+VTS5cUKhgA== + dependencies: + "@aws-cdk/assets" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-s3@1.55.0", "@aws-cdk/aws-s3@^1.54.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.55.0.tgz#41a0f134608fa068d0ea2b451a5ec039da4ca372" + integrity sha512-VNBTw+ADXcNuIi+ziGpEiGN0kxE/32MGUK6esePMxRr+zv9JqE4q0YwiSSjp0FWnM1g3mufkergXfNcGCCPMrw== + dependencies: + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-sns@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.55.0.tgz#e3a6ef9b7235e39dba8a3f172da31d63e0d961b1" + integrity sha512-WR2ogCi6ngMsZAxq1O71WTxYz1GC9oSxK/K1sj7lboDW712OJXgaz5Giat073TYosyuiZD0uUvSPRvBfxbfEIg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-sqs" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-sqs@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.55.0.tgz#b70e100e941aad369557ae6ed991a40972b4e20b" + integrity sha512-CpXi33lBg8PgMJvxwRpPOQmD+DLUaUHxRpjjjLP6tfUDwk5cIGwRG+QSTd4FmNcDm3Cvb1x0WI8PSdwfgaOSiw== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-ssm@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.55.0.tgz#5b51cc6875956829df499b3c9ed34b41e47c63ce" + integrity sha512-lTJj0rDZS5qVapV4WI/yfm3B235hJtMgDHMRMoOAZTNQSgHFvp2/5l1gSKOfqlanS90aeLUIfEXWlXALnwveLg== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/cloud-assembly-schema@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" + integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/core@1.55.0", "@aws-cdk/core@^1.54.0", "@aws-cdk/core@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" + integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/custom-resources@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.55.0.tgz#af33b6dc28a9431d60cd6e7774a166919a7622be" + integrity sha512-AKc9y8RYAU4J2b6rB902jq66vwOzshsgNYl5dTS8cFxdCjR4YthuaAyatxXMBJz4SepL+X6kwjxF1ed6/DFFFQ== + dependencies: + "@aws-cdk/aws-cloudformation" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-sns" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/cx-api@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" + integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + semver "^7.2.2" + +"@aws-cdk/region-info@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" + integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== + +"@serverless-stack/resources@../../../resources": + version "0.0.1" + dependencies: + "@aws-cdk/core" "^1.55.0" + +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== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +constructs@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" + integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" + integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +semver@^7.2.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/tests/config/config.test.js b/packages/cli/tests/config/config.test.js new file mode 100644 index 0000000000..f168a40be8 --- /dev/null +++ b/packages/cli/tests/config/config.test.js @@ -0,0 +1,18 @@ +const { runBuildCommand, clearBuildOutput } = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the config.json is getting picked up + */ +test("config", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).toContain("krusty-krab-prod-jest-us-west-2"); +}); diff --git a/packages/cli/tests/config/lib/index.js b/packages/cli/tests/config/lib/index.js new file mode 100644 index 0000000000..69fdac9a55 --- /dev/null +++ b/packages/cli/tests/config/lib/index.js @@ -0,0 +1,18 @@ +import * as dynamodb from "@aws-cdk/aws-dynamodb"; +import * as sst from "@serverless-stack/resources"; + +class DynamoDBStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + new dynamodb.Table(this, "notes", { + partitionKey: { name: "userId", type: dynamodb.AttributeType.STRING }, + }); + } +} + +export default function main(app) { + console.log(`${app.name}-${app.stage}-${app.region}`); + + new DynamoDBStack(app, "dynamodb"); +} diff --git a/packages/cli/tests/config/package.json b/packages/cli/tests/config/package.json new file mode 100644 index 0000000000..84bf7bbaa4 --- /dev/null +++ b/packages/cli/tests/config/package.json @@ -0,0 +1,16 @@ +{ + "name": "config", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "../../bin/scripts.js build" + }, + "keywords": [], + "author": "", + "dependencies": { + "@serverless-stack/resources": "../../../resources", + "@aws-cdk/aws-dynamodb": "^1.55.0" + }, + "license": "ISC" +} diff --git a/packages/cli/tests/config/sst.json b/packages/cli/tests/config/sst.json new file mode 100644 index 0000000000..2437eb18c5 --- /dev/null +++ b/packages/cli/tests/config/sst.json @@ -0,0 +1,5 @@ +{ + "name": "krusty-krab", + "stage": "prod-jest", + "region": "us-west-2" +} diff --git a/packages/cli/tests/config/yarn.lock b/packages/cli/tests/config/yarn.lock new file mode 100644 index 0000000000..682ecfd2bb --- /dev/null +++ b/packages/cli/tests/config/yarn.lock @@ -0,0 +1,344 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aws-cdk/assets@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.55.0.tgz#02442aea514d08b8f1fb744a3e3f944ab9a5e389" + integrity sha512-fOdk2eW8GEgS9vwgpt/BljV1IvCZ/Et7zYcL331+3XAxZpptOYDjNvV/tfhadX9fe1DhwZnsdqQqDO7eAY2+ig== + dependencies: + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-applicationautoscaling@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.55.0.tgz#ba0a1ee4b8bbe5f565c8d76d32408fcfdd8ba046" + integrity sha512-6BCvybrCYqhmtIckpAdDmNvn6B85+D1tL0ZJofiF8/0DOvuV5noZyzJwvwMO4q/WLzqavxoMSxBd7OswVX3trw== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.55.0" + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-autoscaling-common@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.55.0.tgz#dc0f64351b2d388d9a195f4316a76ec349cee3f5" + integrity sha512-uQTjJmez/2QOYjmwLhQ/nQg4ywsoWvciS/y55nIlp409Ttuw/RapsrRhVAj3q58/3uTERuIUha4vpNe5C2gUKA== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-cloudformation@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.55.0.tgz#bf902768eb09623ae8e9439e1cde03619e3cd62c" + integrity sha512-Jd8ArtzRv6gKKrGlwMXnn5Gsg3xv8V0esRn3P9jfoNR7qMkH/u2O9mGJ8C2UXMdeAeDPJld0Xk5DxFYtHFrx2Q== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-sns" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-cloudwatch@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.55.0.tgz#3e58110d008b9dc0c0cd8a8973b4f0b1ca385fc3" + integrity sha512-WxJyDnrYHH7ox/1gWe4v+TfFR6LC7Q/bQS5jfdG1Wm3ZHzlSjOegcIw7jrkOXY5QI6N4jHM5bVwpQgX9cS8/dQ== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-codeguruprofiler@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.55.0.tgz#9e1504db79fe469dbd1678b9ed1e020f30b816c8" + integrity sha512-MeXlEPAQjhCOs7+u1Q+Stva97E/QkE37E5EgoNRWVMoel8TPlfg3/ogYlsvJzfh2/7N11Z2jsU2kPaFw0czdfw== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + +"@aws-cdk/aws-dynamodb@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.55.0.tgz#da2da006d03933385cd9aebf2404e175cc730cda" + integrity sha512-MqiTSZ2B1XFoQ28Y9GCtSPRyQGtTwxJxOiECXQZ3axnCz/3x3HFilvvBL31QsBmGkkRuiCNZ67u6+VUCn3J+LQ== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.55.0" + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/custom-resources" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-ec2@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.55.0.tgz#a6c2ab965bd75dd3f255027c11314775289e53a8" + integrity sha512-3FQ6X7BALEFMScsYUNCf+wAY4Zw6FE8V42S6i/OVZhZXY3/iZqiJh/BAJruj/VM1QO9nPRYdF5lnTwFssp17PQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-ssm" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + "@aws-cdk/region-info" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-efs@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.55.0.tgz#dfff8ceb245d2cc9f03b158c9d55b64d6a57c0cf" + integrity sha512-BGbF9vby78BNAPwyqzdsErrPgkC0ZCmhIekiTpMdlmhNFuMf6GJMOXY2rr81N7mW6HaAMe6Lqd6w+Te/G0IzHA== + dependencies: + "@aws-cdk/aws-ec2" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-events@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.55.0.tgz#3d784b0bf7ac2a2ebe6e52a9b89365d30bdd9398" + integrity sha512-jL9bygowe/6kYoAIApBcYi92zSjSxyn43CfOOILkplEsxdg3nNKfgnkQ4JgS1WwCuBNOhPAY6Zzc6bLKDi4Igw== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-iam@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.55.0.tgz#fedac6b83a9a7ee48e4cda6d877f684f1dac0056" + integrity sha512-cAKQN1sEdDXZ2xFOOoWQskDh/GuQS81m6Qd/o6KQeFli8ftXSlD5dq5+UIs+oHBwhE8xwYJLbHDx79L3lQcMug== + dependencies: + "@aws-cdk/core" "1.55.0" + "@aws-cdk/region-info" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-kms@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.55.0.tgz#eaaa9b2ea9b7f65d3bdcab8109104477b2ff2baf" + integrity sha512-GSNKEn2w5QwKF+vwlz0N9TPnRh/p/tOFHb+AuNmNq4y2f3c3rTmW/anJu+ISE5qIVzTnev6bLQ+y7Iidt8aXKQ== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-lambda@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.55.0.tgz#751c89a64797bc4ae1ea0801fb39083752455ff9" + integrity sha512-/5df6QR3vbJr/G5/HFmxG/QvxPIjSdzSgaXjK7a/7tzxRISWPaYLN4sVZQHVDYHPe+WZ291uulYE+juiyGrvqQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-codeguruprofiler" "1.55.0" + "@aws-cdk/aws-ec2" "1.55.0" + "@aws-cdk/aws-efs" "1.55.0" + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-s3-assets" "1.55.0" + "@aws-cdk/aws-sqs" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-logs@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.55.0.tgz#267aa66bff737e47be5dc3d326ea936cf73c62e6" + integrity sha512-sUflJ+MuB69MwHhtWZUY8jf2JLxXXbmGzs/T3VHnscULAsQoo6Tu5v/kXvtXU04CC8YxUG6+hQkO6bl3bF6M1Q== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-s3-assets@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.55.0.tgz#7243ee94f767d6686b6b9c0caaf9af3aa38a656d" + integrity sha512-zyYFRw1xFmuONiuj9ym9HsnYyAeE2a1L1q2/vpvlXARLIsk7JDG37nnnh40ccm2/YQAoVLXqKZb+VTS5cUKhgA== + dependencies: + "@aws-cdk/assets" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-s3@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.55.0.tgz#41a0f134608fa068d0ea2b451a5ec039da4ca372" + integrity sha512-VNBTw+ADXcNuIi+ziGpEiGN0kxE/32MGUK6esePMxRr+zv9JqE4q0YwiSSjp0FWnM1g3mufkergXfNcGCCPMrw== + dependencies: + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-sns@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.55.0.tgz#e3a6ef9b7235e39dba8a3f172da31d63e0d961b1" + integrity sha512-WR2ogCi6ngMsZAxq1O71WTxYz1GC9oSxK/K1sj7lboDW712OJXgaz5Giat073TYosyuiZD0uUvSPRvBfxbfEIg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-sqs" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-sqs@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.55.0.tgz#b70e100e941aad369557ae6ed991a40972b4e20b" + integrity sha512-CpXi33lBg8PgMJvxwRpPOQmD+DLUaUHxRpjjjLP6tfUDwk5cIGwRG+QSTd4FmNcDm3Cvb1x0WI8PSdwfgaOSiw== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-ssm@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.55.0.tgz#5b51cc6875956829df499b3c9ed34b41e47c63ce" + integrity sha512-lTJj0rDZS5qVapV4WI/yfm3B235hJtMgDHMRMoOAZTNQSgHFvp2/5l1gSKOfqlanS90aeLUIfEXWlXALnwveLg== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/cloud-assembly-schema@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" + integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/core@1.55.0", "@aws-cdk/core@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" + integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/custom-resources@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.55.0.tgz#af33b6dc28a9431d60cd6e7774a166919a7622be" + integrity sha512-AKc9y8RYAU4J2b6rB902jq66vwOzshsgNYl5dTS8cFxdCjR4YthuaAyatxXMBJz4SepL+X6kwjxF1ed6/DFFFQ== + dependencies: + "@aws-cdk/aws-cloudformation" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-sns" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/cx-api@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" + integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + semver "^7.2.2" + +"@aws-cdk/region-info@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" + integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== + +"@serverless-stack/resources@../../../resources": + version "0.0.0" + dependencies: + "@aws-cdk/core" "^1.55.0" + +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== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +constructs@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" + integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" + integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +semver@^7.2.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/tests/context/cdk.context.json b/packages/cli/tests/context/cdk.context.json new file mode 100644 index 0000000000..3f98a66294 --- /dev/null +++ b/packages/cli/tests/context/cdk.context.json @@ -0,0 +1,3 @@ +{ + "context_test": "test_context_value" +} diff --git a/packages/cli/tests/context/context.test.js b/packages/cli/tests/context/context.test.js new file mode 100644 index 0000000000..05e4fab9b6 --- /dev/null +++ b/packages/cli/tests/context/context.test.js @@ -0,0 +1,18 @@ +const { runBuildCommand, clearBuildOutput } = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the cdk.context.json is getting picked up + */ +test("context", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).toContain("test_context_value"); +}); diff --git a/packages/cli/tests/context/lib/index.js b/packages/cli/tests/context/lib/index.js new file mode 100644 index 0000000000..fe697b094e --- /dev/null +++ b/packages/cli/tests/context/lib/index.js @@ -0,0 +1,18 @@ +import * as dynamodb from "@aws-cdk/aws-dynamodb"; +import * as sst from "@serverless-stack/resources"; + +class DynamoDBStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + console.log(this.node.tryGetContext("context_test")); + + new dynamodb.Table(this, "notes", { + partitionKey: { name: "userId", type: dynamodb.AttributeType.STRING }, + }); + } +} + +export default function main(app) { + new DynamoDBStack(app, "dynamodb"); +} diff --git a/packages/cli/tests/context/package.json b/packages/cli/tests/context/package.json new file mode 100644 index 0000000000..bfcf3131e9 --- /dev/null +++ b/packages/cli/tests/context/package.json @@ -0,0 +1,16 @@ +{ + "name": "context", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "../../bin/scripts.js build" + }, + "keywords": [], + "author": "", + "dependencies": { + "@serverless-stack/resources": "../../../resources", + "@aws-cdk/aws-dynamodb": "^1.55.0" + }, + "license": "ISC" +} diff --git a/packages/cli/tests/context/yarn.lock b/packages/cli/tests/context/yarn.lock new file mode 100644 index 0000000000..a268053f2d --- /dev/null +++ b/packages/cli/tests/context/yarn.lock @@ -0,0 +1,344 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aws-cdk/assets@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.55.0.tgz#02442aea514d08b8f1fb744a3e3f944ab9a5e389" + integrity sha512-fOdk2eW8GEgS9vwgpt/BljV1IvCZ/Et7zYcL331+3XAxZpptOYDjNvV/tfhadX9fe1DhwZnsdqQqDO7eAY2+ig== + dependencies: + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-applicationautoscaling@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.55.0.tgz#ba0a1ee4b8bbe5f565c8d76d32408fcfdd8ba046" + integrity sha512-6BCvybrCYqhmtIckpAdDmNvn6B85+D1tL0ZJofiF8/0DOvuV5noZyzJwvwMO4q/WLzqavxoMSxBd7OswVX3trw== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.55.0" + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-autoscaling-common@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.55.0.tgz#dc0f64351b2d388d9a195f4316a76ec349cee3f5" + integrity sha512-uQTjJmez/2QOYjmwLhQ/nQg4ywsoWvciS/y55nIlp409Ttuw/RapsrRhVAj3q58/3uTERuIUha4vpNe5C2gUKA== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-cloudformation@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.55.0.tgz#bf902768eb09623ae8e9439e1cde03619e3cd62c" + integrity sha512-Jd8ArtzRv6gKKrGlwMXnn5Gsg3xv8V0esRn3P9jfoNR7qMkH/u2O9mGJ8C2UXMdeAeDPJld0Xk5DxFYtHFrx2Q== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-sns" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-cloudwatch@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.55.0.tgz#3e58110d008b9dc0c0cd8a8973b4f0b1ca385fc3" + integrity sha512-WxJyDnrYHH7ox/1gWe4v+TfFR6LC7Q/bQS5jfdG1Wm3ZHzlSjOegcIw7jrkOXY5QI6N4jHM5bVwpQgX9cS8/dQ== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-codeguruprofiler@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.55.0.tgz#9e1504db79fe469dbd1678b9ed1e020f30b816c8" + integrity sha512-MeXlEPAQjhCOs7+u1Q+Stva97E/QkE37E5EgoNRWVMoel8TPlfg3/ogYlsvJzfh2/7N11Z2jsU2kPaFw0czdfw== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + +"@aws-cdk/aws-dynamodb@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.55.0.tgz#da2da006d03933385cd9aebf2404e175cc730cda" + integrity sha512-MqiTSZ2B1XFoQ28Y9GCtSPRyQGtTwxJxOiECXQZ3axnCz/3x3HFilvvBL31QsBmGkkRuiCNZ67u6+VUCn3J+LQ== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.55.0" + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/custom-resources" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-ec2@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.55.0.tgz#a6c2ab965bd75dd3f255027c11314775289e53a8" + integrity sha512-3FQ6X7BALEFMScsYUNCf+wAY4Zw6FE8V42S6i/OVZhZXY3/iZqiJh/BAJruj/VM1QO9nPRYdF5lnTwFssp17PQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-ssm" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + "@aws-cdk/region-info" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-efs@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.55.0.tgz#dfff8ceb245d2cc9f03b158c9d55b64d6a57c0cf" + integrity sha512-BGbF9vby78BNAPwyqzdsErrPgkC0ZCmhIekiTpMdlmhNFuMf6GJMOXY2rr81N7mW6HaAMe6Lqd6w+Te/G0IzHA== + dependencies: + "@aws-cdk/aws-ec2" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-events@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.55.0.tgz#3d784b0bf7ac2a2ebe6e52a9b89365d30bdd9398" + integrity sha512-jL9bygowe/6kYoAIApBcYi92zSjSxyn43CfOOILkplEsxdg3nNKfgnkQ4JgS1WwCuBNOhPAY6Zzc6bLKDi4Igw== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-iam@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.55.0.tgz#fedac6b83a9a7ee48e4cda6d877f684f1dac0056" + integrity sha512-cAKQN1sEdDXZ2xFOOoWQskDh/GuQS81m6Qd/o6KQeFli8ftXSlD5dq5+UIs+oHBwhE8xwYJLbHDx79L3lQcMug== + dependencies: + "@aws-cdk/core" "1.55.0" + "@aws-cdk/region-info" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-kms@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.55.0.tgz#eaaa9b2ea9b7f65d3bdcab8109104477b2ff2baf" + integrity sha512-GSNKEn2w5QwKF+vwlz0N9TPnRh/p/tOFHb+AuNmNq4y2f3c3rTmW/anJu+ISE5qIVzTnev6bLQ+y7Iidt8aXKQ== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-lambda@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.55.0.tgz#751c89a64797bc4ae1ea0801fb39083752455ff9" + integrity sha512-/5df6QR3vbJr/G5/HFmxG/QvxPIjSdzSgaXjK7a/7tzxRISWPaYLN4sVZQHVDYHPe+WZ291uulYE+juiyGrvqQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-codeguruprofiler" "1.55.0" + "@aws-cdk/aws-ec2" "1.55.0" + "@aws-cdk/aws-efs" "1.55.0" + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-s3-assets" "1.55.0" + "@aws-cdk/aws-sqs" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-logs@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.55.0.tgz#267aa66bff737e47be5dc3d326ea936cf73c62e6" + integrity sha512-sUflJ+MuB69MwHhtWZUY8jf2JLxXXbmGzs/T3VHnscULAsQoo6Tu5v/kXvtXU04CC8YxUG6+hQkO6bl3bF6M1Q== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-s3-assets@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.55.0.tgz#7243ee94f767d6686b6b9c0caaf9af3aa38a656d" + integrity sha512-zyYFRw1xFmuONiuj9ym9HsnYyAeE2a1L1q2/vpvlXARLIsk7JDG37nnnh40ccm2/YQAoVLXqKZb+VTS5cUKhgA== + dependencies: + "@aws-cdk/assets" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-s3@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.55.0.tgz#41a0f134608fa068d0ea2b451a5ec039da4ca372" + integrity sha512-VNBTw+ADXcNuIi+ziGpEiGN0kxE/32MGUK6esePMxRr+zv9JqE4q0YwiSSjp0FWnM1g3mufkergXfNcGCCPMrw== + dependencies: + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-sns@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.55.0.tgz#e3a6ef9b7235e39dba8a3f172da31d63e0d961b1" + integrity sha512-WR2ogCi6ngMsZAxq1O71WTxYz1GC9oSxK/K1sj7lboDW712OJXgaz5Giat073TYosyuiZD0uUvSPRvBfxbfEIg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-sqs" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-sqs@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.55.0.tgz#b70e100e941aad369557ae6ed991a40972b4e20b" + integrity sha512-CpXi33lBg8PgMJvxwRpPOQmD+DLUaUHxRpjjjLP6tfUDwk5cIGwRG+QSTd4FmNcDm3Cvb1x0WI8PSdwfgaOSiw== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-ssm@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.55.0.tgz#5b51cc6875956829df499b3c9ed34b41e47c63ce" + integrity sha512-lTJj0rDZS5qVapV4WI/yfm3B235hJtMgDHMRMoOAZTNQSgHFvp2/5l1gSKOfqlanS90aeLUIfEXWlXALnwveLg== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/cloud-assembly-schema@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" + integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/core@1.55.0", "@aws-cdk/core@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" + integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/custom-resources@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.55.0.tgz#af33b6dc28a9431d60cd6e7774a166919a7622be" + integrity sha512-AKc9y8RYAU4J2b6rB902jq66vwOzshsgNYl5dTS8cFxdCjR4YthuaAyatxXMBJz4SepL+X6kwjxF1ed6/DFFFQ== + dependencies: + "@aws-cdk/aws-cloudformation" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-sns" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/cx-api@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" + integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + semver "^7.2.2" + +"@aws-cdk/region-info@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" + integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== + +"@serverless-stack/resources@../../../resources": + version "0.0.1" + dependencies: + "@aws-cdk/core" "^1.55.0" + +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== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +constructs@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" + integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" + integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +semver@^7.2.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/tests/helpers/clear-build-output.js b/packages/cli/tests/helpers/clear-build-output.js new file mode 100644 index 0000000000..94ba05e101 --- /dev/null +++ b/packages/cli/tests/helpers/clear-build-output.js @@ -0,0 +1,14 @@ +const { promisify } = require("util"); +const { exec } = require("child_process"); + +const execPromise = promisify(exec); +const TIMEOUT = 30000; + +async function clearBuildOutput(cwd) { + await execPromise("rm -rf build/", { + cwd, + TIMEOUT, + }); +} + +module.exports = clearBuildOutput; diff --git a/packages/cli/tests/helpers/index.js b/packages/cli/tests/helpers/index.js new file mode 100644 index 0000000000..38ab48c64d --- /dev/null +++ b/packages/cli/tests/helpers/index.js @@ -0,0 +1,18 @@ +const yarnInstall = require("./yarn-install"); +const runJestCommand = require("./run-jest-command"); +const runBuildCommand = require("./run-build-command"); +const clearBuildOutput = require("./clear-build-output"); +const removeNodeModules = require("./remove-node-modules"); + +const errorRegex = /(Error|Exception) ---/; +const successRegex = /Successfully synthesized to /; + +module.exports = { + yarnInstall, + errorRegex, + successRegex, + runJestCommand, + runBuildCommand, + clearBuildOutput, + removeNodeModules, +}; diff --git a/packages/cli/tests/helpers/remove-node-modules.js b/packages/cli/tests/helpers/remove-node-modules.js new file mode 100644 index 0000000000..97f90180d7 --- /dev/null +++ b/packages/cli/tests/helpers/remove-node-modules.js @@ -0,0 +1,14 @@ +const { promisify } = require("util"); +const { exec } = require("child_process"); + +const execPromise = promisify(exec); +const TIMEOUT = 30000; + +async function removeNodeModules(cwd) { + await execPromise("rm -rf node_modules/", { + cwd, + TIMEOUT, + }); +} + +module.exports = removeNodeModules; diff --git a/packages/cli/tests/helpers/run-build-command.js b/packages/cli/tests/helpers/run-build-command.js new file mode 100644 index 0000000000..6ef3917b35 --- /dev/null +++ b/packages/cli/tests/helpers/run-build-command.js @@ -0,0 +1,21 @@ +const { promisify } = require("util"); +const { exec } = require("child_process"); +const yarnInstall = require("./yarn-install"); + +const execPromise = promisify(exec); +const TIMEOUT = 30000; + +async function runBuildCommand(cwd, stack) { + stack = stack ? ` ${stack}` : ""; + + await yarnInstall(cwd); + + const { stdout, stderr } = await execPromise(`yarn run build${stack}`, { + cwd, + TIMEOUT, + }); + + return stdout.toString("utf8") + stderr.toString("utf8"); +} + +module.exports = runBuildCommand; diff --git a/packages/cli/tests/helpers/run-jest-command.js b/packages/cli/tests/helpers/run-jest-command.js new file mode 100644 index 0000000000..760e62b8bc --- /dev/null +++ b/packages/cli/tests/helpers/run-jest-command.js @@ -0,0 +1,19 @@ +const { promisify } = require("util"); +const { exec } = require("child_process"); +const yarnInstall = require("./yarn-install"); + +const execPromise = promisify(exec); +const TIMEOUT = 30000; + +async function runJestCommand(cwd) { + await yarnInstall(cwd); + + const { stdout, stderr } = await execPromise("yarn test", { + cwd, + TIMEOUT, + }); + + return stdout.toString("utf8") + stderr.toString("utf8"); +} + +module.exports = runJestCommand; diff --git a/packages/cli/tests/helpers/setup-tests.js b/packages/cli/tests/helpers/setup-tests.js new file mode 100644 index 0000000000..02a47d95f0 --- /dev/null +++ b/packages/cli/tests/helpers/setup-tests.js @@ -0,0 +1,24 @@ +const path = require("path"); +const { execSync } = require("child_process"); + +const TIMEOUT = 30000; +const root = process.cwd(); + +// Prepare resources +execSync("yarn run prepare", { + cwd: path.resolve(root, "../resources"), + TIMEOUT, +}); + +// Prepare CLI +execSync("yarn run prepare", { + cwd: root, + TIMEOUT, +}); + +/* +The default timeout is 5000ms on async tests. +Because we npm install and remove directories, tests can take time to run. +Setting to 1.5 minutes to support slow machines. +*/ +jest.setTimeout(90000); diff --git a/packages/cli/tests/helpers/yarn-install.js b/packages/cli/tests/helpers/yarn-install.js new file mode 100644 index 0000000000..9ae8534f6b --- /dev/null +++ b/packages/cli/tests/helpers/yarn-install.js @@ -0,0 +1,23 @@ +const { promisify } = require("util"); +const { exec } = require("child_process"); +const { exists } = require("fs"); +const removeNodeModules = require("./remove-node-modules"); + +const execPromise = promisify(exec); +const existsPromise = promisify(exists); +const TIMEOUT = 30000; + +async function yarnInstall(cwd) { + const hasPackageJson = await existsPromise(`${cwd}/package.json`); + + if (hasPackageJson) { + await removeNodeModules(cwd); + + await execPromise("yarn", { + cwd, + TIMEOUT, + }); + } +} + +module.exports = yarnInstall; diff --git a/packages/cli/tests/jest-ts/jest-ts.test.js b/packages/cli/tests/jest-ts/jest-ts.test.js new file mode 100644 index 0000000000..43927bc0dc --- /dev/null +++ b/packages/cli/tests/jest-ts/jest-ts.test.js @@ -0,0 +1,10 @@ +const { runJestCommand } = require("../helpers"); + +/** + * Test that the jest tests run successfully + */ +test("jest-ts", async () => { + const result = await runJestCommand(__dirname); + + expect(result).not.toContain("JESTTESTFAILED-----"); +}); diff --git a/packages/cli/tests/jest-ts/lib/index.ts b/packages/cli/tests/jest-ts/lib/index.ts new file mode 100644 index 0000000000..ac6d3f1c57 --- /dev/null +++ b/packages/cli/tests/jest-ts/lib/index.ts @@ -0,0 +1,6 @@ +import { SampleStack } from "./sample-stack"; +import * as sst from "@serverless-stack/resources"; + +export default function main(app: sst.App): void { + new SampleStack(app, "queue"); +} diff --git a/packages/cli/tests/jest-ts/lib/sample-stack.ts b/packages/cli/tests/jest-ts/lib/sample-stack.ts new file mode 100644 index 0000000000..244bd6c0b4 --- /dev/null +++ b/packages/cli/tests/jest-ts/lib/sample-stack.ts @@ -0,0 +1,19 @@ +import * as sns from "@aws-cdk/aws-sns"; +import * as subs from "@aws-cdk/aws-sns-subscriptions"; +import * as sqs from "@aws-cdk/aws-sqs"; +import * as cdk from "@aws-cdk/core"; +import * as sst from "@serverless-stack/resources"; + +export class SampleStack extends sst.Stack { + constructor(scope: sst.App, id: string, props?: sst.StackProps) { + super(scope, id, props); + + const queue = new sqs.Queue(this, "CdkWorkshopQueue", { + visibilityTimeout: cdk.Duration.seconds(300), + }); + + const topic = new sns.Topic(this, "CdkWorkshopTopic"); + + topic.addSubscription(new subs.SqsSubscription(queue)); + } +} diff --git a/packages/cli/tests/jest-ts/package.json b/packages/cli/tests/jest-ts/package.json new file mode 100644 index 0000000000..dcfcf55ff1 --- /dev/null +++ b/packages/cli/tests/jest-ts/package.json @@ -0,0 +1,24 @@ +{ + "name": "jest-ts", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "../../bin/scripts.js build", + "test": "../../bin/scripts.js test --testPathIgnorePatterns=\"./jest-ts.test.js\"" + }, + "keywords": [], + "author": "", + "dependencies": { + "@serverless-stack/resources": "../../../resources", + "@aws-cdk/aws-dynamodb": "^1.55.0", + "@aws-cdk/aws-sns": "^1.55.0", + "@aws-cdk/aws-sns-subscriptions": "^1.55.0", + "@aws-cdk/aws-sqs": "^1.55.0", + "@aws-cdk/core": "^1.55.0" + }, + "license": "ISC", + "devDependencies": { + "@aws-cdk/assert": "^1.55.0" + } +} diff --git a/packages/cli/tests/jest-ts/tests/sample-stack.test.js b/packages/cli/tests/jest-ts/tests/sample-stack.test.js new file mode 100644 index 0000000000..6bae84dab0 --- /dev/null +++ b/packages/cli/tests/jest-ts/tests/sample-stack.test.js @@ -0,0 +1,33 @@ +import { expect as expectCDK, haveResource } from "@aws-cdk/assert"; +import * as sst from "@serverless-stack/resources"; +import { SampleStack } from "../lib/sample-stack"; + +test("SQS Queue Created", () => { + const app = new sst.App({ stage: "dev", region: "us-east-1" }); + // WHEN + const stack = new SampleStack(app, "MyTestStack"); + // THEN + try { + expectCDK(stack).to( + haveResource("AWS::SQS::Queue", { + VisibilityTimeout: 300, + }) + ); + } catch (e) { + // Print out a test string that parent jest.test.js can catch + console.log("JESTTESTFAILED-----"); + } +}); + +test("SNS Topic Created", () => { + const app = new sst.App({ stage: "dev", region: "us-east-1" }); + // WHEN + const stack = new SampleStack(app, "MyTestStack"); + // THEN + try { + expectCDK(stack).to(haveResource("AWS::SNS::Topic")); + } catch (e) { + // Print out a test string that parent jest.test.js can catch + console.log("JESTTESTFAILED-----"); + } +}); diff --git a/packages/cli/tests/jest-ts/tsconfig.json b/packages/cli/tests/jest-ts/tsconfig.json new file mode 100644 index 0000000000..087b99baa9 --- /dev/null +++ b/packages/cli/tests/jest-ts/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ES2018", + "module": "commonjs", + "lib": ["es2018"], + "declaration": true, + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "noImplicitThis": true, + "alwaysStrict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": false, + "inlineSourceMap": true, + "inlineSources": true, + "experimentalDecorators": true, + "strictPropertyInitialization": false, + "typeRoots": ["./node_modules/@types"] + }, + "exclude": ["build"] +} diff --git a/packages/cli/tests/jest-ts/yarn.lock b/packages/cli/tests/jest-ts/yarn.lock new file mode 100644 index 0000000000..1966385063 --- /dev/null +++ b/packages/cli/tests/jest-ts/yarn.lock @@ -0,0 +1,567 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aws-cdk/assert@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.55.0.tgz#04114356c911afae0c26b99f6cd91823c2676e9b" + integrity sha512-f+EXzBpFPl305EnGXH3DJLY/X51cU/u4enCE9BdCq4AnyR3/eqGpKuhav3lxZ0Yu704j9wZKd2M+3Hn2PPjWvA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cloudformation-diff" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/assets@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.55.0.tgz#02442aea514d08b8f1fb744a3e3f944ab9a5e389" + integrity sha512-fOdk2eW8GEgS9vwgpt/BljV1IvCZ/Et7zYcL331+3XAxZpptOYDjNvV/tfhadX9fe1DhwZnsdqQqDO7eAY2+ig== + dependencies: + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-applicationautoscaling@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.55.0.tgz#ba0a1ee4b8bbe5f565c8d76d32408fcfdd8ba046" + integrity sha512-6BCvybrCYqhmtIckpAdDmNvn6B85+D1tL0ZJofiF8/0DOvuV5noZyzJwvwMO4q/WLzqavxoMSxBd7OswVX3trw== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.55.0" + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-autoscaling-common@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.55.0.tgz#dc0f64351b2d388d9a195f4316a76ec349cee3f5" + integrity sha512-uQTjJmez/2QOYjmwLhQ/nQg4ywsoWvciS/y55nIlp409Ttuw/RapsrRhVAj3q58/3uTERuIUha4vpNe5C2gUKA== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-cloudformation@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.55.0.tgz#bf902768eb09623ae8e9439e1cde03619e3cd62c" + integrity sha512-Jd8ArtzRv6gKKrGlwMXnn5Gsg3xv8V0esRn3P9jfoNR7qMkH/u2O9mGJ8C2UXMdeAeDPJld0Xk5DxFYtHFrx2Q== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-sns" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-cloudwatch@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.55.0.tgz#3e58110d008b9dc0c0cd8a8973b4f0b1ca385fc3" + integrity sha512-WxJyDnrYHH7ox/1gWe4v+TfFR6LC7Q/bQS5jfdG1Wm3ZHzlSjOegcIw7jrkOXY5QI6N4jHM5bVwpQgX9cS8/dQ== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-codeguruprofiler@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.55.0.tgz#9e1504db79fe469dbd1678b9ed1e020f30b816c8" + integrity sha512-MeXlEPAQjhCOs7+u1Q+Stva97E/QkE37E5EgoNRWVMoel8TPlfg3/ogYlsvJzfh2/7N11Z2jsU2kPaFw0czdfw== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + +"@aws-cdk/aws-dynamodb@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.55.0.tgz#da2da006d03933385cd9aebf2404e175cc730cda" + integrity sha512-MqiTSZ2B1XFoQ28Y9GCtSPRyQGtTwxJxOiECXQZ3axnCz/3x3HFilvvBL31QsBmGkkRuiCNZ67u6+VUCn3J+LQ== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.55.0" + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/custom-resources" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-ec2@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.55.0.tgz#a6c2ab965bd75dd3f255027c11314775289e53a8" + integrity sha512-3FQ6X7BALEFMScsYUNCf+wAY4Zw6FE8V42S6i/OVZhZXY3/iZqiJh/BAJruj/VM1QO9nPRYdF5lnTwFssp17PQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-ssm" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + "@aws-cdk/region-info" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-efs@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.55.0.tgz#dfff8ceb245d2cc9f03b158c9d55b64d6a57c0cf" + integrity sha512-BGbF9vby78BNAPwyqzdsErrPgkC0ZCmhIekiTpMdlmhNFuMf6GJMOXY2rr81N7mW6HaAMe6Lqd6w+Te/G0IzHA== + dependencies: + "@aws-cdk/aws-ec2" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-events@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.55.0.tgz#3d784b0bf7ac2a2ebe6e52a9b89365d30bdd9398" + integrity sha512-jL9bygowe/6kYoAIApBcYi92zSjSxyn43CfOOILkplEsxdg3nNKfgnkQ4JgS1WwCuBNOhPAY6Zzc6bLKDi4Igw== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-iam@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.55.0.tgz#fedac6b83a9a7ee48e4cda6d877f684f1dac0056" + integrity sha512-cAKQN1sEdDXZ2xFOOoWQskDh/GuQS81m6Qd/o6KQeFli8ftXSlD5dq5+UIs+oHBwhE8xwYJLbHDx79L3lQcMug== + dependencies: + "@aws-cdk/core" "1.55.0" + "@aws-cdk/region-info" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-kms@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.55.0.tgz#eaaa9b2ea9b7f65d3bdcab8109104477b2ff2baf" + integrity sha512-GSNKEn2w5QwKF+vwlz0N9TPnRh/p/tOFHb+AuNmNq4y2f3c3rTmW/anJu+ISE5qIVzTnev6bLQ+y7Iidt8aXKQ== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-lambda@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.55.0.tgz#751c89a64797bc4ae1ea0801fb39083752455ff9" + integrity sha512-/5df6QR3vbJr/G5/HFmxG/QvxPIjSdzSgaXjK7a/7tzxRISWPaYLN4sVZQHVDYHPe+WZ291uulYE+juiyGrvqQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-codeguruprofiler" "1.55.0" + "@aws-cdk/aws-ec2" "1.55.0" + "@aws-cdk/aws-efs" "1.55.0" + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-s3-assets" "1.55.0" + "@aws-cdk/aws-sqs" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-logs@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.55.0.tgz#267aa66bff737e47be5dc3d326ea936cf73c62e6" + integrity sha512-sUflJ+MuB69MwHhtWZUY8jf2JLxXXbmGzs/T3VHnscULAsQoo6Tu5v/kXvtXU04CC8YxUG6+hQkO6bl3bF6M1Q== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-s3-assets@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.55.0.tgz#7243ee94f767d6686b6b9c0caaf9af3aa38a656d" + integrity sha512-zyYFRw1xFmuONiuj9ym9HsnYyAeE2a1L1q2/vpvlXARLIsk7JDG37nnnh40ccm2/YQAoVLXqKZb+VTS5cUKhgA== + dependencies: + "@aws-cdk/assets" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-s3@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.55.0.tgz#41a0f134608fa068d0ea2b451a5ec039da4ca372" + integrity sha512-VNBTw+ADXcNuIi+ziGpEiGN0kxE/32MGUK6esePMxRr+zv9JqE4q0YwiSSjp0FWnM1g3mufkergXfNcGCCPMrw== + dependencies: + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-sns-subscriptions@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.55.0.tgz#480081c3d8abf0bb1bb7067cefecf0ca29bce433" + integrity sha512-Mk5oKUIlXnw+Uoox88IY4Jlzi09DhiDnJqtZ7p2avyofzZ99ZZihncXwm6XxFe1yCo+c+jdEK0qWklyFWaKfOg== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/aws-sns" "1.55.0" + "@aws-cdk/aws-sqs" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-sns@1.55.0", "@aws-cdk/aws-sns@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.55.0.tgz#e3a6ef9b7235e39dba8a3f172da31d63e0d961b1" + integrity sha512-WR2ogCi6ngMsZAxq1O71WTxYz1GC9oSxK/K1sj7lboDW712OJXgaz5Giat073TYosyuiZD0uUvSPRvBfxbfEIg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-sqs" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-sqs@1.55.0", "@aws-cdk/aws-sqs@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.55.0.tgz#b70e100e941aad369557ae6ed991a40972b4e20b" + integrity sha512-CpXi33lBg8PgMJvxwRpPOQmD+DLUaUHxRpjjjLP6tfUDwk5cIGwRG+QSTd4FmNcDm3Cvb1x0WI8PSdwfgaOSiw== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-ssm@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.55.0.tgz#5b51cc6875956829df499b3c9ed34b41e47c63ce" + integrity sha512-lTJj0rDZS5qVapV4WI/yfm3B235hJtMgDHMRMoOAZTNQSgHFvp2/5l1gSKOfqlanS90aeLUIfEXWlXALnwveLg== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/cfnspec@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.55.0.tgz#6a6f78b0269ff8dae55fc2e986cca7469937e3fb" + integrity sha512-Bg4tTgtKMjBKWtyP2/V0atb3TmqshIW+j61gRigEhom1aS49QzvA6YpTjv6vzylQIH0+hdLYiCX6brBiYEXhTg== + dependencies: + md5 "^2.2.1" + +"@aws-cdk/cloud-assembly-schema@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" + integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/cloudformation-diff@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.55.0.tgz#f39fb63bd6388c2401373bf200575efe513a5045" + integrity sha512-lBFiLQXaJmf4hR+RzSXwAGun/NgANzK5p/Qm5ETgqTLVPRksJJruaFgFO/Pr0qIRpDbtxrkigoeFZxCgFkFqAQ== + dependencies: + "@aws-cdk/cfnspec" "1.55.0" + colors "^1.4.0" + diff "^4.0.2" + fast-deep-equal "^3.1.3" + string-width "^4.2.0" + table "^5.4.6" + +"@aws-cdk/core@1.55.0", "@aws-cdk/core@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" + integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/custom-resources@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.55.0.tgz#af33b6dc28a9431d60cd6e7774a166919a7622be" + integrity sha512-AKc9y8RYAU4J2b6rB902jq66vwOzshsgNYl5dTS8cFxdCjR4YthuaAyatxXMBJz4SepL+X6kwjxF1ed6/DFFFQ== + dependencies: + "@aws-cdk/aws-cloudformation" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-sns" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/cx-api@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" + integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + semver "^7.2.2" + +"@aws-cdk/region-info@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" + integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== + +"@serverless-stack/resources@../../../resources": + version "0.0.1" + dependencies: + "@aws-cdk/core" "^1.55.0" + +ajv@^6.10.2: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +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== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +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" + +charenc@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +colors@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +constructs@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" + integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== + +crypt@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + +diff@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +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== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + 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-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +is-buffer@~1.1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +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== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" + integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== + +lodash@^4.17.14: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + +md5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" + integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk= + dependencies: + charenc "~0.0.1" + crypt "~0.0.1" + is-buffer "~1.1.1" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +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== + +semver@^7.2.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +table@^5.4.6: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" diff --git a/packages/cli/tests/jest/jest.test.js b/packages/cli/tests/jest/jest.test.js new file mode 100644 index 0000000000..3ba14e3996 --- /dev/null +++ b/packages/cli/tests/jest/jest.test.js @@ -0,0 +1,10 @@ +const { runJestCommand } = require("../helpers"); + +/** + * Test that the jest tests run successfully + */ +test("jest", async () => { + const result = await runJestCommand(__dirname); + + expect(result).not.toContain("JESTTESTFAILED-----"); +}); diff --git a/packages/cli/tests/jest/lib/dynamodb.js b/packages/cli/tests/jest/lib/dynamodb.js new file mode 100644 index 0000000000..ba34d282a4 --- /dev/null +++ b/packages/cli/tests/jest/lib/dynamodb.js @@ -0,0 +1,30 @@ +import { CfnOutput } from "@aws-cdk/core"; +import * as dynamodb from "@aws-cdk/aws-dynamodb"; +import * as sst from "@serverless-stack/resources"; + +const service = "cdknotes"; + +export default class DynamoDBStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + const stage = this.node.root.stage; + + const stageTableName = this.node.root.logicalPrefixedName("notes"); + const table = new dynamodb.Table(this, stageTableName, { + partitionKey: { name: "userId", type: dynamodb.AttributeType.STRING }, + sortKey: { name: "noteId", type: dynamodb.AttributeType.STRING }, + billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, + }); + + // Export values + new CfnOutput(this, "notesTableName", { + exportName: `${stage}-${service}-ExtNotesTableName`, + value: table.tableName, + }); + new CfnOutput(this, "notesTableArn", { + exportName: `${stage}-${service}-ExtNotesTableArn`, + value: table.tableArn, + }); + } +} diff --git a/packages/cli/tests/jest/package.json b/packages/cli/tests/jest/package.json new file mode 100644 index 0000000000..53ef39a9fb --- /dev/null +++ b/packages/cli/tests/jest/package.json @@ -0,0 +1,20 @@ +{ + "name": "jest", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "../../bin/scripts.js test --testPathIgnorePatterns=\"./jest.test.js\"" + }, + "keywords": [], + "author": "", + "dependencies": { + "@serverless-stack/resources": "../../../resources", + "@aws-cdk/aws-dynamodb": "^1.54.0", + "@aws-cdk/core": "^1.54.0" + }, + "license": "ISC", + "devDependencies": { + "@aws-cdk/assert": "^1.55.0" + } +} diff --git a/packages/cli/tests/jest/tests/dynamodb.test.js b/packages/cli/tests/jest/tests/dynamodb.test.js new file mode 100644 index 0000000000..0915f59baa --- /dev/null +++ b/packages/cli/tests/jest/tests/dynamodb.test.js @@ -0,0 +1,20 @@ +import { expect, haveResource } from "@aws-cdk/assert"; +import * as sst from "@serverless-stack/resources"; +import DynamoDBStack from "../lib/dynamodb"; + +test("DynamoDB Stack", () => { + const app = new sst.App({ stage: "dev", region: "us-east-1" }); + // WHEN + const stack = new DynamoDBStack(app, "MyTestStack"); + // THEN + try { + expect(stack).to( + haveResource("AWS::DynamoDB::Table", { + BillingMode: "PAY_PER_REQUEST", + }) + ); + } catch (e) { + // Print out a test string that parent jest.test.js can catch + console.log("JESTTESTFAILED-----"); + } +}); diff --git a/packages/cli/tests/jest/yarn.lock b/packages/cli/tests/jest/yarn.lock new file mode 100644 index 0000000000..b470065c72 --- /dev/null +++ b/packages/cli/tests/jest/yarn.lock @@ -0,0 +1,555 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aws-cdk/assert@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.55.0.tgz#04114356c911afae0c26b99f6cd91823c2676e9b" + integrity sha512-f+EXzBpFPl305EnGXH3DJLY/X51cU/u4enCE9BdCq4AnyR3/eqGpKuhav3lxZ0Yu704j9wZKd2M+3Hn2PPjWvA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cloudformation-diff" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/assets@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.55.0.tgz#02442aea514d08b8f1fb744a3e3f944ab9a5e389" + integrity sha512-fOdk2eW8GEgS9vwgpt/BljV1IvCZ/Et7zYcL331+3XAxZpptOYDjNvV/tfhadX9fe1DhwZnsdqQqDO7eAY2+ig== + dependencies: + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-applicationautoscaling@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.55.0.tgz#ba0a1ee4b8bbe5f565c8d76d32408fcfdd8ba046" + integrity sha512-6BCvybrCYqhmtIckpAdDmNvn6B85+D1tL0ZJofiF8/0DOvuV5noZyzJwvwMO4q/WLzqavxoMSxBd7OswVX3trw== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.55.0" + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-autoscaling-common@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.55.0.tgz#dc0f64351b2d388d9a195f4316a76ec349cee3f5" + integrity sha512-uQTjJmez/2QOYjmwLhQ/nQg4ywsoWvciS/y55nIlp409Ttuw/RapsrRhVAj3q58/3uTERuIUha4vpNe5C2gUKA== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-cloudformation@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.55.0.tgz#bf902768eb09623ae8e9439e1cde03619e3cd62c" + integrity sha512-Jd8ArtzRv6gKKrGlwMXnn5Gsg3xv8V0esRn3P9jfoNR7qMkH/u2O9mGJ8C2UXMdeAeDPJld0Xk5DxFYtHFrx2Q== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-sns" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-cloudwatch@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.55.0.tgz#3e58110d008b9dc0c0cd8a8973b4f0b1ca385fc3" + integrity sha512-WxJyDnrYHH7ox/1gWe4v+TfFR6LC7Q/bQS5jfdG1Wm3ZHzlSjOegcIw7jrkOXY5QI6N4jHM5bVwpQgX9cS8/dQ== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-codeguruprofiler@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.55.0.tgz#9e1504db79fe469dbd1678b9ed1e020f30b816c8" + integrity sha512-MeXlEPAQjhCOs7+u1Q+Stva97E/QkE37E5EgoNRWVMoel8TPlfg3/ogYlsvJzfh2/7N11Z2jsU2kPaFw0czdfw== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + +"@aws-cdk/aws-dynamodb@^1.54.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.55.0.tgz#da2da006d03933385cd9aebf2404e175cc730cda" + integrity sha512-MqiTSZ2B1XFoQ28Y9GCtSPRyQGtTwxJxOiECXQZ3axnCz/3x3HFilvvBL31QsBmGkkRuiCNZ67u6+VUCn3J+LQ== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.55.0" + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/custom-resources" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-ec2@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.55.0.tgz#a6c2ab965bd75dd3f255027c11314775289e53a8" + integrity sha512-3FQ6X7BALEFMScsYUNCf+wAY4Zw6FE8V42S6i/OVZhZXY3/iZqiJh/BAJruj/VM1QO9nPRYdF5lnTwFssp17PQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-ssm" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + "@aws-cdk/region-info" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-efs@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.55.0.tgz#dfff8ceb245d2cc9f03b158c9d55b64d6a57c0cf" + integrity sha512-BGbF9vby78BNAPwyqzdsErrPgkC0ZCmhIekiTpMdlmhNFuMf6GJMOXY2rr81N7mW6HaAMe6Lqd6w+Te/G0IzHA== + dependencies: + "@aws-cdk/aws-ec2" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-events@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.55.0.tgz#3d784b0bf7ac2a2ebe6e52a9b89365d30bdd9398" + integrity sha512-jL9bygowe/6kYoAIApBcYi92zSjSxyn43CfOOILkplEsxdg3nNKfgnkQ4JgS1WwCuBNOhPAY6Zzc6bLKDi4Igw== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-iam@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.55.0.tgz#fedac6b83a9a7ee48e4cda6d877f684f1dac0056" + integrity sha512-cAKQN1sEdDXZ2xFOOoWQskDh/GuQS81m6Qd/o6KQeFli8ftXSlD5dq5+UIs+oHBwhE8xwYJLbHDx79L3lQcMug== + dependencies: + "@aws-cdk/core" "1.55.0" + "@aws-cdk/region-info" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-kms@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.55.0.tgz#eaaa9b2ea9b7f65d3bdcab8109104477b2ff2baf" + integrity sha512-GSNKEn2w5QwKF+vwlz0N9TPnRh/p/tOFHb+AuNmNq4y2f3c3rTmW/anJu+ISE5qIVzTnev6bLQ+y7Iidt8aXKQ== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-lambda@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.55.0.tgz#751c89a64797bc4ae1ea0801fb39083752455ff9" + integrity sha512-/5df6QR3vbJr/G5/HFmxG/QvxPIjSdzSgaXjK7a/7tzxRISWPaYLN4sVZQHVDYHPe+WZ291uulYE+juiyGrvqQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-codeguruprofiler" "1.55.0" + "@aws-cdk/aws-ec2" "1.55.0" + "@aws-cdk/aws-efs" "1.55.0" + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-s3-assets" "1.55.0" + "@aws-cdk/aws-sqs" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-logs@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.55.0.tgz#267aa66bff737e47be5dc3d326ea936cf73c62e6" + integrity sha512-sUflJ+MuB69MwHhtWZUY8jf2JLxXXbmGzs/T3VHnscULAsQoo6Tu5v/kXvtXU04CC8YxUG6+hQkO6bl3bF6M1Q== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-s3-assets@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.55.0.tgz#7243ee94f767d6686b6b9c0caaf9af3aa38a656d" + integrity sha512-zyYFRw1xFmuONiuj9ym9HsnYyAeE2a1L1q2/vpvlXARLIsk7JDG37nnnh40ccm2/YQAoVLXqKZb+VTS5cUKhgA== + dependencies: + "@aws-cdk/assets" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-s3@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.55.0.tgz#41a0f134608fa068d0ea2b451a5ec039da4ca372" + integrity sha512-VNBTw+ADXcNuIi+ziGpEiGN0kxE/32MGUK6esePMxRr+zv9JqE4q0YwiSSjp0FWnM1g3mufkergXfNcGCCPMrw== + dependencies: + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-sns@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.55.0.tgz#e3a6ef9b7235e39dba8a3f172da31d63e0d961b1" + integrity sha512-WR2ogCi6ngMsZAxq1O71WTxYz1GC9oSxK/K1sj7lboDW712OJXgaz5Giat073TYosyuiZD0uUvSPRvBfxbfEIg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-sqs" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-sqs@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.55.0.tgz#b70e100e941aad369557ae6ed991a40972b4e20b" + integrity sha512-CpXi33lBg8PgMJvxwRpPOQmD+DLUaUHxRpjjjLP6tfUDwk5cIGwRG+QSTd4FmNcDm3Cvb1x0WI8PSdwfgaOSiw== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-ssm@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.55.0.tgz#5b51cc6875956829df499b3c9ed34b41e47c63ce" + integrity sha512-lTJj0rDZS5qVapV4WI/yfm3B235hJtMgDHMRMoOAZTNQSgHFvp2/5l1gSKOfqlanS90aeLUIfEXWlXALnwveLg== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/cfnspec@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.55.0.tgz#6a6f78b0269ff8dae55fc2e986cca7469937e3fb" + integrity sha512-Bg4tTgtKMjBKWtyP2/V0atb3TmqshIW+j61gRigEhom1aS49QzvA6YpTjv6vzylQIH0+hdLYiCX6brBiYEXhTg== + dependencies: + md5 "^2.2.1" + +"@aws-cdk/cloud-assembly-schema@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" + integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/cloudformation-diff@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.55.0.tgz#f39fb63bd6388c2401373bf200575efe513a5045" + integrity sha512-lBFiLQXaJmf4hR+RzSXwAGun/NgANzK5p/Qm5ETgqTLVPRksJJruaFgFO/Pr0qIRpDbtxrkigoeFZxCgFkFqAQ== + dependencies: + "@aws-cdk/cfnspec" "1.55.0" + colors "^1.4.0" + diff "^4.0.2" + fast-deep-equal "^3.1.3" + string-width "^4.2.0" + table "^5.4.6" + +"@aws-cdk/core@1.55.0", "@aws-cdk/core@^1.54.0", "@aws-cdk/core@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" + integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/custom-resources@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.55.0.tgz#af33b6dc28a9431d60cd6e7774a166919a7622be" + integrity sha512-AKc9y8RYAU4J2b6rB902jq66vwOzshsgNYl5dTS8cFxdCjR4YthuaAyatxXMBJz4SepL+X6kwjxF1ed6/DFFFQ== + dependencies: + "@aws-cdk/aws-cloudformation" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-sns" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/cx-api@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" + integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + semver "^7.2.2" + +"@aws-cdk/region-info@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" + integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== + +"@serverless-stack/resources@../../../resources": + version "0.0.1" + dependencies: + "@aws-cdk/core" "^1.55.0" + +ajv@^6.10.2: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +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== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +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" + +charenc@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +colors@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +constructs@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" + integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== + +crypt@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + +diff@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +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== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + 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-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +is-buffer@~1.1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +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== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" + integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== + +lodash@^4.17.14: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + +md5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" + integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk= + dependencies: + charenc "~0.0.1" + crypt "~0.0.1" + is-buffer "~1.1.1" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +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== + +semver@^7.2.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +table@^5.4.6: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" diff --git a/packages/cli/webpack.config.js b/packages/cli/webpack.config.js new file mode 100644 index 0000000000..2b1fc2ba54 --- /dev/null +++ b/packages/cli/webpack.config.js @@ -0,0 +1,14 @@ +const path = require("path"); + +module.exports = { + target: "node", + mode: "development", + stats: "errors-only", + devtool: "inline-source-map", + entry: "./scripts/wrapper/include.js", + output: { + filename: "include.js", + libraryTarget: "commonjs2", + path: path.resolve("./scripts/wrapper", "dist"), + }, +}; diff --git a/packages/resources/README.md b/packages/resources/README.md new file mode 100644 index 0000000000..6557cd419f --- /dev/null +++ b/packages/resources/README.md @@ -0,0 +1 @@ +# @serverless-stack/resources diff --git a/packages/resources/package.json b/packages/resources/package.json new file mode 100644 index 0000000000..cb15dc5283 --- /dev/null +++ b/packages/resources/package.json @@ -0,0 +1,28 @@ +{ + "name": "@serverless-stack/resources", + "version": "0.0.0", + "homepage": "https://serverless-stack.com", + "description": "Helper AWS CDK constructs for Serverless Stack apps.", + "main": "dist/index.js", + "scripts": { + "watch": "tsc --watch --rootDir src --outDir dist", + "build": "tsc --rootDir src --outDir dist", + "clean": "rm -rf dist", + "prepare": "npm run build" + }, + "author": { + "name": "Anomaly Innovations", + "url": "https://anoma.ly" + }, + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@aws-cdk/core": "^1.55.0" + }, + "devDependencies": { + "@types/node": "^14.0.27", + "typescript": "^3.9.7" + } +} diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts new file mode 100644 index 0000000000..900e5bee68 --- /dev/null +++ b/packages/resources/src/App.ts @@ -0,0 +1,70 @@ +import * as cdk from "@aws-cdk/core"; + +/** + * Deploy props for apps. + */ +export interface DeployProps { + /** + * The app name, used to prefix stacks. + * + * @default - Defaults to empty string + */ + readonly name?: string; + + /** + * The stage to deploy this app to. + * + * @default - Defaults to dev + */ + readonly stage?: string; + + /** + * The region to deploy this app to. + * + * @default - Defaults to us-east-1 + */ + readonly region?: string; +} + +export class App extends cdk.App { + /** + * The app name + */ + public readonly name: string; + + /** + * The stage to deploy to + */ + public readonly stage: string; + + /** + * The region to deploy to + */ + public readonly region: string; + + constructor(deployProps: DeployProps = {}, props: cdk.AppProps = {}) { + super(props); + + this.name = deployProps.name || ""; + this.stage = deployProps.stage || "dev"; + this.region = deployProps.region || "us-east-1"; + } + + logicalPrefixedName(logicalName: string): string { + const namePrefix = this.name === "" ? "" : `${this.name}-`; + return `${this.stage}-${namePrefix}${logicalName}`; + } + + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types + synth(options: cdk.StageSynthesisOptions = {}) { + for (const child of this.node.children) { + if ( + child instanceof cdk.Stack && + child.stackName.indexOf(`${this.stage}-`) !== 0 + ) { + throw `Stack ${child.stackName} is not prefixed with the stage`; + } + } + return super.synth(options); + } +} diff --git a/packages/resources/src/Stack.ts b/packages/resources/src/Stack.ts new file mode 100644 index 0000000000..68feb51b18 --- /dev/null +++ b/packages/resources/src/Stack.ts @@ -0,0 +1,28 @@ +import * as cdk from "@aws-cdk/core"; +import { App } from "./App"; + +export type StackProps = Omit; + +export class Stack extends cdk.Stack { + constructor(scope: App, id: string, props?: StackProps) { + const root = scope.node.root as App; + const stageId = root.logicalPrefixedName(id); + + Stack.checkForEnvInProps(props); + + super(scope, stageId, { + ...props, + env: { + account: process.env.CDK_DEFAULT_ACCOUNT, + region: root.region, + }, + }); + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private static checkForEnvInProps(props?: any) { + if (props && props.env) { + throw "Cannot specify environment for a specific Stack"; + } + } +} diff --git a/packages/resources/src/index.ts b/packages/resources/src/index.ts new file mode 100644 index 0000000000..809cc2f44d --- /dev/null +++ b/packages/resources/src/index.ts @@ -0,0 +1,2 @@ +export * from "./App"; +export * from "./Stack"; diff --git a/packages/resources/tsconfig.json b/packages/resources/tsconfig.json new file mode 100644 index 0000000000..d81be158f9 --- /dev/null +++ b/packages/resources/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ES2018", + "module": "commonjs", + "lib": ["es2018"], + "declaration": true, + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "noImplicitThis": true, + "alwaysStrict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": false, + "inlineSourceMap": true, + "inlineSources": true, + "experimentalDecorators": true, + "strictPropertyInitialization": false + }, + "exclude": ["node_modules", "dist"] +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..5c5a4e8810 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,10266 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aws-cdk/cfnspec@1.56.0": + version "1.56.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.56.0.tgz#54d29eee2fcb33c1432ca7287f90f89c4aa73b9a" + integrity sha512-6bzVJX+RzcOoAAiPI1oE7lW1mLtm486QhkpEnyQefq136KqEINjYDCjH82KZJ5EbyJW7vYaxSqlH7u/Twp20bQ== + dependencies: + md5 "^2.2.1" + +"@aws-cdk/cloud-assembly-schema@1.56.0": + version "1.56.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.56.0.tgz#b2b3cb687ead39ab8cecfaac6a4bee14666d6abc" + integrity sha512-QLuUOoEzrTyiBbPue1QzMmMLjh6FjuD6dIPJ1O81jPpBuIYiAN7MXzXQ9+4gqM0UrnMpSzB8DW2joENDPtJgFg== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/cloudformation-diff@1.56.0": + version "1.56.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.56.0.tgz#7af2e2d7c757ad7f69a7536ae6ccf89bd18ba26a" + integrity sha512-JVLL3e6uhHknu9WW8TtYMmX/OGxU9Cee3Sfzh1K10rND6VYsrteSuCpkiVJOnSuNgNXAABw7/5oNRBNgKotgNw== + dependencies: + "@aws-cdk/cfnspec" "1.56.0" + colors "^1.4.0" + diff "^4.0.2" + fast-deep-equal "^3.1.3" + string-width "^4.2.0" + table "^5.4.6" + +"@aws-cdk/core@^1.54.0", "@aws-cdk/core@^1.55.0": + version "1.56.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.56.0.tgz#499bf691a9937f5f5dfb2b83330fc3f9d9294662" + integrity sha512-MeImBUTbU8ipZAC6gYQHfJRXH+63XD1VBv9g1AO5GpERKHOZ58qiBroQOkVWD5/u+iasXJ7JSC9JKUBC/+2PlQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.56.0" + "@aws-cdk/cx-api" "1.56.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/cx-api@1.56.0": + version "1.56.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.56.0.tgz#36bf05de73d26ecc69054855f238beaf0bf2a482" + integrity sha512-IuBmbz025AnuYAKv+ZOvnRV7Wwa/wdCiqiJ3BlVEqPsdvE4ZUMJTqLTY25ho5VT07o8Z/iQg7M6dRs9ccVC9Dw== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.56.0" + semver "^7.2.2" + +"@aws-cdk/region-info@1.56.0": + version "1.56.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.56.0.tgz#2ae5ba607d23f42ba0343304a941a430ba333c98" + integrity sha512-EIX4RQeUGkyIc2leWqtL1Lpjl/jg2p30ngDXyFfW7j1myS+9rtDFpry6wf/vL8e4v/lluuGIJKHTWbNBaUl/hA== + +"@babel/cli@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.5.tgz#57df2987c8cf89d0fc7d4b157ec59d7619f1b77a" + integrity sha512-j9H9qSf3kLdM0Ao3aGPbGZ73mEA9XazuupcS6cDGWuiyAcANoguhP0r2Lx32H5JGw4sSSoHG3x/mxVnHgvOoyA== + dependencies: + commander "^4.0.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.1.0" + glob "^7.0.0" + lodash "^4.17.19" + make-dir "^2.1.0" + slash "^2.0.0" + source-map "^0.5.0" + optionalDependencies: + chokidar "^2.1.8" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" + integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ== + dependencies: + browserslist "^4.12.0" + invariant "^2.2.4" + semver "^5.5.0" + +"@babel/core@^7.1.0", "@babel/core@^7.10.5", "@babel/core@^7.7.5": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.0.tgz#73b9c33f1658506887f767c26dae07798b30df76" + integrity sha512-mkLq8nwaXmDtFmRkQ8ED/eA2CnVw4zr7dCztKalZXBvdK5EeNUAesrrwUqjQEzFgomJssayzB0aqlOsP1vGLqg== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.0" + "@babel/helper-module-transforms" "^7.11.0" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.11.0" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.11.0" + "@babel/types" "^7.11.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.0.tgz#4b90c78d8c12825024568cbe83ee6c9af193585c" + integrity sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ== + dependencies: + "@babel/types" "^7.11.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" + integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-compilation-targets@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" + integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== + dependencies: + "@babel/compat-data" "^7.10.4" + browserslist "^4.12.0" + invariant "^2.2.4" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" + integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.10.5" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" + integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + regexpu-core "^4.7.0" + +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c" + integrity sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A== + dependencies: + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" + integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-module-imports@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" + integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" + integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/template" "^7.10.4" + "@babel/types" "^7.11.0" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-regex@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" + integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== + dependencies: + lodash "^4.17.19" + +"@babel/helper-remap-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz#fce8bea4e9690bbe923056ded21e54b4e8b68ed5" + integrity sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-replace-supers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" + integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-simple-access@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" + integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== + dependencies: + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-skip-transparent-expression-wrappers@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" + integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helper-wrap-function@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" + integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helpers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" + integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.0.tgz#a9d7e11aead25d3b422d17b2c6502c8dddef6a5d" + integrity sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw== + +"@babel/plugin-proposal-async-generator-functions@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" + integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" + integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-dynamic-import@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" + integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-export-namespace-from@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" + integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" + integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-logical-assignment-operators@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8" + integrity sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" + integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" + integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" + integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.10.4" + +"@babel/plugin-proposal-optional-catch-binding@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" + integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" + integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" + integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" + integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.10.4", "@babel/plugin-syntax-class-properties@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" + integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" + integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-arrow-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" + integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" + integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + +"@babel/plugin-transform-block-scoped-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" + integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-block-scoping@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz#b81b8aafefbfe68f0f65f7ef397b9ece68a6037d" + integrity sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-classes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" + integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" + integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-destructuring@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" + integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" + integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-duplicate-keys@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" + integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-exponentiation-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" + integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-for-of@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" + integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" + integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" + integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" + integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-modules-amd@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" + integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== + dependencies: + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" + integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" + integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" + integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" + integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + +"@babel/plugin-transform-new-target@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" + integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-object-super@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" + integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + +"@babel/plugin-transform-parameters@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" + integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-property-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" + integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" + integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" + integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-shorthand-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" + integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" + integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" + +"@babel/plugin-transform-sticky-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" + integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" + integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" + integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-escapes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" + integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" + integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/preset-env@^7.10.4": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.0.tgz#860ee38f2ce17ad60480c2021ba9689393efb796" + integrity sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg== + dependencies: + "@babel/compat-data" "^7.11.0" + "@babel/helper-compilation-targets" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-async-generator-functions" "^7.10.4" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/plugin-proposal-dynamic-import" "^7.10.4" + "@babel/plugin-proposal-export-namespace-from" "^7.10.4" + "@babel/plugin-proposal-json-strings" "^7.10.4" + "@babel/plugin-proposal-logical-assignment-operators" "^7.11.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread" "^7.11.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.11.0" + "@babel/plugin-proposal-private-methods" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.10.4" + "@babel/plugin-transform-arrow-functions" "^7.10.4" + "@babel/plugin-transform-async-to-generator" "^7.10.4" + "@babel/plugin-transform-block-scoped-functions" "^7.10.4" + "@babel/plugin-transform-block-scoping" "^7.10.4" + "@babel/plugin-transform-classes" "^7.10.4" + "@babel/plugin-transform-computed-properties" "^7.10.4" + "@babel/plugin-transform-destructuring" "^7.10.4" + "@babel/plugin-transform-dotall-regex" "^7.10.4" + "@babel/plugin-transform-duplicate-keys" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator" "^7.10.4" + "@babel/plugin-transform-for-of" "^7.10.4" + "@babel/plugin-transform-function-name" "^7.10.4" + "@babel/plugin-transform-literals" "^7.10.4" + "@babel/plugin-transform-member-expression-literals" "^7.10.4" + "@babel/plugin-transform-modules-amd" "^7.10.4" + "@babel/plugin-transform-modules-commonjs" "^7.10.4" + "@babel/plugin-transform-modules-systemjs" "^7.10.4" + "@babel/plugin-transform-modules-umd" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" + "@babel/plugin-transform-new-target" "^7.10.4" + "@babel/plugin-transform-object-super" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-property-literals" "^7.10.4" + "@babel/plugin-transform-regenerator" "^7.10.4" + "@babel/plugin-transform-reserved-words" "^7.10.4" + "@babel/plugin-transform-shorthand-properties" "^7.10.4" + "@babel/plugin-transform-spread" "^7.11.0" + "@babel/plugin-transform-sticky-regex" "^7.10.4" + "@babel/plugin-transform-template-literals" "^7.10.4" + "@babel/plugin-transform-typeof-symbol" "^7.10.4" + "@babel/plugin-transform-unicode-escapes" "^7.10.4" + "@babel/plugin-transform-unicode-regex" "^7.10.4" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.11.0" + browserslist "^4.12.0" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" + integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime@^7.8.4": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.0.tgz#f10245877042a815e07f7e693faff0ae9d3a2aac" + integrity sha512-qArkXsjJq7H+T86WrIFV0Fnu/tNOkZ4cgXmjkzAu3b/58D5mFIO8JH/y77t7C9q0OdDRdh9s7Ue5GasYssxtXw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.10.4", "@babel/template@^7.3.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.0.tgz#9b996ce1b98f53f7c3e4175115605d56ed07dd24" + integrity sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.0" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.11.0" + "@babel/types" "^7.11.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d" + integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@evocateur/libnpmaccess@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" + integrity sha512-KSCAHwNWro0CF2ukxufCitT9K5LjL/KuMmNzSu8wuwN2rjyKHD8+cmOsiybK+W5hdnwc5M1SmRlVCaMHQo+3rg== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + npm-package-arg "^6.1.0" + +"@evocateur/libnpmpublish@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz#55df09d2dca136afba9c88c759ca272198db9f1a" + integrity sha512-MJrrk9ct1FeY9zRlyeoyMieBjGDG9ihyyD9/Ft6MMrTxql9NyoEx2hw9casTIP4CdqEVu+3nQ2nXxoJ8RCXyFg== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + lodash.clonedeep "^4.5.0" + normalize-package-data "^2.4.0" + npm-package-arg "^6.1.0" + semver "^5.5.1" + ssri "^6.0.1" + +"@evocateur/npm-registry-fetch@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#8c4c38766d8d32d3200fcb0a83f064b57365ed66" + integrity sha512-k1WGfKRQyhJpIr+P17O5vLIo2ko1PFLKwoetatdduUSt/aQ4J2sJrJwwatdI5Z3SiYk/mRH9S3JpdmMFd/IK4g== + dependencies: + JSONStream "^1.3.4" + bluebird "^3.5.1" + figgy-pudding "^3.4.1" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + npm-package-arg "^6.1.0" + safe-buffer "^5.1.2" + +"@evocateur/pacote@^9.6.3": + version "9.6.5" + resolved "https://registry.yarnpkg.com/@evocateur/pacote/-/pacote-9.6.5.tgz#33de32ba210b6f17c20ebab4d497efc6755f4ae5" + integrity sha512-EI552lf0aG2nOV8NnZpTxNo2PcXKPmDbF9K8eCBFQdIZwHNGN/mi815fxtmUMa2wTa1yndotICIDt/V0vpEx2w== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + bluebird "^3.5.3" + cacache "^12.0.3" + chownr "^1.1.2" + figgy-pudding "^3.5.1" + get-stream "^4.1.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + minimatch "^3.0.4" + minipass "^2.3.5" + mississippi "^3.0.0" + mkdirp "^0.5.1" + normalize-package-data "^2.5.0" + npm-package-arg "^6.1.0" + npm-packlist "^1.4.4" + npm-pick-manifest "^3.0.0" + osenv "^0.1.5" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + protoduck "^5.0.1" + rimraf "^2.6.3" + safe-buffer "^5.2.0" + semver "^5.7.0" + ssri "^6.0.1" + tar "^4.4.10" + unique-filename "^1.1.1" + which "^1.3.1" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" + integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + +"@jest/console@^26.2.0": + version "26.2.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.2.0.tgz#d18f2659b90930e7ec3925fb7209f1ba2cf463f0" + integrity sha512-mXQfx3nSLwiHm1i7jbu+uvi+vvpVjNGzIQYLCfsat9rapC+MJkS4zBseNrgJE0vU921b3P67bQzhduphjY3Tig== + dependencies: + "@jest/types" "^26.2.0" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.2.0" + jest-util "^26.2.0" + slash "^3.0.0" + +"@jest/core@^26.2.2": + version "26.2.2" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.2.2.tgz#63de01ffce967618003dd7a0164b05c8041b81a9" + integrity sha512-UwA8gNI8aeV4FHGfGAUfO/DHjrFVvlBravF1Tm9Kt6qFE+6YHR47kFhgdepOFpADEKstyO+MVdPvkV6/dyt9sA== + dependencies: + "@jest/console" "^26.2.0" + "@jest/reporters" "^26.2.2" + "@jest/test-result" "^26.2.0" + "@jest/transform" "^26.2.2" + "@jest/types" "^26.2.0" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^26.2.0" + jest-config "^26.2.2" + jest-haste-map "^26.2.2" + jest-message-util "^26.2.0" + jest-regex-util "^26.0.0" + jest-resolve "^26.2.2" + jest-resolve-dependencies "^26.2.2" + jest-runner "^26.2.2" + jest-runtime "^26.2.2" + jest-snapshot "^26.2.2" + jest-util "^26.2.0" + jest-validate "^26.2.0" + jest-watcher "^26.2.0" + micromatch "^4.0.2" + p-each-series "^2.1.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^26.2.0": + version "26.2.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.2.0.tgz#f6faee1630fcc2fad208953164bccb31dbe0e45f" + integrity sha512-oCgp9NmEiJ5rbq9VI/v/yYLDpladAAVvFxZgNsnJxOETuzPZ0ZcKKHYjKYwCtPOP1WCrM5nmyuOhMStXFGHn+g== + dependencies: + "@jest/fake-timers" "^26.2.0" + "@jest/types" "^26.2.0" + "@types/node" "*" + jest-mock "^26.2.0" + +"@jest/fake-timers@^26.2.0": + version "26.2.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.2.0.tgz#b485c57dc4c74d61406a339807a9af4bac74b75a" + integrity sha512-45Gfe7YzYTKqTayBrEdAF0qYyAsNRBzfkV0IyVUm3cx7AsCWlnjilBM4T40w7IXT5VspOgMPikQlV0M6gHwy/g== + dependencies: + "@jest/types" "^26.2.0" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + jest-message-util "^26.2.0" + jest-mock "^26.2.0" + jest-util "^26.2.0" + +"@jest/globals@^26.2.0": + version "26.2.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.2.0.tgz#ad78f1104f250c1a4bf5184a2ba51facc59b23f6" + integrity sha512-Hoc6ScEIPaym7RNytIL2ILSUWIGKlwEv+JNFof9dGYOdvPjb2evEURSslvCMkNuNg1ECEClTE8PH7ULlMJntYA== + dependencies: + "@jest/environment" "^26.2.0" + "@jest/types" "^26.2.0" + expect "^26.2.0" + +"@jest/reporters@^26.2.2": + version "26.2.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.2.2.tgz#5a8632ab410f4fc57782bc05dcf115e91818e869" + integrity sha512-7854GPbdFTAorWVh+RNHyPO9waRIN6TcvCezKVxI1khvFq9YjINTW7J3WU+tbR038Ynn6WjYred6vtT0YmIWVQ== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.2.0" + "@jest/test-result" "^26.2.0" + "@jest/transform" "^26.2.2" + "@jest/types" "^26.2.0" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^26.2.2" + jest-resolve "^26.2.2" + jest-util "^26.2.0" + jest-worker "^26.2.1" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^4.1.3" + optionalDependencies: + node-notifier "^7.0.0" + +"@jest/source-map@^26.1.0": + version "26.1.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.1.0.tgz#a6a020d00e7d9478f4b690167c5e8b77e63adb26" + integrity sha512-XYRPYx4eEVX15cMT9mstnO7hkHP3krNtKfxUYd8L7gbtia8JvZZ6bMzSwa6IQJENbudTwKMw5R1BePRD+bkEmA== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" + +"@jest/test-result@^26.2.0": + version "26.2.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.2.0.tgz#51c9b165c8851cfcf7a3466019114785e154f76b" + integrity sha512-kgPlmcVafpmfyQEu36HClK+CWI6wIaAWDHNxfQtGuKsgoa2uQAYdlxjMDBEa3CvI40+2U3v36gQF6oZBkoKatw== + dependencies: + "@jest/console" "^26.2.0" + "@jest/types" "^26.2.0" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^26.2.2": + version "26.2.2" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.2.2.tgz#5e8091f2e6c61fdf242af566cb820a4eadc6c4af" + integrity sha512-SliZWon5LNqV/lVXkeowSU6L8++FGOu3f43T01L1Gv6wnFDP00ER0utV9jyK9dVNdXqfMNCN66sfcyar/o7BNw== + dependencies: + "@jest/test-result" "^26.2.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.2.2" + jest-runner "^26.2.2" + jest-runtime "^26.2.2" + +"@jest/transform@^26.2.2": + version "26.2.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.2.2.tgz#86c005c8d5d749ac54d8df53ea58675fffe7a97e" + integrity sha512-c1snhvi5wRVre1XyoO3Eef5SEWpuBCH/cEbntBUd9tI5sNYiBDmO0My/lc5IuuGYKp/HFIHV1eZpSx5yjdkhKw== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^26.2.0" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.2.2" + jest-regex-util "^26.0.0" + jest-util "^26.2.0" + micromatch "^4.0.2" + pirates "^4.0.1" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^25.5.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" + integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + +"@jest/types@^26.2.0": + version "26.2.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.2.0.tgz#b28ca1fb517a4eb48c0addea7fcd9edc4ab45721" + integrity sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + +"@lerna/add@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.21.0.tgz#27007bde71cc7b0a2969ab3c2f0ae41578b4577b" + integrity sha512-vhUXXF6SpufBE1EkNEXwz1VLW03f177G9uMOFMQkp6OJ30/PWg4Ekifuz9/3YfgB2/GH8Tu4Lk3O51P2Hskg/A== + dependencies: + "@evocateur/pacote" "^9.6.3" + "@lerna/bootstrap" "3.21.0" + "@lerna/command" "3.21.0" + "@lerna/filter-options" "3.20.0" + "@lerna/npm-conf" "3.16.0" + "@lerna/validation-error" "3.13.0" + dedent "^0.7.0" + npm-package-arg "^6.1.0" + p-map "^2.1.0" + semver "^6.2.0" + +"@lerna/bootstrap@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.21.0.tgz#bcd1b651be5b0970b20d8fae04c864548123aed6" + integrity sha512-mtNHlXpmvJn6JTu0KcuTTPl2jLsDNud0QacV/h++qsaKbhAaJr/FElNZ5s7MwZFUM3XaDmvWzHKaszeBMHIbBw== + dependencies: + "@lerna/command" "3.21.0" + "@lerna/filter-options" "3.20.0" + "@lerna/has-npm-version" "3.16.5" + "@lerna/npm-install" "3.16.5" + "@lerna/package-graph" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/rimraf-dir" "3.16.5" + "@lerna/run-lifecycle" "3.16.2" + "@lerna/run-topologically" "3.18.5" + "@lerna/symlink-binary" "3.17.0" + "@lerna/symlink-dependencies" "3.17.0" + "@lerna/validation-error" "3.13.0" + dedent "^0.7.0" + get-port "^4.2.0" + multimatch "^3.0.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + p-finally "^1.0.0" + p-map "^2.1.0" + p-map-series "^1.0.0" + p-waterfall "^1.0.0" + read-package-tree "^5.1.6" + semver "^6.2.0" + +"@lerna/changed@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.21.0.tgz#108e15f679bfe077af500f58248c634f1044ea0b" + integrity sha512-hzqoyf8MSHVjZp0gfJ7G8jaz+++mgXYiNs9iViQGA8JlN/dnWLI5sWDptEH3/B30Izo+fdVz0S0s7ydVE3pWIw== + dependencies: + "@lerna/collect-updates" "3.20.0" + "@lerna/command" "3.21.0" + "@lerna/listable" "3.18.5" + "@lerna/output" "3.13.0" + +"@lerna/check-working-tree@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.16.5.tgz#b4f8ae61bb4523561dfb9f8f8d874dd46bb44baa" + integrity sha512-xWjVBcuhvB8+UmCSb5tKVLB5OuzSpw96WEhS2uz6hkWVa/Euh1A0/HJwn2cemyK47wUrCQXtczBUiqnq9yX5VQ== + dependencies: + "@lerna/collect-uncommitted" "3.16.5" + "@lerna/describe-ref" "3.16.5" + "@lerna/validation-error" "3.13.0" + +"@lerna/child-process@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.16.5.tgz#38fa3c18064aa4ac0754ad80114776a7b36a69b2" + integrity sha512-vdcI7mzei9ERRV4oO8Y1LHBZ3A5+ampRKg1wq5nutLsUA4mEBN6H7JqjWOMY9xZemv6+kATm2ofjJ3lW5TszQg== + dependencies: + chalk "^2.3.1" + execa "^1.0.0" + strong-log-transformer "^2.0.0" + +"@lerna/clean@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.21.0.tgz#c0b46b5300cc3dae2cda3bec14b803082da3856d" + integrity sha512-b/L9l+MDgE/7oGbrav6rG8RTQvRiZLO1zTcG17zgJAAuhlsPxJExMlh2DFwJEVi2les70vMhHfST3Ue1IMMjpg== + dependencies: + "@lerna/command" "3.21.0" + "@lerna/filter-options" "3.20.0" + "@lerna/prompt" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/rimraf-dir" "3.16.5" + p-map "^2.1.0" + p-map-series "^1.0.0" + p-waterfall "^1.0.0" + +"@lerna/cli@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.18.5.tgz#c90c461542fcd35b6d5b015a290fb0dbfb41d242" + integrity sha512-erkbxkj9jfc89vVs/jBLY/fM0I80oLmJkFUV3Q3wk9J3miYhP14zgVEBsPZY68IZlEjT6T3Xlq2xO1AVaatHsA== + dependencies: + "@lerna/global-options" "3.13.0" + dedent "^0.7.0" + npmlog "^4.1.2" + yargs "^14.2.2" + +"@lerna/collect-uncommitted@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-3.16.5.tgz#a494d61aac31cdc7aec4bbe52c96550274132e63" + integrity sha512-ZgqnGwpDZiWyzIQVZtQaj9tRizsL4dUOhuOStWgTAw1EMe47cvAY2kL709DzxFhjr6JpJSjXV5rZEAeU3VE0Hg== + dependencies: + "@lerna/child-process" "3.16.5" + chalk "^2.3.1" + figgy-pudding "^3.5.1" + npmlog "^4.1.2" + +"@lerna/collect-updates@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.20.0.tgz#62f9d76ba21a25b7d9fbf31c02de88744a564bd1" + integrity sha512-qBTVT5g4fupVhBFuY4nI/3FSJtQVcDh7/gEPOpRxoXB/yCSnT38MFHXWl+y4einLciCjt/+0x6/4AG80fjay2Q== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/describe-ref" "3.16.5" + minimatch "^3.0.4" + npmlog "^4.1.2" + slash "^2.0.0" + +"@lerna/command@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.21.0.tgz#9a2383759dc7b700dacfa8a22b2f3a6e190121f7" + integrity sha512-T2bu6R8R3KkH5YoCKdutKv123iUgUbW8efVjdGCDnCMthAQzoentOJfDeodBwn0P2OqCl3ohsiNVtSn9h78fyQ== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/package-graph" "3.18.5" + "@lerna/project" "3.21.0" + "@lerna/validation-error" "3.13.0" + "@lerna/write-log-file" "3.13.0" + clone-deep "^4.0.1" + dedent "^0.7.0" + execa "^1.0.0" + is-ci "^2.0.0" + npmlog "^4.1.2" + +"@lerna/conventional-commits@3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.22.0.tgz#2798f4881ee2ef457bdae027ab7d0bf0af6f1e09" + integrity sha512-z4ZZk1e8Mhz7+IS8NxHr64wyklHctCJyWpJKEZZPJiLFJ8yKto/x38O80R10pIzC0rr8Sy/OsjSH4bl0TbbgqA== + dependencies: + "@lerna/validation-error" "3.13.0" + conventional-changelog-angular "^5.0.3" + conventional-changelog-core "^3.1.6" + conventional-recommended-bump "^5.0.0" + fs-extra "^8.1.0" + get-stream "^4.0.0" + lodash.template "^4.5.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + pify "^4.0.1" + semver "^6.2.0" + +"@lerna/create-symlink@3.16.2": + version "3.16.2" + resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.16.2.tgz#412cb8e59a72f5a7d9463e4e4721ad2070149967" + integrity sha512-pzXIJp6av15P325sgiIRpsPXLFmkisLhMBCy4764d+7yjf2bzrJ4gkWVMhsv4AdF0NN3OyZ5jjzzTtLNqfR+Jw== + dependencies: + "@zkochan/cmd-shim" "^3.1.0" + fs-extra "^8.1.0" + npmlog "^4.1.2" + +"@lerna/create@3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.22.0.tgz#d6bbd037c3dc5b425fe5f6d1b817057c278f7619" + integrity sha512-MdiQQzCcB4E9fBF1TyMOaAEz9lUjIHp1Ju9H7f3lXze5JK6Fl5NYkouAvsLgY6YSIhXMY8AHW2zzXeBDY4yWkw== + dependencies: + "@evocateur/pacote" "^9.6.3" + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.21.0" + "@lerna/npm-conf" "3.16.0" + "@lerna/validation-error" "3.13.0" + camelcase "^5.0.0" + dedent "^0.7.0" + fs-extra "^8.1.0" + globby "^9.2.0" + init-package-json "^1.10.3" + npm-package-arg "^6.1.0" + p-reduce "^1.0.0" + pify "^4.0.1" + semver "^6.2.0" + slash "^2.0.0" + validate-npm-package-license "^3.0.3" + validate-npm-package-name "^3.0.0" + whatwg-url "^7.0.0" + +"@lerna/describe-ref@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.16.5.tgz#a338c25aaed837d3dc70b8a72c447c5c66346ac0" + integrity sha512-c01+4gUF0saOOtDBzbLMFOTJDHTKbDFNErEY6q6i9QaXuzy9LNN62z+Hw4acAAZuJQhrVWncVathcmkkjvSVGw== + dependencies: + "@lerna/child-process" "3.16.5" + npmlog "^4.1.2" + +"@lerna/diff@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.21.0.tgz#e6df0d8b9916167ff5a49fcb02ac06424280a68d" + integrity sha512-5viTR33QV3S7O+bjruo1SaR40m7F2aUHJaDAC7fL9Ca6xji+aw1KFkpCtVlISS0G8vikUREGMJh+c/VMSc8Usw== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.21.0" + "@lerna/validation-error" "3.13.0" + npmlog "^4.1.2" + +"@lerna/exec@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.21.0.tgz#17f07533893cb918a17b41bcc566dc437016db26" + integrity sha512-iLvDBrIE6rpdd4GIKTY9mkXyhwsJ2RvQdB9ZU+/NhR3okXfqKc6py/24tV111jqpXTtZUW6HNydT4dMao2hi1Q== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.21.0" + "@lerna/filter-options" "3.20.0" + "@lerna/profiler" "3.20.0" + "@lerna/run-topologically" "3.18.5" + "@lerna/validation-error" "3.13.0" + p-map "^2.1.0" + +"@lerna/filter-options@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.20.0.tgz#0f0f5d5a4783856eece4204708cc902cbc8af59b" + integrity sha512-bmcHtvxn7SIl/R9gpiNMVG7yjx7WyT0HSGw34YVZ9B+3xF/83N3r5Rgtjh4hheLZ+Q91Or0Jyu5O3Nr+AwZe2g== + dependencies: + "@lerna/collect-updates" "3.20.0" + "@lerna/filter-packages" "3.18.0" + dedent "^0.7.0" + figgy-pudding "^3.5.1" + npmlog "^4.1.2" + +"@lerna/filter-packages@3.18.0": + version "3.18.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.18.0.tgz#6a7a376d285208db03a82958cfb8172e179b4e70" + integrity sha512-6/0pMM04bCHNATIOkouuYmPg6KH3VkPCIgTfQmdkPJTullERyEQfNUKikrefjxo1vHOoCACDpy65JYyKiAbdwQ== + dependencies: + "@lerna/validation-error" "3.13.0" + multimatch "^3.0.0" + npmlog "^4.1.2" + +"@lerna/get-npm-exec-opts@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz#d1b552cb0088199fc3e7e126f914e39a08df9ea5" + integrity sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw== + dependencies: + npmlog "^4.1.2" + +"@lerna/get-packed@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-3.16.0.tgz#1b316b706dcee86c7baa55e50b087959447852ff" + integrity sha512-AjsFiaJzo1GCPnJUJZiTW6J1EihrPkc2y3nMu6m3uWFxoleklsSCyImumzVZJssxMi3CPpztj8LmADLedl9kXw== + dependencies: + fs-extra "^8.1.0" + ssri "^6.0.1" + tar "^4.4.8" + +"@lerna/github-client@3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.22.0.tgz#5d816aa4f76747ed736ae64ff962b8f15c354d95" + integrity sha512-O/GwPW+Gzr3Eb5bk+nTzTJ3uv+jh5jGho9BOqKlajXaOkMYGBELEAqV5+uARNGWZFvYAiF4PgqHb6aCUu7XdXg== + dependencies: + "@lerna/child-process" "3.16.5" + "@octokit/plugin-enterprise-rest" "^6.0.1" + "@octokit/rest" "^16.28.4" + git-url-parse "^11.1.2" + npmlog "^4.1.2" + +"@lerna/gitlab-client@3.15.0": + version "3.15.0" + resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz#91f4ec8c697b5ac57f7f25bd50fe659d24aa96a6" + integrity sha512-OsBvRSejHXUBMgwWQqNoioB8sgzL/Pf1pOUhHKtkiMl6aAWjklaaq5HPMvTIsZPfS6DJ9L5OK2GGZuooP/5c8Q== + dependencies: + node-fetch "^2.5.0" + npmlog "^4.1.2" + whatwg-url "^7.0.0" + +"@lerna/global-options@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.13.0.tgz#217662290db06ad9cf2c49d8e3100ee28eaebae1" + integrity sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ== + +"@lerna/has-npm-version@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.16.5.tgz#ab83956f211d8923ea6afe9b979b38cc73b15326" + integrity sha512-WL7LycR9bkftyqbYop5rEGJ9sRFIV55tSGmbN1HLrF9idwOCD7CLrT64t235t3t4O5gehDnwKI5h2U3oxTrF8Q== + dependencies: + "@lerna/child-process" "3.16.5" + semver "^6.2.0" + +"@lerna/import@3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.22.0.tgz#1a5f0394f38e23c4f642a123e5e1517e70d068d2" + integrity sha512-uWOlexasM5XR6tXi4YehODtH9Y3OZrFht3mGUFFT3OIl2s+V85xIGFfqFGMTipMPAGb2oF1UBLL48kR43hRsOg== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.21.0" + "@lerna/prompt" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/validation-error" "3.13.0" + dedent "^0.7.0" + fs-extra "^8.1.0" + p-map-series "^1.0.0" + +"@lerna/info@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/info/-/info-3.21.0.tgz#76696b676fdb0f35d48c83c63c1e32bb5e37814f" + integrity sha512-0XDqGYVBgWxUquFaIptW2bYSIu6jOs1BtkvRTWDDhw4zyEdp6q4eaMvqdSap1CG+7wM5jeLCi6z94wS0AuiuwA== + dependencies: + "@lerna/command" "3.21.0" + "@lerna/output" "3.13.0" + envinfo "^7.3.1" + +"@lerna/init@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.21.0.tgz#1e810934dc8bf4e5386c031041881d3b4096aa5c" + integrity sha512-6CM0z+EFUkFfurwdJCR+LQQF6MqHbYDCBPyhu/d086LRf58GtYZYj49J8mKG9ktayp/TOIxL/pKKjgLD8QBPOg== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.21.0" + fs-extra "^8.1.0" + p-map "^2.1.0" + write-json-file "^3.2.0" + +"@lerna/link@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.21.0.tgz#8be68ff0ccee104b174b5bbd606302c2f06e9d9b" + integrity sha512-tGu9GxrX7Ivs+Wl3w1+jrLi1nQ36kNI32dcOssij6bg0oZ2M2MDEFI9UF2gmoypTaN9uO5TSsjCFS7aR79HbdQ== + dependencies: + "@lerna/command" "3.21.0" + "@lerna/package-graph" "3.18.5" + "@lerna/symlink-dependencies" "3.17.0" + p-map "^2.1.0" + slash "^2.0.0" + +"@lerna/list@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.21.0.tgz#42f76fafa56dea13b691ec8cab13832691d61da2" + integrity sha512-KehRjE83B1VaAbRRkRy6jLX1Cin8ltsrQ7FHf2bhwhRHK0S54YuA6LOoBnY/NtA8bHDX/Z+G5sMY78X30NS9tg== + dependencies: + "@lerna/command" "3.21.0" + "@lerna/filter-options" "3.20.0" + "@lerna/listable" "3.18.5" + "@lerna/output" "3.13.0" + +"@lerna/listable@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.18.5.tgz#e82798405b5ed8fc51843c8ef1e7a0e497388a1a" + integrity sha512-Sdr3pVyaEv5A7ZkGGYR7zN+tTl2iDcinryBPvtuv20VJrXBE8wYcOks1edBTcOWsPjCE/rMP4bo1pseyk3UTsg== + dependencies: + "@lerna/query-graph" "3.18.5" + chalk "^2.3.1" + columnify "^1.5.4" + +"@lerna/log-packed@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.16.0.tgz#f83991041ee77b2495634e14470b42259fd2bc16" + integrity sha512-Fp+McSNBV/P2mnLUYTaSlG8GSmpXM7krKWcllqElGxvAqv6chk2K3c2k80MeVB4WvJ9tRjUUf+i7HUTiQ9/ckQ== + dependencies: + byte-size "^5.0.1" + columnify "^1.5.4" + has-unicode "^2.0.1" + npmlog "^4.1.2" + +"@lerna/npm-conf@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.16.0.tgz#1c10a89ae2f6c2ee96962557738685300d376827" + integrity sha512-HbO3DUrTkCAn2iQ9+FF/eisDpWY5POQAOF1m7q//CZjdC2HSW3UYbKEGsSisFxSfaF9Z4jtrV+F/wX6qWs3CuA== + dependencies: + config-chain "^1.1.11" + pify "^4.0.1" + +"@lerna/npm-dist-tag@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.18.5.tgz#9ef9abb7c104077b31f6fab22cc73b314d54ac55" + integrity sha512-xw0HDoIG6HreVsJND9/dGls1c+lf6vhu7yJoo56Sz5bvncTloYGLUppIfDHQr4ZvmPCK8rsh0euCVh2giPxzKQ== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + "@lerna/otplease" "3.18.5" + figgy-pudding "^3.5.1" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + +"@lerna/npm-install@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.16.5.tgz#d6bfdc16f81285da66515ae47924d6e278d637d3" + integrity sha512-hfiKk8Eku6rB9uApqsalHHTHY+mOrrHeWEs+gtg7+meQZMTS3kzv4oVp5cBZigndQr3knTLjwthT/FX4KvseFg== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/get-npm-exec-opts" "3.13.0" + fs-extra "^8.1.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + signal-exit "^3.0.2" + write-pkg "^3.1.0" + +"@lerna/npm-publish@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.18.5.tgz#240e4039959fd9816b49c5b07421e11b5cb000af" + integrity sha512-3etLT9+2L8JAx5F8uf7qp6iAtOLSMj+ZYWY6oUgozPi/uLqU0/gsMsEXh3F0+YVW33q0M61RpduBoAlOOZnaTg== + dependencies: + "@evocateur/libnpmpublish" "^1.2.2" + "@lerna/otplease" "3.18.5" + "@lerna/run-lifecycle" "3.16.2" + figgy-pudding "^3.5.1" + fs-extra "^8.1.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + pify "^4.0.1" + read-package-json "^2.0.13" + +"@lerna/npm-run-script@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.16.5.tgz#9c2ec82453a26c0b46edc0bb7c15816c821f5c15" + integrity sha512-1asRi+LjmVn3pMjEdpqKJZFT/3ZNpb+VVeJMwrJaV/3DivdNg7XlPK9LTrORuKU4PSvhdEZvJmSlxCKyDpiXsQ== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/get-npm-exec-opts" "3.13.0" + npmlog "^4.1.2" + +"@lerna/otplease@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-3.18.5.tgz#b77b8e760b40abad9f7658d988f3ea77d4fd0231" + integrity sha512-S+SldXAbcXTEDhzdxYLU0ZBKuYyURP/ND2/dK6IpKgLxQYh/z4ScljPDMyKymmEvgiEJmBsPZAAPfmNPEzxjog== + dependencies: + "@lerna/prompt" "3.18.5" + figgy-pudding "^3.5.1" + +"@lerna/output@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.13.0.tgz#3ded7cc908b27a9872228a630d950aedae7a4989" + integrity sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg== + dependencies: + npmlog "^4.1.2" + +"@lerna/pack-directory@3.16.4": + version "3.16.4" + resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-3.16.4.tgz#3eae5f91bdf5acfe0384510ed53faddc4c074693" + integrity sha512-uxSF0HZeGyKaaVHz5FroDY9A5NDDiCibrbYR6+khmrhZtY0Bgn6hWq8Gswl9iIlymA+VzCbshWIMX4o2O8C8ng== + dependencies: + "@lerna/get-packed" "3.16.0" + "@lerna/package" "3.16.0" + "@lerna/run-lifecycle" "3.16.2" + figgy-pudding "^3.5.1" + npm-packlist "^1.4.4" + npmlog "^4.1.2" + tar "^4.4.10" + temp-write "^3.4.0" + +"@lerna/package-graph@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.18.5.tgz#c740e2ea3578d059e551633e950690831b941f6b" + integrity sha512-8QDrR9T+dBegjeLr+n9WZTVxUYUhIUjUgZ0gvNxUBN8S1WB9r6H5Yk56/MVaB64tA3oGAN9IIxX6w0WvTfFudA== + dependencies: + "@lerna/prerelease-id-from-version" "3.16.0" + "@lerna/validation-error" "3.13.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + semver "^6.2.0" + +"@lerna/package@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.16.0.tgz#7e0a46e4697ed8b8a9c14d59c7f890e0d38ba13c" + integrity sha512-2lHBWpaxcBoiNVbtyLtPUuTYEaB/Z+eEqRS9duxpZs6D+mTTZMNy6/5vpEVSCBmzvdYpyqhqaYjjSLvjjr5Riw== + dependencies: + load-json-file "^5.3.0" + npm-package-arg "^6.1.0" + write-pkg "^3.1.0" + +"@lerna/prerelease-id-from-version@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz#b24bfa789f5e1baab914d7b08baae9b7bd7d83a1" + integrity sha512-qZyeUyrE59uOK8rKdGn7jQz+9uOpAaF/3hbslJVFL1NqF9ELDTqjCPXivuejMX/lN4OgD6BugTO4cR7UTq/sZA== + dependencies: + semver "^6.2.0" + +"@lerna/profiler@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-3.20.0.tgz#0f6dc236f4ea8f9ea5f358c6703305a4f32ad051" + integrity sha512-bh8hKxAlm6yu8WEOvbLENm42i2v9SsR4WbrCWSbsmOElx3foRnMlYk7NkGECa+U5c3K4C6GeBbwgqs54PP7Ljg== + dependencies: + figgy-pudding "^3.5.1" + fs-extra "^8.1.0" + npmlog "^4.1.2" + upath "^1.2.0" + +"@lerna/project@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.21.0.tgz#5d784d2d10c561a00f20320bcdb040997c10502d" + integrity sha512-xT1mrpET2BF11CY32uypV2GPtPVm6Hgtha7D81GQP9iAitk9EccrdNjYGt5UBYASl4CIDXBRxwmTTVGfrCx82A== + dependencies: + "@lerna/package" "3.16.0" + "@lerna/validation-error" "3.13.0" + cosmiconfig "^5.1.0" + dedent "^0.7.0" + dot-prop "^4.2.0" + glob-parent "^5.0.0" + globby "^9.2.0" + load-json-file "^5.3.0" + npmlog "^4.1.2" + p-map "^2.1.0" + resolve-from "^4.0.0" + write-json-file "^3.2.0" + +"@lerna/prompt@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.18.5.tgz#628cd545f225887d060491ab95df899cfc5218a1" + integrity sha512-rkKj4nm1twSbBEb69+Em/2jAERK8htUuV8/xSjN0NPC+6UjzAwY52/x9n5cfmpa9lyKf/uItp7chCI7eDmNTKQ== + dependencies: + inquirer "^6.2.0" + npmlog "^4.1.2" + +"@lerna/publish@3.22.1": + version "3.22.1" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.22.1.tgz#b4f7ce3fba1e9afb28be4a1f3d88222269ba9519" + integrity sha512-PG9CM9HUYDreb1FbJwFg90TCBQooGjj+n/pb3gw/eH5mEDq0p8wKdLFe0qkiqUkm/Ub5C8DbVFertIo0Vd0zcw== + dependencies: + "@evocateur/libnpmaccess" "^3.1.2" + "@evocateur/npm-registry-fetch" "^4.0.0" + "@evocateur/pacote" "^9.6.3" + "@lerna/check-working-tree" "3.16.5" + "@lerna/child-process" "3.16.5" + "@lerna/collect-updates" "3.20.0" + "@lerna/command" "3.21.0" + "@lerna/describe-ref" "3.16.5" + "@lerna/log-packed" "3.16.0" + "@lerna/npm-conf" "3.16.0" + "@lerna/npm-dist-tag" "3.18.5" + "@lerna/npm-publish" "3.18.5" + "@lerna/otplease" "3.18.5" + "@lerna/output" "3.13.0" + "@lerna/pack-directory" "3.16.4" + "@lerna/prerelease-id-from-version" "3.16.0" + "@lerna/prompt" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/run-lifecycle" "3.16.2" + "@lerna/run-topologically" "3.18.5" + "@lerna/validation-error" "3.13.0" + "@lerna/version" "3.22.1" + figgy-pudding "^3.5.1" + fs-extra "^8.1.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + p-finally "^1.0.0" + p-map "^2.1.0" + p-pipe "^1.2.0" + semver "^6.2.0" + +"@lerna/pulse-till-done@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz#c8e9ce5bafaf10d930a67d7ed0ccb5d958fe0110" + integrity sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA== + dependencies: + npmlog "^4.1.2" + +"@lerna/query-graph@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-3.18.5.tgz#df4830bb5155273003bf35e8dda1c32d0927bd86" + integrity sha512-50Lf4uuMpMWvJ306be3oQDHrWV42nai9gbIVByPBYJuVW8dT8O8pA3EzitNYBUdLL9/qEVbrR0ry1HD7EXwtRA== + dependencies: + "@lerna/package-graph" "3.18.5" + figgy-pudding "^3.5.1" + +"@lerna/resolve-symlink@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz#37fc7095fabdbcf317c26eb74e0d0bde8efd2386" + integrity sha512-Ibj5e7njVHNJ/NOqT4HlEgPFPtPLWsO7iu59AM5bJDcAJcR96mLZ7KGVIsS2tvaO7akMEJvt2P+ErwCdloG3jQ== + dependencies: + fs-extra "^8.1.0" + npmlog "^4.1.2" + read-cmd-shim "^1.0.1" + +"@lerna/rimraf-dir@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.16.5.tgz#04316ab5ffd2909657aaf388ea502cb8c2f20a09" + integrity sha512-bQlKmO0pXUsXoF8lOLknhyQjOZsCc0bosQDoX4lujBXSWxHVTg1VxURtWf2lUjz/ACsJVDfvHZbDm8kyBk5okA== + dependencies: + "@lerna/child-process" "3.16.5" + npmlog "^4.1.2" + path-exists "^3.0.0" + rimraf "^2.6.2" + +"@lerna/run-lifecycle@3.16.2": + version "3.16.2" + resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz#67b288f8ea964db9ea4fb1fbc7715d5bbb0bce00" + integrity sha512-RqFoznE8rDpyyF0rOJy3+KjZCeTkO8y/OB9orPauR7G2xQ7PTdCpgo7EO6ZNdz3Al+k1BydClZz/j78gNCmL2A== + dependencies: + "@lerna/npm-conf" "3.16.0" + figgy-pudding "^3.5.1" + npm-lifecycle "^3.1.2" + npmlog "^4.1.2" + +"@lerna/run-topologically@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-3.18.5.tgz#3cd639da20e967d7672cb88db0f756b92f2fdfc3" + integrity sha512-6N1I+6wf4hLOnPW+XDZqwufyIQ6gqoPfHZFkfWlvTQ+Ue7CuF8qIVQ1Eddw5HKQMkxqN10thKOFfq/9NQZ4NUg== + dependencies: + "@lerna/query-graph" "3.18.5" + figgy-pudding "^3.5.1" + p-queue "^4.0.0" + +"@lerna/run@3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.21.0.tgz#2a35ec84979e4d6e42474fe148d32e5de1cac891" + integrity sha512-fJF68rT3veh+hkToFsBmUJ9MHc9yGXA7LSDvhziAojzOb0AI/jBDp6cEcDQyJ7dbnplba2Lj02IH61QUf9oW0Q== + dependencies: + "@lerna/command" "3.21.0" + "@lerna/filter-options" "3.20.0" + "@lerna/npm-run-script" "3.16.5" + "@lerna/output" "3.13.0" + "@lerna/profiler" "3.20.0" + "@lerna/run-topologically" "3.18.5" + "@lerna/timer" "3.13.0" + "@lerna/validation-error" "3.13.0" + p-map "^2.1.0" + +"@lerna/symlink-binary@3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.17.0.tgz#8f8031b309863814883d3f009877f82e38aef45a" + integrity sha512-RLpy9UY6+3nT5J+5jkM5MZyMmjNHxZIZvXLV+Q3MXrf7Eaa1hNqyynyj4RO95fxbS+EZc4XVSk25DGFQbcRNSQ== + dependencies: + "@lerna/create-symlink" "3.16.2" + "@lerna/package" "3.16.0" + fs-extra "^8.1.0" + p-map "^2.1.0" + +"@lerna/symlink-dependencies@3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.17.0.tgz#48d6360e985865a0e56cd8b51b308a526308784a" + integrity sha512-KmjU5YT1bpt6coOmdFueTJ7DFJL4H1w5eF8yAQ2zsGNTtZ+i5SGFBWpb9AQaw168dydc3s4eu0W0Sirda+F59Q== + dependencies: + "@lerna/create-symlink" "3.16.2" + "@lerna/resolve-symlink" "3.16.0" + "@lerna/symlink-binary" "3.17.0" + fs-extra "^8.1.0" + p-finally "^1.0.0" + p-map "^2.1.0" + p-map-series "^1.0.0" + +"@lerna/timer@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-3.13.0.tgz#bcd0904551db16e08364d6c18e5e2160fc870781" + integrity sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw== + +"@lerna/validation-error@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.13.0.tgz#c86b8f07c5ab9539f775bd8a54976e926f3759c3" + integrity sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA== + dependencies: + npmlog "^4.1.2" + +"@lerna/version@3.22.1": + version "3.22.1" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.22.1.tgz#9805a9247a47ee62d6b81bd9fa5fb728b24b59e2" + integrity sha512-PSGt/K1hVqreAFoi3zjD0VEDupQ2WZVlVIwesrE5GbrL2BjXowjCsTDPqblahDUPy0hp6h7E2kG855yLTp62+g== + dependencies: + "@lerna/check-working-tree" "3.16.5" + "@lerna/child-process" "3.16.5" + "@lerna/collect-updates" "3.20.0" + "@lerna/command" "3.21.0" + "@lerna/conventional-commits" "3.22.0" + "@lerna/github-client" "3.22.0" + "@lerna/gitlab-client" "3.15.0" + "@lerna/output" "3.13.0" + "@lerna/prerelease-id-from-version" "3.16.0" + "@lerna/prompt" "3.18.5" + "@lerna/run-lifecycle" "3.16.2" + "@lerna/run-topologically" "3.18.5" + "@lerna/validation-error" "3.13.0" + chalk "^2.3.1" + dedent "^0.7.0" + load-json-file "^5.3.0" + minimatch "^3.0.4" + npmlog "^4.1.2" + p-map "^2.1.0" + p-pipe "^1.2.0" + p-reduce "^1.0.0" + p-waterfall "^1.0.0" + semver "^6.2.0" + slash "^2.0.0" + temp-write "^3.4.0" + write-json-file "^3.2.0" + +"@lerna/write-log-file@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.13.0.tgz#b78d9e4cfc1349a8be64d91324c4c8199e822a26" + integrity sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A== + dependencies: + npmlog "^4.1.2" + write-file-atomic "^2.3.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.stat@^1.1.2": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== + +"@octokit/auth-token@^2.4.0": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.2.tgz#10d0ae979b100fa6b72fa0e8e63e27e6d0dbff8a" + integrity sha512-jE/lE/IKIz2v1+/P0u4fJqv0kYwXOTujKemJMFr6FeopsxlIK3+wKDCJGnysg81XID5TgZQbIfuJ5J0lnTiuyQ== + dependencies: + "@octokit/types" "^5.0.0" + +"@octokit/endpoint@^6.0.1": + version "6.0.5" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.5.tgz#43a6adee813c5ffd2f719e20cfd14a1fee7c193a" + integrity sha512-70K5u6zd45ItOny6aHQAsea8HHQjlQq85yqOMe+Aj8dkhN2qSJ9T+Q3YjUjEYfPRBcuUWNgMn62DQnP/4LAIiQ== + dependencies: + "@octokit/types" "^5.0.0" + is-plain-object "^4.0.0" + universal-user-agent "^6.0.0" + +"@octokit/plugin-enterprise-rest@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" + integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== + +"@octokit/plugin-paginate-rest@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc" + integrity sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q== + dependencies: + "@octokit/types" "^2.0.1" + +"@octokit/plugin-request-log@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz#eef87a431300f6148c39a7f75f8cfeb218b2547e" + integrity sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw== + +"@octokit/plugin-rest-endpoint-methods@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" + integrity sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ== + dependencies: + "@octokit/types" "^2.0.1" + deprecation "^2.3.1" + +"@octokit/request-error@^1.0.2": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" + integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA== + dependencies: + "@octokit/types" "^2.0.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request-error@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.2.tgz#0e76b83f5d8fdda1db99027ea5f617c2e6ba9ed0" + integrity sha512-2BrmnvVSV1MXQvEkrb9zwzP0wXFNbPJij922kYBTLIlIafukrGOb+ABBT2+c6wZiuyWDH1K1zmjGQ0toN/wMWw== + dependencies: + "@octokit/types" "^5.0.1" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^5.2.0": + version "5.4.7" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.7.tgz#fd703ee092e0463ceba49ff7a3e61cb4cf8a0fde" + integrity sha512-FN22xUDP0i0uF38YMbOfx6TotpcENP5W8yJM1e/LieGXn6IoRxDMnBf7tx5RKSW4xuUZ/1P04NFZy5iY3Rax1A== + dependencies: + "@octokit/endpoint" "^6.0.1" + "@octokit/request-error" "^2.0.0" + "@octokit/types" "^5.0.0" + deprecation "^2.0.0" + is-plain-object "^4.0.0" + node-fetch "^2.3.0" + once "^1.4.0" + universal-user-agent "^6.0.0" + +"@octokit/rest@^16.28.4": + version "16.43.2" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.2.tgz#c53426f1e1d1044dee967023e3279c50993dd91b" + integrity sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ== + dependencies: + "@octokit/auth-token" "^2.4.0" + "@octokit/plugin-paginate-rest" "^1.1.1" + "@octokit/plugin-request-log" "^1.0.0" + "@octokit/plugin-rest-endpoint-methods" "2.4.0" + "@octokit/request" "^5.2.0" + "@octokit/request-error" "^1.0.2" + atob-lite "^2.0.0" + before-after-hook "^2.0.0" + btoa-lite "^1.0.0" + deprecation "^2.0.0" + lodash.get "^4.4.2" + lodash.set "^4.3.2" + lodash.uniq "^4.5.0" + octokit-pagination-methods "^1.1.0" + once "^1.4.0" + universal-user-agent "^4.0.0" + +"@octokit/types@^2.0.0", "@octokit/types@^2.0.1": + version "2.16.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.16.2.tgz#4c5f8da3c6fecf3da1811aef678fda03edac35d2" + integrity sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q== + dependencies: + "@types/node" ">= 8" + +"@octokit/types@^5.0.0", "@octokit/types@^5.0.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-5.2.1.tgz#c212f03b0492faf215fa2ae506d5ec18038c2a36" + integrity sha512-PugtgEw8u++zAyBpDpSkR8K1OsT2l8QWp3ECL6bZHFoq9PfHDoKeGFWSuX2Z+Ghy93k1fkKf8tsmqNBv+8dEfQ== + dependencies: + "@types/node" ">= 8" + +"@sinonjs/commons@^1.7.0": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" + integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": + version "7.1.9" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d" + integrity sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.1" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04" + integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" + integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.0.13" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.13.tgz#1874914be974a492e1b4cb00585cabb274e8ba18" + integrity sha512-i+zS7t6/s9cdQvbqKDARrcbrPvtJGlbYsMkazo03nTAK3RX9FNrLllXys22uiTGJapPOTZTQ35nHh4ISph4SLQ== + dependencies: + "@babel/types" "^7.3.0" + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/eslint-visitor-keys@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/graceful-fs@^4.1.2": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.3.tgz#039af35fe26bec35003e8d86d2ee9c586354348f" + integrity sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" + integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" + +"@types/jest@^26.0.7": + version "26.0.8" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.8.tgz#f5c5559cf25911ce227f7ce30f1f160f24966369" + integrity sha512-eo3VX9jGASSuv680D4VQ89UmuLZneNxv2MCZjfwlInav05zXVJTzfc//lavdV0GPwSxsXJTy2jALscB7Acqg0g== + dependencies: + jest-diff "^25.2.1" + pretty-format "^25.2.1" + +"@types/json-schema@^7.0.3": + version "7.0.5" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" + integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/minimist@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6" + integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= + +"@types/node@*", "@types/node@>= 8", "@types/node@^14.0.27": + version "14.0.27" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1" + integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g== + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/prettier@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.0.2.tgz#5bb52ee68d0f8efa9cc0099920e56be6cc4e37f3" + integrity sha512-IkVfat549ggtkZUthUzEX49562eGikhSYeVGX97SkMFn+sTZrgRewXjQ4tPKFPCykZHkX1Zfd9OoELGqKU2jJA== + +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== + +"@types/yargs-parser@*": + version "15.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== + +"@types/yargs@^15.0.0": + version "15.0.5" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79" + integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.8.0.tgz#f82947bcdd9a4e42be7ad80dfd61f1dc411dd1df" + integrity sha512-lFb4VCDleFSR+eo4Ew+HvrJ37ZH1Y9ZyE+qyP7EiwBpcCVxwmUc5PAqhShCQ8N8U5vqYydm74nss+a0wrrCErw== + dependencies: + "@typescript-eslint/experimental-utils" "3.8.0" + debug "^4.1.1" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.8.0.tgz#ac1f7c88322dcfb7635ece6f0441516dd951099a" + integrity sha512-o8T1blo1lAJE0QDsW7nSyvZHbiDzQDjINJKyB44Z3sSL39qBy5L10ScI/XwDtaiunoyKGLiY9bzRk4YjsUZl8w== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/types" "3.8.0" + "@typescript-eslint/typescript-estree" "3.8.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.8.0.tgz#8e1dcd404299bf79492409c81c415fa95a7c622b" + integrity sha512-u5vjOBaCsnMVQOvkKCXAmmOhyyMmFFf5dbkM3TIbg3MZ2pyv5peE4gj81UAbTHwTOXEwf7eCQTUMKrDl/+qGnA== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "3.8.0" + "@typescript-eslint/types" "3.8.0" + "@typescript-eslint/typescript-estree" "3.8.0" + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/types@3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.8.0.tgz#58581dd863f86e0cd23353d94362bb90b4bea796" + integrity sha512-8kROmEQkv6ss9kdQ44vCN1dTrgu4Qxrd2kXr10kz2NP5T8/7JnEfYNxCpPkArbLIhhkGLZV3aVMplH1RXQRF7Q== + +"@typescript-eslint/typescript-estree@3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.8.0.tgz#0606d19f629f813dbdd5a34c7a1e895d6191cac6" + integrity sha512-MTv9nPDhlKfclwnplRNDL44mP2SY96YmPGxmMbMy6x12I+pERcxpIUht7DXZaj4mOKKtet53wYYXU0ABaiXrLw== + dependencies: + "@typescript-eslint/types" "3.8.0" + "@typescript-eslint/visitor-keys" "3.8.0" + debug "^4.1.1" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/visitor-keys@3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.8.0.tgz#ad35110249fb3fc30a36bfcbfeea93e710cfaab1" + integrity sha512-gfqQWyVPpT9NpLREXNR820AYwgz+Kr1GuF3nf1wxpHD6hdxI62tq03ToomFnDxY0m3pUB39IF7sil7D5TQexLA== + dependencies: + eslint-visitor-keys "^1.1.0" + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +"@zkochan/cmd-shim@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" + integrity sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg== + dependencies: + is-windows "^1.0.0" + mkdirp-promise "^5.0.1" + mz "^2.5.0" + +JSONStream@^1.0.4, JSONStream@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abab@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.4.tgz#6dfa57b417ca06d21b2478f0e638302f99c2405c" + integrity sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-jsx@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== + +acorn@^7.1.1, acorn@^7.3.1: + version "7.4.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" + integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== + +agent-base@4, agent-base@^4.2.0, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + +agent-base@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== + dependencies: + es6-promisify "^5.0.0" + +agentkeepalive@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" + integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== + dependencies: + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" + integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@^3.0.3, anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +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@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-4.0.2.tgz#43c72865eadb4ddaaa2fb74852527b6a450d927c" + integrity sha512-B9IZjlGwaxF33UN4oPbfBkyA4V1SxNLeIhR1qY8sRXSsbdUkEHrrOvwlYFPx+8uQeCe9M+FG6KgO+imDmQ79CQ== + dependencies: + archiver-utils "^2.1.0" + async "^3.2.0" + buffer-crc32 "^0.2.1" + glob "^7.1.6" + readable-stream "^3.6.0" + tar-stream "^2.1.2" + zip-stream "^3.0.1" + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +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" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-differ@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" + integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= + +array-union@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +ast-types@0.x.x: + version "0.13.3" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.3.tgz#50da3f28d17bdbc7969a3a2d83a0e4a72ae755a7" + integrity sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA== + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" + integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +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== + +atob-lite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" + integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +aws-cdk@^1.54.0: + version "1.56.0" + resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-1.56.0.tgz#7947f2bb9258b976669e36f6cd82953c76e54ee3" + integrity sha512-3ZzPrS5vQEIlusmw5YW8SGPUUqhHF34aaoPY2QyFGd9+wnZYDK7xu1/JGfhMtiFVzwh1A3jBRQL372s0hXWhyA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.56.0" + "@aws-cdk/cloudformation-diff" "1.56.0" + "@aws-cdk/cx-api" "1.56.0" + "@aws-cdk/region-info" "1.56.0" + archiver "^4.0.2" + aws-sdk "^2.715.0" + camelcase "^6.0.0" + cdk-assets "1.56.0" + colors "^1.4.0" + decamelize "^4.0.0" + fs-extra "^9.0.1" + glob "^7.1.6" + json-diff "^0.5.4" + minimatch ">=3.0" + promptly "^3.0.3" + proxy-agent "^3.1.1" + semver "^7.2.2" + source-map-support "^0.5.19" + table "^5.4.6" + uuid "^8.2.0" + wrap-ansi "^7.0.0" + yaml "^1.10.0" + yargs "^15.3.1" + +aws-sdk@^2.715.0: + version "2.726.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.726.0.tgz#075aae1922e67e21285abae1bb081252cff4fec3" + integrity sha512-QRQ7MaW5dprdr/T3vCTC+J8TeUfpM45yWsBuATPcCV/oO8afFHVySwygvGLY4oJuo5Mf4mJn3+JYTquo6CqiaA== + dependencies: + buffer "4.9.2" + events "1.1.1" + ieee754 "1.1.13" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "3.3.2" + xml2js "0.4.19" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" + integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== + +babel-jest@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.2.2.tgz#70f618f2d7016ed71b232241199308985462f812" + integrity sha512-JmLuePHgA+DSOdOL8lPxCgD2LhPPm+rdw1vnxR73PpIrnmKCS2/aBhtkAcxQWuUcW2hBrH8MJ3LKXE7aWpNZyA== + dependencies: + "@jest/transform" "^26.2.2" + "@jest/types" "^26.2.0" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.2.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-istanbul@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^4.0.0" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.2.0.tgz#bdd0011df0d3d513e5e95f76bd53b51147aca2dd" + integrity sha512-B/hVMRv8Nh1sQ1a3EY8I0n4Y1Wty3NrR5ebOyVT302op+DOAau+xNEImGMsUWOC3++ZlMooCytKz+NgN8aKGbA== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.3.tgz#b4b547acddbf963cba555ba9f9cbbb70bfd044da" + integrity sha512-uyexu1sVwcdFnyq9o8UQYsXwXflIh8LvrF5+cKrYam93ned1CStffB3+BEcsxGSgagoA3GEyjDqO4a/58hyPYQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +babel-preset-jest@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.2.0.tgz#f198201a4e543a43eb40bc481e19736e095fd3e0" + integrity sha512-R1k8kdP3R9phYQugXeNnK/nvCGlBzG4m3EoIIukC80GXb6wCv2XiwPhK6K9MAkQcMszWBYvl2Wm+yigyXFQqXg== + dependencies: + babel-plugin-jest-hoist "^26.2.0" + babel-preset-current-node-syntax "^0.1.2" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +before-after-hook@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" + integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bl@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a" + integrity sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0" + integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA== + +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" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, 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" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^4.12.0, browserslist@^4.8.5: + version "4.13.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.13.0.tgz#42556cba011e1b0a2775b611cba6a8eca18e940d" + integrity sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ== + dependencies: + caniuse-lite "^1.0.30001093" + electron-to-chromium "^1.3.488" + escalade "^3.0.1" + node-releases "^1.1.58" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +btoa-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" + integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= + +buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-from@1.x, buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@4.9.2, buffer@^4.3.0: + 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.1.0, buffer@^5.5.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" + integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= + +byline@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= + +byte-size@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" + integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= + dependencies: + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" + integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== + +caniuse-lite@^1.0.30001093: + version "1.0.30001110" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001110.tgz#9003e3c7f5a43ea6f1193d4d5acba0bfb152c71a" + integrity sha512-KqJWeat4rhSHF0ito4yz9q/JuZHkvn71SsBnxge4azjPDbowIjOUnS8i1xpKGxZxU6BFiPqO2hSV2eiCpFQVRw== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +cdk-assets@1.56.0: + version "1.56.0" + resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.56.0.tgz#7a9805ec4f9eb380da50054bf6958aa1f5f86fd5" + integrity sha512-YlZGTCFrnqSSSCBtgAC2u/MjJamJLerCxwf5smMezOwM2Oo83BswqhAQ+ZQLxQdUifqwN2HNqN0juKeS9X5e5g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.56.0" + "@aws-cdk/cx-api" "1.56.0" + archiver "^4.0.2" + aws-sdk "^2.715.0" + glob "^7.1.6" + yargs "^15.3.1" + +chalk@^2.0.0, chalk@^2.3.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +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== + +charenc@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" + integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + +chownr@^1.1.1, chownr@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +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@~0.1.6: + version "0.1.7" + resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-0.1.7.tgz#adc3200fa471cc211b0da7f566b71e98b9d67347" + integrity sha1-rcMgD6RxzCEbDaf1ZrcemLnWc0c= + dependencies: + es5-ext "0.8.x" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +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-truncate@2.1.0, cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +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.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +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== + +colors@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +columnify@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= + dependencies: + strip-ansi "^3.0.0" + wcwidth "^1.0.0" + +combined-stream@^1.0.6, combined-stream@~1.0.6: + 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.20.0: + 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.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +compare-func@^1.3.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.4.tgz#6b07c4c5e8341119baf44578085bda0f4a823516" + integrity sha512-sq2sWtrqKPkEXAC8tEJA1+BqAH9GbFkGBtUOqrUX57VSfwp8xyktctk+uLoRy5eccTdxzDcVIztlYDpKs3Jv1Q== + dependencies: + array-ify "^1.0.0" + dot-prop "^3.0.0" + +compare-versions@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" + integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== + +component-emitter@^1.2.1: + 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@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-3.0.0.tgz#833944d84596e537224dd91cf92f5246823d4f1d" + integrity sha512-FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg== + dependencies: + buffer-crc32 "^0.2.13" + crc32-stream "^3.0.1" + normalize-path "^3.0.0" + readable-stream "^2.3.7" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +config-chain@^1.1.11: + version "1.1.12" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +constructs@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" + integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== + +conventional-changelog-angular@^5.0.3: + version "5.0.10" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.10.tgz#5cf7b00dd315b6a6a558223c80d5ef24ddb34205" + integrity sha512-k7RPPRs0vp8+BtPsM9uDxRl6KcgqtCJmzRD1wRtgqmhQ96g8ifBGo9O/TZBG23jqlXS/rg8BKRDELxfnQQGiaA== + dependencies: + compare-func "^1.3.1" + q "^1.5.1" + +conventional-changelog-core@^3.1.6: + version "3.2.3" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz#b31410856f431c847086a7dcb4d2ca184a7d88fb" + integrity sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ== + dependencies: + conventional-changelog-writer "^4.0.6" + conventional-commits-parser "^3.0.3" + dateformat "^3.0.0" + get-pkg-repo "^1.0.0" + git-raw-commits "2.0.0" + git-remote-origin-url "^2.0.0" + git-semver-tags "^2.0.3" + lodash "^4.2.1" + normalize-package-data "^2.3.5" + q "^1.5.1" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + through2 "^3.0.0" + +conventional-changelog-preset-loader@^2.1.1: + version "2.3.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" + integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== + +conventional-changelog-writer@^4.0.6: + version "4.0.16" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.16.tgz#ca10f2691a8ea6d3c2eb74bd35bcf40aa052dda5" + integrity sha512-jmU1sDJDZpm/dkuFxBeRXvyNcJQeKhGtVcFFkwTphUAzyYWcwz2j36Wcv+Mv2hU3tpvLMkysOPXJTLO55AUrYQ== + dependencies: + compare-func "^1.3.1" + conventional-commits-filter "^2.0.6" + dateformat "^3.0.0" + handlebars "^4.7.6" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + meow "^7.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^3.0.0" + +conventional-commits-filter@^2.0.2, conventional-commits-filter@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.6.tgz#0935e1240c5ca7698329affee1b6a46d33324c4c" + integrity sha512-4g+sw8+KA50/Qwzfr0hL5k5NWxqtrOVw4DDk3/h6L85a9Gz0/Eqp3oP+CWCNfesBvZZZEFHF7OTEbRe+yYSyKw== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.0" + +conventional-commits-parser@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.1.0.tgz#10140673d5e7ef5572633791456c5d03b69e8be4" + integrity sha512-RSo5S0WIwXZiRxUGTPuYFbqvrR4vpJ1BDdTlthFgvHt5kEdnd1+pdvwWphWn57/oIl4V72NMmOocFqqJ8mFFhA== + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^7.0.0" + split2 "^2.0.0" + through2 "^3.0.0" + trim-off-newlines "^1.0.0" + +conventional-recommended-bump@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz#5af63903947b6e089e77767601cb592cabb106ba" + integrity sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^2.1.1" + conventional-commits-filter "^2.0.2" + conventional-commits-parser "^3.0.3" + git-raw-commits "2.0.0" + git-semver-tags "^2.0.3" + meow "^4.0.0" + q "^1.5.1" + +convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js-compat@^3.6.2: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" + integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== + dependencies: + browserslist "^4.8.5" + semver "7.0.0" + +core-js@^3.6.5: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" + integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +crc32-stream@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85" + integrity sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w== + dependencies: + crc "^3.4.4" + readable-stream "^3.4.0" + +crc@^3.4.4: + version "3.8.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" + integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== + dependencies: + buffer "^5.1.0" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^6.0.0, 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" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypt@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +dargs@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" + integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= + dependencies: + number-is-nan "^1.0.0" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-uri-to-buffer@1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" + integrity sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ== + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debug@2, debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= + +decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decimal.js@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.0.tgz#39466113a9e036111d02f82489b5fd6b0b5ed231" + integrity sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +degenerator@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" + integrity sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU= + dependencies: + ast-types "0.x.x" + escodegen "1.x.x" + esprima "3.x.x" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +dezalgo@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= + dependencies: + asap "^2.0.0" + wrappy "1" + +diff-sequences@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" + integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== + +diff-sequences@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.0.0.tgz#0760059a5c287637b842bd7085311db7060e88a6" + integrity sha512-JC/eHYEC3aSS0vZGjuoc4vHA0yAQTzhQQldXMeMF+JlxLGJlCO38Gma82NV9gk1jGFz8mDzUMeaKXvjRRdJ2dg== + +diff@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +difflib@~0.2.1: + version "0.2.4" + resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" + integrity sha1-teMDYabbAjF21WKJLbhZQKcY9H4= + dependencies: + heap ">= 0.2.0" + +dir-glob@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== + dependencies: + path-type "^3.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +dot-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" + integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= + dependencies: + is-obj "^1.0.0" + +dot-prop@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== + dependencies: + is-obj "^1.0.0" + +dreamopt@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/dreamopt/-/dreamopt-0.6.0.tgz#d813ccdac8d39d8ad526775514a13dda664d6b4b" + integrity sha1-2BPM2sjTnYrVJndVFKE92mZNa0s= + dependencies: + wordwrap ">=0.0.2" + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +electron-to-chromium@^1.3.488: + version "1.3.518" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.518.tgz#c54ee9cf1a7bafd6e482a1a6cceac86448d941e8" + integrity sha512-IspiwXYDKZMxo+qc3Vof4WtwbG9BMDbJfati8PYj7uS4DJmJ67pwjCKZxlTBSAuCZSMcbRnj2Xz2H14uiKT7bQ== + +elliptic@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emittery@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.1.tgz#c02375a927a40948c0345cc903072597f5270451" + integrity sha512-d34LN4L6h18Bzz9xpoku2nPwKxCPlPMr3EEKTkoEBi+1/+b0lcRkRJ1UVyyZaKNeqGR3swcGl6s390DNO4YVgQ== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +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== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encoding@^0.1.11: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +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" + +enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" + integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +env-paths@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" + integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== + +envinfo@^7.3.1: + version "7.7.2" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.2.tgz#098f97a0e902f8141f9150553c92dbb282c4cabe" + integrity sha512-k3Eh5bKuQnZjm49/L7H4cHzs2FlL5QjbTB3JrPxoTI8aJG7hVMe4uKyJxSYH4ahseby2waUwk5OaKX/nAsaYgg== + +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= + +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: + version "1.17.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" + integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.0" + is-regex "^1.1.0" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +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.8.x: + version "0.8.2" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab" + integrity sha1-q6jZ4ZQ6iVrJaDemKjmz9V7NlKs= + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +escalade@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" + integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== + +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 sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escodegen@1.x.x, escodegen@^1.14.1: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.0.0, eslint-scope@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" + integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^2.0.0, eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint@^7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.6.0.tgz#522d67cfaea09724d96949c70e7a0550614d64d6" + integrity sha512-QlAManNtqr7sozWm5TF4wIH9gmUm2hE3vNRUvyoYAa4y1l5/jxD/PQStEjBMQtCqZmSep8UxrcecI60hOpe61w== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.0" + eslint-utils "^2.1.0" + eslint-visitor-keys "^1.3.0" + espree "^7.2.0" + esquery "^1.2.0" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.19" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.2.0.tgz#1c263d5b513dbad0ac30c4991b93ac354e948d69" + integrity sha512-H+cQ3+3JYRMEIOl87e7QdHX70ocly5iW4+dttuR8iYSPr/hXKFb+7dBsZ7+u1adC4VrnPlTkv0+OwuPnDop19g== + dependencies: + acorn "^7.3.1" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.3.0" + +esprima@3.x.x: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" + integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eventemitter3@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== + +events@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= + +events@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +exec-sh@^0.3.2: + version "0.3.4" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^4.0.0, execa@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2" + integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +expect@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.2.0.tgz#0140dd9cc7376d7833852e9cda88c05414f1efba" + integrity sha512-8AMBQ9UVcoUXt0B7v+5/U5H6yiUR87L6eKCfjE3spx7Ya5lF+ebUo37MCFBML2OiLfkX1sxmQOZhIDonyVTkcw== + dependencies: + "@jest/types" "^26.2.0" + ansi-styles "^4.0.0" + jest-get-type "^26.0.0" + jest-matcher-utils "^26.2.0" + jest-message-util "^26.2.0" + jest-regex-util "^26.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +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" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + 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@^2.2.6: + version "2.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +figures@^3.2.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-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +file-uri-to-path@1, file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +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-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-versions@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e" + integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww== + dependencies: + semver-regex "^2.0.0" + +findup-sync@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +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@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@^2.1.2, fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +ftp@~0.3.10: + version "0.3.10" + resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" + integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0= + dependencies: + readable-stream "1.1.x" + xregexp "2.0.0" + +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== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +genfun@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" + integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + +get-caller-file@^2.0.1: + 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-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-pkg-repo@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" + integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0= + dependencies: + hosted-git-info "^2.1.4" + meow "^3.3.0" + normalize-package-data "^2.3.0" + parse-github-repo-url "^1.3.0" + through2 "^2.0.0" + +get-port@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" + integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-stream@^4.0.0, get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" + integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + dependencies: + pump "^3.0.0" + +get-uri@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.4.tgz#d4937ab819e218d4cb5ae18e4f5962bef169cc6a" + integrity sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q== + dependencies: + data-uri-to-buffer "1" + debug "2" + extend "~3.0.2" + file-uri-to-path "1" + ftp "~0.3.10" + readable-stream "2" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +git-raw-commits@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" + integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg== + dependencies: + dargs "^4.0.1" + lodash.template "^4.0.2" + meow "^4.0.0" + split2 "^2.0.0" + through2 "^2.0.0" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.3.tgz#48988a718acf593800f99622a952a77c405bfa34" + integrity sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA== + dependencies: + meow "^4.0.0" + semver "^6.0.0" + +git-up@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.1.tgz#cb2ef086653640e721d2042fe3104857d89007c0" + integrity sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw== + dependencies: + is-ssh "^1.3.0" + parse-url "^5.0.0" + +git-url-parse@^11.1.2: + version "11.1.2" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.1.2.tgz#aff1a897c36cc93699270587bea3dbcbbb95de67" + integrity sha512-gZeLVGY8QVKMIkckncX+iCq2/L8PlwncvDFKiWkBn9EtCfYDbliRTTp6qzyQ1VMdITUfq7293zDzfpjdiGASSQ== + dependencies: + git-up "^4.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= + dependencies: + ini "^1.3.2" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.0.0, glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + +glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + +globby@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" + integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^1.0.2" + dir-glob "^2.2.2" + fast-glob "^2.2.6" + glob "^7.1.3" + ignore "^4.0.3" + pify "^4.0.1" + slash "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +handlebars@^4.7.6: + version "4.7.6" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" + integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +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-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-unicode@^2.0.0, has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +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" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +"heap@>= 0.2.0": + version "0.2.6" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" + integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-cache-semantics@^3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + +http-errors@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== + dependencies: + agent-base "4" + debug "3.1.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +https-proxy-agent@^2.2.3: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +https-proxy-agent@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81" + integrity sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + +husky@^4.2.5: + version "4.2.5" + resolved "https://registry.yarnpkg.com/husky/-/husky-4.2.5.tgz#2b4f7622673a71579f901d9885ed448394b5fa36" + integrity sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ== + dependencies: + chalk "^4.0.0" + ci-info "^2.0.0" + compare-versions "^3.6.0" + cosmiconfig "^6.0.0" + find-versions "^3.2.0" + opencollective-postinstall "^2.0.2" + pkg-dir "^4.2.0" + please-upgrade-node "^3.2.0" + slash "^3.0.0" + which-pm-runs "^1.0.0" + +iconv-lite@0.4.24, 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" + +iconv-lite@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@1.1.13, ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + +ignore@^4.0.3, ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0, import-fresh@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + +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== + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, 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== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.2, ini@^1.3.4, ini@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +init-package-json@^1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" + integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== + dependencies: + glob "^7.1.1" + npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" + promzard "^0.3.0" + read "~1.0.1" + read-package-json "1 || 2" + semver "2.x || 3.x || 4 || 5" + validate-npm-package-license "^3.0.1" + validate-npm-package-name "^3.0.0" + +inquirer@^6.2.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +interpret@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +invariant@^2.2.2, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@1.1.5, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +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-buffer@^1.1.5, is-buffer@~1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4, is-callable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" + integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-docker@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" + integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +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-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +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-obj@^1.0.0, is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-plain-object@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-4.1.1.tgz#1a14d6452cbd50790edc7fdaa0aed5a40a35ebb5" + integrity sha512-5Aw8LLVsDlZsETVMhoMXzqsXwQqr/0vlnBYzIXJbYo2F4yYlhLHs+Ez7Bod7IIQKWkJbJfxrWD7pA1Dw1TKrwA== + +is-potential-custom-element-name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" + integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= + +is-regex@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + +is-ssh@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" + integrity sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg== + dependencies: + protocols "^1.1.0" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= + dependencies: + text-extensions "^1.0.0" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +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@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.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 sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + +istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.2.0.tgz#b4946201defe0c919a2f3d601e9f98cb21dacc15" + integrity sha512-+RyJb+F1K/XBLIYiL449vo5D+CvlHv29QveJUWNPXuUicyZcq+tf1wNxmmFeRvAU1+TzhwqczSjxnCCFt7+8iA== + dependencies: + "@jest/types" "^26.2.0" + execa "^4.0.0" + throat "^5.0.0" + +jest-cli@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.2.2.tgz#4c273e5474baafac1eb15fd25aaafb4703f5ffbc" + integrity sha512-vVcly0n/ijZvdy6gPQiQt0YANwX2hLTPQZHtW7Vi3gcFdKTtif7YpI85F8R8JYy5DFSWz4x1OW0arnxlziu5Lw== + dependencies: + "@jest/core" "^26.2.2" + "@jest/test-result" "^26.2.0" + "@jest/types" "^26.2.0" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + import-local "^3.0.2" + is-ci "^2.0.0" + jest-config "^26.2.2" + jest-util "^26.2.0" + jest-validate "^26.2.0" + prompts "^2.0.1" + yargs "^15.3.1" + +jest-config@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.2.2.tgz#f3ebc7e2bc3f49de8ed3f8007152f345bb111917" + integrity sha512-2lhxH0y4YFOijMJ65usuf78m7+9/8+hAb1PZQtdRdgnQpAb4zP6KcVDDktpHEkspBKnc2lmFu+RQdHukUUbiTg== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^26.2.2" + "@jest/types" "^26.2.0" + babel-jest "^26.2.2" + chalk "^4.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + jest-environment-jsdom "^26.2.0" + jest-environment-node "^26.2.0" + jest-get-type "^26.0.0" + jest-jasmine2 "^26.2.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.2.2" + jest-util "^26.2.0" + jest-validate "^26.2.0" + micromatch "^4.0.2" + pretty-format "^26.2.0" + +jest-diff@^25.2.1: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" + integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== + dependencies: + chalk "^3.0.0" + diff-sequences "^25.2.6" + jest-get-type "^25.2.6" + pretty-format "^25.5.0" + +jest-diff@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.2.0.tgz#dee62c771adbb23ae585f3f1bd289a6e8ef4f298" + integrity sha512-Wu4Aopi2nzCsHWLBlD48TgRy3Z7OsxlwvHNd1YSnHc7q1NJfrmyCPoUXrTIrydQOG5ApaYpsAsdfnMbJqV1/wQ== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.0.0" + jest-get-type "^26.0.0" + pretty-format "^26.2.0" + +jest-docblock@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== + dependencies: + detect-newline "^3.0.0" + +jest-each@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.2.0.tgz#aec8efa01d072d7982c900e74940863385fa884e" + integrity sha512-gHPCaho1twWHB5bpcfnozlc6mrMi+VAewVPNgmwf81x2Gzr6XO4dl+eOrwPWxbkYlgjgrYjWK2xgKnixbzH3Ew== + dependencies: + "@jest/types" "^26.2.0" + chalk "^4.0.0" + jest-get-type "^26.0.0" + jest-util "^26.2.0" + pretty-format "^26.2.0" + +jest-environment-jsdom@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.2.0.tgz#6443a6f3569297dcaa4371dddf93acaf167302dc" + integrity sha512-sDG24+5M4NuIGzkI3rJW8XUlrpkvIdE9Zz4jhD8OBnVxAw+Y1jUk9X+lAOD48nlfUTlnt3lbAI3k2Ox+WF3S0g== + dependencies: + "@jest/environment" "^26.2.0" + "@jest/fake-timers" "^26.2.0" + "@jest/types" "^26.2.0" + "@types/node" "*" + jest-mock "^26.2.0" + jest-util "^26.2.0" + jsdom "^16.2.2" + +jest-environment-node@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.2.0.tgz#fee89e06bdd4bed3f75ee2978d73ede9bb57a681" + integrity sha512-4M5ExTYkJ19efBzkiXtBi74JqKLDciEk4CEsp5tTjWGYMrlKFQFtwIVG3tW1OGE0AlXhZjuHPwubuRYY4j4uOw== + dependencies: + "@jest/environment" "^26.2.0" + "@jest/fake-timers" "^26.2.0" + "@jest/types" "^26.2.0" + "@types/node" "*" + jest-mock "^26.2.0" + jest-util "^26.2.0" + +jest-get-type@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" + integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== + +jest-get-type@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.0.0.tgz#381e986a718998dbfafcd5ec05934be538db4039" + integrity sha512-zRc1OAPnnws1EVfykXOj19zo2EMw5Hi6HLbFCSjpuJiXtOWAYIjNsHVSbpQ8bDX7L5BGYGI8m+HmKdjHYFF0kg== + +jest-haste-map@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.2.2.tgz#6d4267b1903854bfdf6a871419f35a82f03ae71e" + integrity sha512-3sJlMSt+NHnzCB+0KhJ1Ut4zKJBiJOlbrqEYNdRQGlXTv8kqzZWjUKQRY3pkjmlf+7rYjAV++MQ4D6g4DhAyOg== + dependencies: + "@jest/types" "^26.2.0" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.2.0" + jest-util "^26.2.0" + jest-worker "^26.2.1" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.1.2" + +jest-jasmine2@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.2.2.tgz#d82b1721fac2b153a4f8b3f0c95e81e702812de2" + integrity sha512-Q8AAHpbiZMVMy4Hz9j1j1bg2yUmPa1W9StBvcHqRaKa9PHaDUMwds8LwaDyzP/2fkybcTQE4+pTMDOG9826tEw== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.2.0" + "@jest/source-map" "^26.1.0" + "@jest/test-result" "^26.2.0" + "@jest/types" "^26.2.0" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^26.2.0" + is-generator-fn "^2.0.0" + jest-each "^26.2.0" + jest-matcher-utils "^26.2.0" + jest-message-util "^26.2.0" + jest-runtime "^26.2.2" + jest-snapshot "^26.2.2" + jest-util "^26.2.0" + pretty-format "^26.2.0" + throat "^5.0.0" + +jest-leak-detector@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.2.0.tgz#073ee6d8db7a9af043e7ce99d8eea17a4fb0cc50" + integrity sha512-aQdzTX1YiufkXA1teXZu5xXOJgy7wZQw6OJ0iH5CtQlOETe6gTSocaYKUNui1SzQ91xmqEUZ/WRavg9FD82rtQ== + dependencies: + jest-get-type "^26.0.0" + pretty-format "^26.2.0" + +jest-matcher-utils@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.2.0.tgz#b107af98c2b8c557ffd46c1adf06f794aa52d622" + integrity sha512-2cf/LW2VFb3ayPHrH36ZDjp9+CAeAe/pWBAwsV8t3dKcrINzXPVxq8qMWOxwt5BaeBCx4ZupVGH7VIgB8v66vQ== + dependencies: + chalk "^4.0.0" + jest-diff "^26.2.0" + jest-get-type "^26.0.0" + pretty-format "^26.2.0" + +jest-message-util@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.2.0.tgz#757fbc1323992297092bb9016a71a2eb12fd22ea" + integrity sha512-g362RhZaJuqeqG108n1sthz5vNpzTNy926eNDszo4ncRbmmcMRIUAZibnd6s5v2XSBCChAxQtCoN25gnzp7JbQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.2.0" + "@types/stack-utils" "^1.0.1" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + slash "^3.0.0" + stack-utils "^2.0.2" + +jest-mock@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.2.0.tgz#a1b3303ab38c34aa1dbbc16ab57cdc1a59ed50d1" + integrity sha512-XeC7yWtWmWByoyVOHSsE7NYsbXJLtJNgmhD7z4MKumKm6ET0si81bsSLbQ64L5saK3TgsHo2B/UqG5KNZ1Sp/Q== + dependencies: + "@jest/types" "^26.2.0" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + +jest-resolve-dependencies@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.2.2.tgz#2ad3cd9281730e9a5c487cd846984c5324e47929" + integrity sha512-S5vufDmVbQXnpP7435gr710xeBGUFcKNpNswke7RmFvDQtmqPjPVU/rCeMlEU0p6vfpnjhwMYeaVjKZAy5QYJA== + dependencies: + "@jest/types" "^26.2.0" + jest-regex-util "^26.0.0" + jest-snapshot "^26.2.2" + +jest-resolve@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.2.2.tgz#324a20a516148d61bffa0058ed0c77c510ecfd3e" + integrity sha512-ye9Tj/ILn/0OgFPE/3dGpQPUqt4dHwIocxt5qSBkyzxQD8PbL0bVxBogX2FHxsd3zJA7V2H/cHXnBnNyyT9YoQ== + dependencies: + "@jest/types" "^26.2.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.2.0" + read-pkg-up "^7.0.1" + resolve "^1.17.0" + slash "^3.0.0" + +jest-runner@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.2.2.tgz#6d03d057886e9c782e10b2cf37443f902fe0e39e" + integrity sha512-/qb6ptgX+KQ+aNMohJf1We695kaAfuu3u3ouh66TWfhTpLd9WbqcF6163d/tMoEY8GqPztXPLuyG0rHRVDLxCA== + dependencies: + "@jest/console" "^26.2.0" + "@jest/environment" "^26.2.0" + "@jest/test-result" "^26.2.0" + "@jest/types" "^26.2.0" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.7.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-config "^26.2.2" + jest-docblock "^26.0.0" + jest-haste-map "^26.2.2" + jest-leak-detector "^26.2.0" + jest-message-util "^26.2.0" + jest-resolve "^26.2.2" + jest-runtime "^26.2.2" + jest-util "^26.2.0" + jest-worker "^26.2.1" + source-map-support "^0.5.6" + throat "^5.0.0" + +jest-runtime@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.2.2.tgz#2480ff79320680a643031dd21998d7c63d83ab68" + integrity sha512-a8VXM3DxCDnCIdl9+QucWFfQ28KdqmyVFqeKLigHdErtsx56O2ZIdQkhFSuP1XtVrG9nTNHbKxjh5XL1UaFDVQ== + dependencies: + "@jest/console" "^26.2.0" + "@jest/environment" "^26.2.0" + "@jest/fake-timers" "^26.2.0" + "@jest/globals" "^26.2.0" + "@jest/source-map" "^26.1.0" + "@jest/test-result" "^26.2.0" + "@jest/transform" "^26.2.2" + "@jest/types" "^26.2.0" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-config "^26.2.2" + jest-haste-map "^26.2.2" + jest-message-util "^26.2.0" + jest-mock "^26.2.0" + jest-regex-util "^26.0.0" + jest-resolve "^26.2.2" + jest-snapshot "^26.2.2" + jest-util "^26.2.0" + jest-validate "^26.2.0" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.3.1" + +jest-serializer@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.2.0.tgz#92dcae5666322410f4bf50211dd749274959ddac" + integrity sha512-V7snZI9IVmyJEu0Qy0inmuXgnMWDtrsbV2p9CRAcmlmPVwpC2ZM8wXyYpiugDQnwLHx0V4+Pnog9Exb3UO8M6Q== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + +jest-snapshot@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.2.2.tgz#9d2eda083a4a1017b157e351868749bd63211799" + integrity sha512-NdjD8aJS7ePu268Wy/n/aR1TUisG0BOY+QOW4f6h46UHEKOgYmmkvJhh2BqdVZQ0BHSxTMt04WpCf9njzx8KtA== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^26.2.0" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.2.0" + graceful-fs "^4.2.4" + jest-diff "^26.2.0" + jest-get-type "^26.0.0" + jest-haste-map "^26.2.2" + jest-matcher-utils "^26.2.0" + jest-message-util "^26.2.0" + jest-resolve "^26.2.2" + natural-compare "^1.4.0" + pretty-format "^26.2.0" + semver "^7.3.2" + +jest-util@26.x, jest-util@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.2.0.tgz#0597d2a27c559340957609f106c408c17c1d88ac" + integrity sha512-YmDwJxLZ1kFxpxPfhSJ0rIkiZOM0PQbRcfH0TzJOhqCisCAsI1WcmoQqO83My9xeVA2k4n+rzg2UuexVKzPpig== + dependencies: + "@jest/types" "^26.2.0" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + +jest-validate@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.2.0.tgz#97fedf3e7984b7608854cbf925b9ca6ebcbdb78a" + integrity sha512-8XKn3hM6VIVmLNuyzYLCPsRCT83o8jMZYhbieh4dAyKLc4Ypr36rVKC+c8WMpWkfHHpGnEkvWUjjIAyobEIY/Q== + dependencies: + "@jest/types" "^26.2.0" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.0.0" + leven "^3.1.0" + pretty-format "^26.2.0" + +jest-watcher@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.2.0.tgz#45bdf2fecadd19c0a501f3b071a474dca636825b" + integrity sha512-674Boco4Joe0CzgKPL6K4Z9LgyLx+ZvW2GilbpYb8rFEUkmDGgsZdv1Hv5rxsRpb1HLgKUOL/JfbttRCuFdZXQ== + dependencies: + "@jest/test-result" "^26.2.0" + "@jest/types" "^26.2.0" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^26.2.0" + string-length "^4.0.1" + +jest-worker@^26.2.1: + version "26.2.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.2.1.tgz#5d630ab93f666b53f911615bc13e662b382bd513" + integrity sha512-+XcGMMJDTeEGncRb5M5Zq9P7K4sQ1sirhjdOxsN1462h6lFo9w59bl2LVQmdGEEeU3m+maZCkS2Tcc9SfCHO4A== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest@^26.1.0: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.2.2.tgz#a022303887b145147204c5f66e6a5c832333c7e7" + integrity sha512-EkJNyHiAG1+A8pqSz7cXttoVa34hOEzN/MrnJhYnfp5VHxflVcf2pu3oJSrhiy6LfIutLdWo+n6q63tjcoIeig== + dependencies: + "@jest/core" "^26.2.2" + import-local "^3.0.2" + jest-cli "^26.2.2" + +jmespath@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" + integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc= + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@^16.2.2: + version "16.3.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.3.0.tgz#75690b7dac36c67be49c336dcd7219bbbed0810c" + integrity sha512-zggeX5UuEknpdZzv15+MS1dPYG0J/TftiiNunOeNxSl3qr8Z6cIlQpN0IdJa44z9aFxZRIVqRncvEhQ7X5DtZg== + dependencies: + abab "^2.0.3" + acorn "^7.1.1" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.2.0" + data-urls "^2.0.0" + decimal.js "^10.2.0" + domexception "^2.0.1" + escodegen "^1.14.1" + html-encoding-sniffer "^2.0.1" + is-potential-custom-element-name "^1.0.0" + nwsapi "^2.2.0" + parse5 "5.1.1" + request "^2.88.2" + request-promise-native "^1.0.8" + saxes "^5.0.0" + symbol-tree "^3.2.4" + tough-cookie "^3.0.1" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + ws "^7.2.3" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-diff@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/json-diff/-/json-diff-0.5.4.tgz#7bc8198c441756632aab66c7d9189d365a7a035a" + integrity sha512-q5Xmx9QXNOzOzIlMoYtLrLiu4Jl/Ce2bn0CNcv54PhyH89CI4GWlGVDye8ei2Ijt9R3U+vsWPsXpLUNob8bs8Q== + dependencies: + cli-color "~0.1.6" + difflib "~0.2.1" + dreamopt "~0.6.0" + +json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json5@2.x, json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +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@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + +jsonschema@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" + integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +lazystream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= + dependencies: + readable-stream "^2.0.5" + +lerna@^3.22.1: + version "3.22.1" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.22.1.tgz#82027ac3da9c627fd8bf02ccfeff806a98e65b62" + integrity sha512-vk1lfVRFm+UuEFA7wkLKeSF7Iz13W+N/vFd48aW2yuS7Kv0RbNm2/qcDPV863056LMfkRlsEe+QYOw3palj5Lg== + dependencies: + "@lerna/add" "3.21.0" + "@lerna/bootstrap" "3.21.0" + "@lerna/changed" "3.21.0" + "@lerna/clean" "3.21.0" + "@lerna/cli" "3.18.5" + "@lerna/create" "3.22.0" + "@lerna/diff" "3.21.0" + "@lerna/exec" "3.21.0" + "@lerna/import" "3.22.0" + "@lerna/info" "3.21.0" + "@lerna/init" "3.21.0" + "@lerna/link" "3.21.0" + "@lerna/list" "3.21.0" + "@lerna/publish" "3.22.1" + "@lerna/run" "3.21.0" + "@lerna/version" "3.22.1" + import-local "^2.0.0" + npmlog "^4.1.2" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== + dependencies: + leven "^3.1.0" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +lint-staged@^10.2.11: + version "10.2.11" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.2.11.tgz#713c80877f2dc8b609b05bc59020234e766c9720" + integrity sha512-LRRrSogzbixYaZItE2APaS4l2eJMjjf5MbclRZpLJtcQJShcvUzKXsNeZgsLIZ0H0+fg2tL4B59fU9wHIHtFIA== + dependencies: + chalk "^4.0.0" + cli-truncate "2.1.0" + commander "^5.1.0" + cosmiconfig "^6.0.0" + debug "^4.1.1" + dedent "^0.7.0" + enquirer "^2.3.5" + execa "^4.0.1" + listr2 "^2.1.0" + log-symbols "^4.0.0" + micromatch "^4.0.2" + normalize-path "^3.0.0" + please-upgrade-node "^3.2.0" + string-argv "0.3.1" + stringify-object "^3.3.0" + +listr2@^2.1.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-2.4.1.tgz#006fc94ae77b3195403cbf3a4a563e2d6366224f" + integrity sha512-8pYsCZCztr5+KAjReLyBeGhLV0vaQ2Du/eMe/ux9QAfQl7efiWejM1IWjALh0zHIRYuIbhQ8N2KztZ4ci56pnQ== + dependencies: + chalk "^4.1.0" + cli-truncate "^2.1.0" + figures "^3.2.0" + indent-string "^4.0.0" + log-update "^4.0.0" + p-map "^4.0.0" + rxjs "^6.6.0" + through "^2.3.8" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +load-json-file@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" + integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== + dependencies: + graceful-fs "^4.1.15" + parse-json "^4.0.0" + pify "^4.0.1" + strip-bom "^3.0.0" + type-fest "^0.3.0" + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.set@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" + integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash.template@^4.0.2, lodash.template@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + +lodash.union@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.2.1: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + +log-symbols@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" + integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== + dependencies: + chalk "^4.0.0" + +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +macos-release@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.4.1.tgz#64033d0ec6a5e6375155a74b1a1eba8e509820ac" + integrity sha512-H/QHeBIN1fIGJX517pvK8IEK53yQOW7YcEI55oYtgjDdoCQQz7eJS94qt5kNrscReEyuD/JcdFCm2XBEcGOITg== + +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@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.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.x: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== + dependencies: + agentkeepalive "^3.4.1" + cacache "^12.0.0" + http-cache-semantics "^3.8.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + node-fetch-npm "^2.0.2" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= + +map-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5" + integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g== + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +md5@^2.2.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" + integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== + dependencies: + charenc "0.0.2" + crypt "0.0.2" + is-buffer "~1.1.6" + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^3.3.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +meow@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" + integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist "^1.1.3" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + +meow@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-7.0.1.tgz#1ed4a0a50b3844b451369c48362eb0515f04c1dc" + integrity sha512-tBKIQqVrAHqwit0vfuFPY3LlzJYkEOFyKa3bPgxzNl6q/RtN8KQ+ALYEASYuFayzSAsjlhXj/JZ10rH85Q6TUw== + dependencies: + "@types/minimist" "^1.2.0" + arrify "^2.0.1" + camelcase "^6.0.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "^4.0.2" + normalize-package-data "^2.5.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.13.1" + yargs-parser "^18.1.3" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.2.3: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +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== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@>=3.0, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + +minimist-options@^4.0.2: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= + dependencies: + mkdirp "*" + +mkdirp@*, mkdirp@1.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +modify-values@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.0.0, ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +multimatch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" + integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA== + dependencies: + array-differ "^2.0.3" + array-union "^1.0.2" + arrify "^1.0.1" + minimatch "^3.0.4" + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mz@^2.5.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nan@^2.12.1: + version "2.14.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +netmask@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" + integrity sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU= + +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-fetch-npm@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" + integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg== + dependencies: + encoding "^0.1.11" + json-parse-better-errors "^1.0.0" + safe-buffer "^5.1.1" + +node-fetch@^2.3.0, node-fetch@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" + integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== + +node-gyp@^5.0.2: + version "5.1.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e" + integrity sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.1.2" + request "^2.88.0" + rimraf "^2.6.3" + semver "^5.7.1" + tar "^4.4.12" + which "^1.3.1" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-notifier@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-7.0.2.tgz#3a70b1b70aca5e919d0b1b022530697466d9c675" + integrity sha512-ux+n4hPVETuTL8+daJXTOC6uKLgMsl1RYfFv7DKRzyvzBapqco0rZZ9g72ZN8VS6V+gvNYHYa/ofcCY8fkJWsA== + dependencies: + growly "^1.3.0" + is-wsl "^2.2.0" + semver "^7.3.2" + shellwords "^0.1.1" + uuid "^8.2.0" + which "^2.0.2" + +node-releases@^1.1.58: + version "1.1.60" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084" + integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA== + +nopt@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +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@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-lifecycle@^3.1.2: + version "3.1.5" + resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309" + integrity sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g== + dependencies: + byline "^5.0.0" + graceful-fs "^4.1.15" + node-gyp "^5.0.2" + resolve-from "^4.0.0" + slide "^1.1.6" + uid-number "0.0.6" + umask "^1.1.0" + which "^1.3.1" + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== + dependencies: + hosted-git-info "^2.7.1" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" + +npm-packlist@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + +npm-pick-manifest@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" + integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== + dependencies: + figgy-pudding "^3.5.1" + npm-package-arg "^6.0.0" + semver "^5.4.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== + +object-keys@^1.0.11, object-keys@^1.0.12, 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-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.getownpropertydescriptors@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +octokit-pagination-methods@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" + integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== + +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 sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.1.tgz#5c8016847b0d67fcedb7eef254751cfcdc7e9418" + integrity sha512-ZpZpjcJeugQfWsfyQlshVoowIIQ1qBGSVll4rfDq6JJVO//fesjoX808hXWfBjY+ROZgpKDI5TRSRBSoJiZ8eg== + dependencies: + mimic-fn "^2.1.0" + +opencollective-postinstall@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" + integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-name@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" + integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== + dependencies: + macos-release "^2.2.0" + windows-release "^3.1.0" + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4, osenv@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-each-series@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" + integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" + integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco= + dependencies: + p-reduce "^1.0.0" + +p-map@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +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-pipe@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" + integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k= + +p-queue@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-4.0.0.tgz#ed0eee8798927ed6f2c2f5f5b77fdb2061a5d346" + integrity sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg== + dependencies: + eventemitter3 "^3.1.0" + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +p-waterfall@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00" + integrity sha1-ftlLPOszMngjU69qrhGqn8I1uwA= + dependencies: + p-reduce "^1.0.0" + +pac-proxy-agent@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz#115b1e58f92576cac2eba718593ca7b0e37de2ad" + integrity sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ== + dependencies: + agent-base "^4.2.0" + debug "^4.1.1" + get-uri "^2.0.0" + http-proxy-agent "^2.1.0" + https-proxy-agent "^3.0.0" + pac-resolver "^3.0.0" + raw-body "^2.2.0" + socks-proxy-agent "^4.0.1" + +pac-resolver@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26" + integrity sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA== + dependencies: + co "^4.6.0" + degenerator "^1.0.4" + ip "^1.1.5" + netmask "^1.0.6" + thunkify "^2.1.2" + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-github-repo-url@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" + integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A= + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.1.tgz#7cfe35c1ccd641bce3981467e6c2ece61b3b3878" + integrity sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + lines-and-columns "^1.1.6" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parse-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.1.tgz#0ec769704949778cb3b8eda5e994c32073a1adff" + integrity sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA== + dependencies: + is-ssh "^1.3.0" + protocols "^1.4.0" + +parse-url@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.1.tgz#99c4084fc11be14141efa41b3d117a96fcb9527f" + integrity sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg== + dependencies: + is-ssh "^1.3.0" + normalize-url "^3.3.0" + parse-path "^4.0.0" + protocols "^1.4.0" + +parse5@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +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 sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +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== + +pbkdf2@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + 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 sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +please-upgrade-node@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== + dependencies: + semver-compare "^1.0.0" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prettier@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" + integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg== + +pretty-format@^25.2.1, pretty-format@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" + integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== + dependencies: + "@jest/types" "^25.5.0" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + +pretty-format@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.2.0.tgz#83ecc8d7de676ff224225055e72bd64821cec4f1" + integrity sha512-qi/8IuBu2clY9G7qCXgCdD1Bf9w+sXakdHTRToknzMtVy0g7c4MBWaZy7MfB7ndKZovRO6XRwJiAYqq+MC7SDA== + dependencies: + "@jest/types" "^26.2.0" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + +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@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= + dependencies: + err-code "^1.0.0" + retry "^0.10.0" + +promptly@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/promptly/-/promptly-3.0.3.tgz#e178f722e73d82c60d019462044bccfdd9872f42" + integrity sha512-EWnzOsxVKUjqKeE6SStH1/cO4+DE44QolaoJ4ojGd9z6pcNkpgfJKr1ncwxrOFHSTIzoudo7jG8y0re30/LO1g== + dependencies: + pify "^3.0.0" + read "^1.0.4" + +prompts@^2.0.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" + integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.4" + +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= + dependencies: + read "1" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + +protocols@^1.1.0, protocols@^1.4.0: + version "1.4.7" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" + integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg== + +protoduck@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" + integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== + dependencies: + genfun "^5.0.0" + +proxy-agent@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.1.1.tgz#7e04e06bf36afa624a1540be247b47c970bd3014" + integrity sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw== + dependencies: + agent-base "^4.2.0" + debug "4" + http-proxy-agent "^2.1.0" + https-proxy-agent "^3.0.0" + lru-cache "^5.1.1" + pac-proxy-agent "^3.0.1" + proxy-from-env "^1.0.0" + socks-proxy-agent "^4.0.1" + +proxy-from-env@^1.0.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== + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +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" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +raw-body@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" + integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== + dependencies: + bytes "3.1.0" + http-errors "1.7.3" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-is@^16.12.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +read-cmd-shim@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" + integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== + dependencies: + graceful-fs "^4.1.2" + +"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13: + version "2.1.1" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" + integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== + dependencies: + glob "^7.1.1" + json-parse-better-errors "^1.0.1" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.2" + +read-package-tree@^5.1.6: + version "5.3.1" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== + dependencies: + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +read@1, read@^1.0.4, read@~1.0.1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + dependencies: + mute-stream "~0.0.4" + +"readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@^2.3.7, 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@1.1.x: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +"readable-stream@2 || 3", readable-stream@^3.0.2, 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" + +readdir-scoped-modules@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= + dependencies: + indent-string "^3.0.0" + strip-indent "^2.0.0" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== + +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpp@^3.0.0, regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + +regexpu-core@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.8: + version "1.0.9" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== + dependencies: + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.88.0, request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.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 sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.10.0, resolve@^1.17.0, resolve@^1.3.2: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +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" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +run-async@^2.2.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-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rxjs@^6.4.0, rxjs@^6.6.0: + version "6.6.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.2.tgz#8096a7ac03f2cc4fe5860ef6e572810d9e01c0d2" + integrity sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg== + dependencies: + tslib "^1.9.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, 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@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +sax@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + integrity sha1-e45lYZCyKOgaZq6nSEgNgozS03o= + +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== + +saxes@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= + +semver-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" + integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== + +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@7.x, semver@^7.2.1, semver@^7.2.2, semver@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +serialize-javascript@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" + integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== + dependencies: + randombytes "^2.1.0" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.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 sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +sisteransi@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slide@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= + +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +socks-proxy-agent@^4.0.0, socks-proxy-agent@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" + +socks@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.19, source-map-support@^0.5.6, source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +split2@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" + integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== + dependencies: + through2 "^2.0.2" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.0, ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +stack-utils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593" + integrity sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg== + dependencies: + escape-string-regexp "^2.0.0" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.5.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +string-argv@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" + integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + +string-length@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" + integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.trimend@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimstart@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string_decoder@^1.0.0, 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@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +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" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strong-log-transformer@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" + integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== + dependencies: + duplexer "^0.1.1" + minimist "^1.2.0" + through "^2.3.4" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +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.0.0, supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" + integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +table@^5.2.3, table@^5.4.6: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tar-stream@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.3.tgz#1e2022559221b7866161660f118255e20fa79e41" + integrity sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA== + dependencies: + bl "^4.0.1" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= + +temp-write@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492" + integrity sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI= + dependencies: + graceful-fs "^4.1.2" + is-stream "^1.1.0" + make-dir "^1.0.0" + pify "^3.0.0" + temp-dir "^1.0.0" + uuid "^3.0.1" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser-webpack-plugin@^1.4.3: + version "1.4.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz#2c63544347324baafa9a56baaddf1634c8abfc2f" + integrity sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^3.1.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@^4.1.2: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.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== + +through2@^2.0.0, through2@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" + integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== + dependencies: + inherits "^2.0.4" + readable-stream "2 || 3" + +through@2, "through@>=2.2.7 <3", through@^2.3.4, 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 sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +thunkify@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" + integrity sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0= + +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + +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" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +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" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tough-cookie@^2.3.3, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tough-cookie@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" + integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== + dependencies: + ip-regex "^2.1.0" + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +tr46@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" + integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== + dependencies: + punycode "^2.1.1" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= + +trim-newlines@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" + integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== + +trim-off-newlines@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" + integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= + +ts-jest@^26.1.4: + version "26.1.4" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.1.4.tgz#87d41a96016a8efe4b8cc14501d3785459af6fa6" + integrity sha512-Nd7diUX6NZWfWq6FYyvcIPR/c7GbEF75fH1R6coOp3fbNzbRJBZZAn0ueVS0r8r9ral1VcrpneAFAwB3TsVS1Q== + dependencies: + bs-logger "0.x" + buffer-from "1.x" + fast-json-stable-stringify "2.x" + jest-util "26.x" + json5 "2.x" + lodash.memoize "4.x" + make-error "1.x" + mkdirp "1.x" + semver "7.x" + yargs-parser "18.x" + +tslib@^1.8.1, tslib@^1.9.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== + dependencies: + tslib "^1.8.1" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + +type-fest@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@^3.9.7: + version "3.9.7" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== + +uglify-js@^3.1.4: + version "3.10.1" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.10.1.tgz#dd14767eb7150de97f2573a5ff210db14fffe4ad" + integrity sha512-RjxApKkrPJB6kjJxQS3iZlf///REXWYxYJxO/MpmlQzVkDWVI3PSnCBWezMecmTU/TRkNxrl8bmsfFQCp+LO+Q== + +uid-number@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= + +umask@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" + integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universal-user-agent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557" + integrity sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg== + dependencies: + os-name "^3.1.0" + +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1, upath@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + integrity sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +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 sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= + dependencies: + object.getownpropertydescriptors "^2.0.3" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +uuid@^3.0.1, uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.2.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" + integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== + +v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" + integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== + +v8-to-istanbul@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6" + integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +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 sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + dependencies: + builtins "^1.0.3" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + +watchpack-chokidar2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" + integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" + integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.0" + +wcwidth@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +webpack-cli@^3.3.12: + version "3.3.12" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" + integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== + dependencies: + chalk "^2.4.2" + cross-spawn "^6.0.5" + enhanced-resolve "^4.1.1" + findup-sync "^3.0.0" + global-modules "^2.0.0" + import-local "^2.0.0" + interpret "^1.4.0" + loader-utils "^1.4.0" + supports-color "^6.1.0" + v8-compile-cache "^2.1.1" + yargs "^13.3.2" + +webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.44.0: + version "4.44.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.1.tgz#17e69fff9f321b8f117d1fda714edfc0b939cc21" + integrity sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.3.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whatwg-url@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.1.0.tgz#c628acdcf45b82274ce7281ee31dd3c839791771" + integrity sha512-vEIkwNi9Hqt4TV9RdnaBPNt+E2Sgmo3gePebCRgZ1R7g6d23+53zCTnuB0amKI4AXq6VM8jj2DUAa0S1vjJxkw== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^2.0.2" + webidl-conversions "^5.0.0" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which-pm-runs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= + +which@^1.2.14, which@^1.2.9, which@^1.3.1: + 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.1, 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" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +windows-release@^3.1.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.1.tgz#cb4e80385f8550f709727287bf71035e209c4ace" + integrity sha512-Pngk/RDCaI/DkuHPlGTdIkDiTAnAkyMjoQMZqRsxydNl1qGXNIoZrB7RK8g53F2tEgQBMqQJHQdYZuQEEAu54A== + dependencies: + execa "^1.0.0" + +word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@>=0.0.2, wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.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 sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +write-json-file@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" + integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + pify "^3.0.0" + sort-keys "^2.0.0" + write-file-atomic "^2.0.0" + +write-json-file@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" + integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.15" + make-dir "^2.1.0" + pify "^4.0.1" + sort-keys "^2.0.0" + write-file-atomic "^2.4.2" + +write-pkg@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21" + integrity sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw== + dependencies: + sort-keys "^2.0.0" + write-json-file "^2.2.0" + +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + +ws@^7.2.3: + version "7.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" + integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +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 sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xregexp@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" + integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yaml@^1.10.0, yaml@^1.7.2: + version "1.10.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" + integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== + +yargs-parser@18.x, yargs-parser@^18.1.2, yargs-parser@^18.1.3: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^15.0.1: + version "15.0.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" + integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@^14.2.2: + version "14.2.3" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" + integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== + dependencies: + cliui "^5.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^15.0.1" + +yargs@^15.3.1, yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +zip-stream@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-3.0.1.tgz#cb8db9d324a76c09f9b76b31a12a48638b0b9708" + integrity sha512-r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ== + dependencies: + archiver-utils "^2.1.0" + compress-commons "^3.0.0" + readable-stream "^3.6.0" From 65ee77e5a3ff43f43e4ee60f5819540664cc73c2 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 4 Aug 2020 17:50:05 -0400 Subject: [PATCH 003/481] Adding lint script --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 3668db33dd..3450d6e052 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "packages/*" ], "scripts": { + "lint": "eslint . --fix --ext .js,.ts", "version": "lerna version", "publish": "lerna publish", "clean": "lerna run clean", From 143e0e82a8baeac64222d1c8b4bc0d2fc4b37a7a Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 4 Aug 2020 17:50:57 -0400 Subject: [PATCH 004/481] Adding GitHub workflow --- .github/workflows/ci.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000..2b5d573224 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,32 @@ +# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: Node.js CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [10.x, 12.x, 14.x] + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: Install dependencies + run: yarn --frozen-lockfile + - name: Lint + run: yarn lint + - name: Test + run: yarn test From 7077f114af6e206c2a76983b3c9472a2637d0824 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 4 Aug 2020 17:55:48 -0400 Subject: [PATCH 005/481] Adding GitHub workflow badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 47a478af56..908d9b26c0 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# serverless-stack +# serverless-stack [![Build Status](https://github.com/serverless-stack/serverless-stack/workflows/ci/badge.svg)](https://github.com/serverless-stack/serverless-stack/actions) From 18addba12489ac1e4a8620615da3fa50ab61ee8d Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 4 Aug 2020 17:56:48 -0400 Subject: [PATCH 006/481] Updating workflow name --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2b5d573224..e346e1cd92 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,7 +1,7 @@ # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions -name: Node.js CI +name: CI on: push: From 04f2cd7a533a37b6ae8b019cb71879a81f96e2f4 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 4 Aug 2020 17:57:52 -0400 Subject: [PATCH 007/481] Fixing badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 908d9b26c0..c568d419d4 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# serverless-stack [![Build Status](https://github.com/serverless-stack/serverless-stack/workflows/ci/badge.svg)](https://github.com/serverless-stack/serverless-stack/actions) +# serverless-stack [![Build Status](https://github.com/serverless-stack/serverless-stack/workflows/CI/badge.svg)](https://github.com/serverless-stack/serverless-stack/actions) From 2e7765df0b8290bd8669c3e7dfe2b7419a34252c Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 4 Aug 2020 19:49:42 -0400 Subject: [PATCH 008/481] Updating ci commands --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e346e1cd92..cbe50a574e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,6 +27,6 @@ jobs: - name: Install dependencies run: yarn --frozen-lockfile - name: Lint - run: yarn lint + run: yarn run lint - name: Test - run: yarn test + run: yarn run test From cb205e0d91a46e2a104aa63ef2014493a533db69 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 4 Aug 2020 19:52:03 -0400 Subject: [PATCH 009/481] Updating version --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/resources/package.json | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index 0fa3dd6103..6e15b92cbc 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.0" + "version": "0.0.1" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 8e9d07ae66..2058e1a964 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "name": "@serverless-stack/cli", - "version": "0.0.0", - "description": "An extension of the AWS CDK that works with Serverless Framework projects.", + "version": "0.0.1", + "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "build": "webpack --config webpack.config.js", "clean": "rm -rf scripts/wrapper/dist", @@ -36,7 +36,7 @@ "@babel/core": "^7.10.5", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/resources": "^0.0.0", + "@serverless-stack/resources": "^0.0.1", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "aws-cdk": "^1.54.0", diff --git a/packages/resources/package.json b/packages/resources/package.json index cb15dc5283..9f42c6de21 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.0", + "version": "0.0.1", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From f1206f58213dea506d66f21ac63579ce1e983556 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 4 Aug 2020 19:52:58 -0400 Subject: [PATCH 010/481] Fixing Husky config --- package.json | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 3450d6e052..c638b8c05f 100644 --- a/package.json +++ b/package.json @@ -30,12 +30,10 @@ }, "lint-staged": { "*.{js,ts,css,json,md}": [ - "prettier --write", - "git add" + "prettier --write" ], "*.{js,ts}": [ - "eslint --fix", - "git add" + "eslint --fix" ] } } From 22cce474cad0ff3533b872a8605a4957bfd55242 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 4 Aug 2020 20:01:22 -0400 Subject: [PATCH 011/481] Adding npmignore --- .npmignore | 6 ++++++ packages/cli/package.json | 3 ++- packages/resources/package.json | 3 ++- 3 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 .npmignore diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000000..f5b2fd56b1 --- /dev/null +++ b/.npmignore @@ -0,0 +1,6 @@ +node_modules +tests +*.test.js +yarn.lock +yarn-error.log +.travis.yml diff --git a/packages/cli/package.json b/packages/cli/package.json index 2058e1a964..6b80c2d2a0 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -52,5 +52,6 @@ "@serverless-stack/resources": "^0.0.0", "webpack": "^4.44.0", "webpack-cli": "^3.3.12" - } + }, + "gitHead": "f1206f58213dea506d66f21ac63579ce1e983556" } diff --git a/packages/resources/package.json b/packages/resources/package.json index 9f42c6de21..0fa4abd65d 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -24,5 +24,6 @@ "devDependencies": { "@types/node": "^14.0.27", "typescript": "^3.9.7" - } + }, + "gitHead": "f1206f58213dea506d66f21ac63579ce1e983556" } From bc67a48a853cec0d66cd8a01f3410443d2ed330a Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 4 Aug 2020 20:05:27 -0400 Subject: [PATCH 012/481] Renaming scripts --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index c638b8c05f..347f1b42a2 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,8 @@ ], "scripts": { "lint": "eslint . --fix --ext .js,.ts", - "version": "lerna version", - "publish": "lerna publish", + "npm-version": "lerna version", + "npm-publish": "lerna publish", "clean": "lerna run clean", "prepare": "lerna run prepare", "test": "lerna run test --stream --scope=@serverless-stack/cli" From bba5deafc8583b22f81611c002830341d480fc83 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 4 Aug 2020 20:05:42 -0400 Subject: [PATCH 013/481] v0.0.2 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/resources/package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lerna.json b/lerna.json index 6e15b92cbc..d2504cb80f 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.1" + "version": "0.0.2" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 6b80c2d2a0..ff89f9eea8 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.0.1", + "version": "0.0.2", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "build": "webpack --config webpack.config.js", @@ -36,7 +36,7 @@ "@babel/core": "^7.10.5", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/resources": "^0.0.1", + "@serverless-stack/resources": "^0.0.2", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "aws-cdk": "^1.54.0", diff --git a/packages/resources/package.json b/packages/resources/package.json index 0fa4abd65d..2a754dbbf4 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.1", + "version": "0.0.2", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 0cec627dcc4a581a51895fd0782b6115c88e3e50 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 4 Aug 2020 20:17:12 -0400 Subject: [PATCH 014/481] Fixing npm ignore --- .npmignore => packages/cli/.npmignore | 0 packages/cli/package.json | 3 +-- packages/resources/.npmignore | 6 ++++++ packages/resources/package.json | 3 +-- 4 files changed, 8 insertions(+), 4 deletions(-) rename .npmignore => packages/cli/.npmignore (100%) create mode 100644 packages/resources/.npmignore diff --git a/.npmignore b/packages/cli/.npmignore similarity index 100% rename from .npmignore rename to packages/cli/.npmignore diff --git a/packages/cli/package.json b/packages/cli/package.json index ff89f9eea8..a0e91724cb 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -52,6 +52,5 @@ "@serverless-stack/resources": "^0.0.0", "webpack": "^4.44.0", "webpack-cli": "^3.3.12" - }, - "gitHead": "f1206f58213dea506d66f21ac63579ce1e983556" + } } diff --git a/packages/resources/.npmignore b/packages/resources/.npmignore new file mode 100644 index 0000000000..f5b2fd56b1 --- /dev/null +++ b/packages/resources/.npmignore @@ -0,0 +1,6 @@ +node_modules +tests +*.test.js +yarn.lock +yarn-error.log +.travis.yml diff --git a/packages/resources/package.json b/packages/resources/package.json index 2a754dbbf4..5d8af0714b 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -24,6 +24,5 @@ "devDependencies": { "@types/node": "^14.0.27", "typescript": "^3.9.7" - }, - "gitHead": "f1206f58213dea506d66f21ac63579ce1e983556" + } } From 958b8fb6f8dfb2ac7985db0173ce986a2c943c9c Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 4 Aug 2020 20:17:41 -0400 Subject: [PATCH 015/481] v0.0.3 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/resources/package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lerna.json b/lerna.json index d2504cb80f..b027589617 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.2" + "version": "0.0.3" } diff --git a/packages/cli/package.json b/packages/cli/package.json index a0e91724cb..049675b4f4 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.0.2", + "version": "0.0.3", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "build": "webpack --config webpack.config.js", @@ -36,7 +36,7 @@ "@babel/core": "^7.10.5", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/resources": "^0.0.2", + "@serverless-stack/resources": "^0.0.3", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "aws-cdk": "^1.54.0", diff --git a/packages/resources/package.json b/packages/resources/package.json index 5d8af0714b..467b2c1a01 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.2", + "version": "0.0.3", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 0445ce7dd68d2ef047732d76a6a2049c4a215201 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 4 Aug 2020 20:21:32 -0400 Subject: [PATCH 016/481] Fixing lifecycle scripts --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 347f1b42a2..3b537a3469 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "name": "serverless-stack", + "version": "0.0.3", "license": "MIT", "private": true, "workspaces": [ @@ -10,7 +11,7 @@ "npm-version": "lerna version", "npm-publish": "lerna publish", "clean": "lerna run clean", - "prepare": "lerna run prepare", + "postinstall": "lerna run prepare", "test": "lerna run test --stream --scope=@serverless-stack/cli" }, "devDependencies": { From fd1f7bbfe5a67bc5b89f0f75889491674bf01f8d Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 4 Aug 2020 20:27:23 -0400 Subject: [PATCH 017/481] v0.0.4 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/resources/package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lerna.json b/lerna.json index b027589617..15be074a23 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.3" + "version": "0.0.4" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 049675b4f4..df9ae47f3f 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.0.3", + "version": "0.0.4", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "build": "webpack --config webpack.config.js", @@ -36,7 +36,7 @@ "@babel/core": "^7.10.5", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/resources": "^0.0.3", + "@serverless-stack/resources": "^0.0.4", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "aws-cdk": "^1.54.0", diff --git a/packages/resources/package.json b/packages/resources/package.json index 467b2c1a01..cb5872c9bb 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.3", + "version": "0.0.4", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From f4a5522fe9886d96384a197c11bb569a67ad562e Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 4 Aug 2020 20:38:19 -0400 Subject: [PATCH 018/481] Cleaning up package.json --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 3b537a3469..7e63b53947 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "serverless-stack", - "version": "0.0.3", + "version": "0.0.0", "license": "MIT", "private": true, "workspaces": [ @@ -8,7 +8,6 @@ ], "scripts": { "lint": "eslint . --fix --ext .js,.ts", - "npm-version": "lerna version", "npm-publish": "lerna publish", "clean": "lerna run clean", "postinstall": "lerna run prepare", From 7b8d4ecb0f333eb33a5eead909e419e7502441ae Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 4 Aug 2020 20:49:27 -0400 Subject: [PATCH 019/481] Adding badges --- README.md | 2 +- packages/cli/README.md | 2 +- packages/resources/README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c568d419d4..cc5a263f3a 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# serverless-stack [![Build Status](https://github.com/serverless-stack/serverless-stack/workflows/CI/badge.svg)](https://github.com/serverless-stack/serverless-stack/actions) +# serverless-stack [![Build Status](https://github.com/serverless-stack/serverless-stack/workflows/CI/badge.svg)](https://github.com/serverless-stack/serverless-stack/actions) [![npm](https://img.shields.io/npm/v/@serverless-stack/cli.svg)](https://www.npmjs.com/package/@serverless-stack/cli) diff --git a/packages/cli/README.md b/packages/cli/README.md index b23fbd9262..8dccc77404 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -1 +1 @@ -# @serverless-stack/cli +# @serverless-stack/cli [![npm](https://img.shields.io/npm/v/@serverless-stack/cli.svg)](https://www.npmjs.com/package/@serverless-stack/cli) diff --git a/packages/resources/README.md b/packages/resources/README.md index 6557cd419f..65e4f33755 100644 --- a/packages/resources/README.md +++ b/packages/resources/README.md @@ -1 +1 @@ -# @serverless-stack/resources +# @serverless-stack/resources [![npm](https://img.shields.io/npm/v/@serverless-stack/resources.svg)](https://www.npmjs.com/package/@serverless-stack/resources) From e08d44d5db01daa85fa693e16b93788f3469e8e2 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 6 Aug 2020 15:14:32 -0400 Subject: [PATCH 020/481] Adding create-serverless-stack CLI --- .eslintignore | 4 +- .gitignore | 2 +- .prettierignore | 3 + packages/cli/bin/scripts.js | 14 +- packages/cli/package.json | 11 +- .../{tests => test}/base-ts/base-ts.test.js | 0 .../cli/{tests => test}/base-ts/lib/index.ts | 0 .../base-ts/lib/stacks/sample-stack.ts | 0 .../cli/{tests => test}/base-ts/package.json | 0 .../cli/{tests => test}/base-ts/tsconfig.json | 2 +- .../cli/{tests => test}/base-ts/yarn.lock | 0 .../cli/{tests => test}/base/base.test.js | 0 .../cli/{tests => test}/base/cdk.context.json | 0 .../cli/{tests => test}/base/lib/cognito.js | 0 .../cli/{tests => test}/base/lib/dynamodb.js | 0 .../cli/{tests => test}/base/lib/index.js | 0 .../{tests => test}/base/lib/nested-stack.js | 0 packages/cli/{tests => test}/base/lib/s3.js | 0 .../cli/{tests => test}/base/package.json | 0 packages/cli/{tests => test}/base/sst.json | 0 packages/cli/{tests => test}/base/yarn.lock | 0 .../cli/{tests => test}/config/config.test.js | 0 .../cli/{tests => test}/config/lib/index.js | 0 .../cli/{tests => test}/config/package.json | 0 packages/cli/{tests => test}/config/sst.json | 0 packages/cli/{tests => test}/config/yarn.lock | 0 .../{tests => test}/context/cdk.context.json | 0 .../{tests => test}/context/context.test.js | 0 .../cli/{tests => test}/context/lib/index.js | 0 .../cli/{tests => test}/context/package.json | 0 .../cli/{tests => test}/context/yarn.lock | 0 .../helpers/clear-build-output.js | 0 packages/cli/{tests => test}/helpers/index.js | 0 .../helpers/remove-node-modules.js | 0 .../helpers/run-build-command.js | 0 .../helpers/run-jest-command.js | 0 .../{tests => test}/helpers/setup-tests.js | 0 .../{tests => test}/helpers/yarn-install.js | 0 .../{tests => test}/jest-ts/jest-ts.test.js | 0 .../cli/{tests => test}/jest-ts/lib/index.ts | 0 .../jest-ts/lib/sample-stack.ts | 0 .../cli/{tests => test}/jest-ts/package.json | 1 + .../jest-ts/test/sample-stack.test.ts} | 0 .../cli/{tests => test}/jest-ts/tsconfig.json | 2 +- packages/cli/test/jest-ts/yarn.lock | 5744 +++++++++++++++++ .../cli/{tests => test}/jest/jest.test.js | 0 .../cli/{tests => test}/jest/lib/dynamodb.js | 0 .../cli/{tests => test}/jest/package.json | 0 .../tests => test/jest/test}/dynamodb.test.js | 0 packages/cli/{tests => test}/jest/yarn.lock | 0 packages/cli/tests/jest-ts/yarn.lock | 567 -- packages/create-serverless-stack/bin/index.js | 158 + .../create-serverless-stack/config/paths.js | 21 + packages/create-serverless-stack/package.json | 28 + .../resources/javascript/.template.gitignore | 17 + .../resources/javascript/README.template.md | 3 + .../lib/%name.PascalCased%Stack.template.js | 9 + .../javascript/lib/index.template.js | 7 + .../javascript/package.template.json | 18 + .../resources/javascript/sst.template.json | 6 + .../%name.PascalCased%Stack.test.template.js | 13 + .../resources/typescript/.template.gitignore | 22 + .../resources/typescript/README.template.md | 3 + .../lib/%name.PascalCased%Stack.template.ts | 9 + .../typescript/lib/index.template.ts | 8 + .../typescript/package.template.json | 18 + .../%name.PascalCased%Stack.test.template.ts | 13 + .../resources/typescript/tsconfig.json | 23 + packages/resources/package.json | 5 + 69 files changed, 6150 insertions(+), 581 deletions(-) create mode 100644 .prettierignore rename packages/cli/{tests => test}/base-ts/base-ts.test.js (100%) rename packages/cli/{tests => test}/base-ts/lib/index.ts (100%) rename packages/cli/{tests => test}/base-ts/lib/stacks/sample-stack.ts (100%) rename packages/cli/{tests => test}/base-ts/package.json (100%) rename packages/cli/{tests => test}/base-ts/tsconfig.json (96%) rename packages/cli/{tests => test}/base-ts/yarn.lock (100%) rename packages/cli/{tests => test}/base/base.test.js (100%) rename packages/cli/{tests => test}/base/cdk.context.json (100%) rename packages/cli/{tests => test}/base/lib/cognito.js (100%) rename packages/cli/{tests => test}/base/lib/dynamodb.js (100%) rename packages/cli/{tests => test}/base/lib/index.js (100%) rename packages/cli/{tests => test}/base/lib/nested-stack.js (100%) rename packages/cli/{tests => test}/base/lib/s3.js (100%) rename packages/cli/{tests => test}/base/package.json (100%) rename packages/cli/{tests => test}/base/sst.json (100%) rename packages/cli/{tests => test}/base/yarn.lock (100%) rename packages/cli/{tests => test}/config/config.test.js (100%) rename packages/cli/{tests => test}/config/lib/index.js (100%) rename packages/cli/{tests => test}/config/package.json (100%) rename packages/cli/{tests => test}/config/sst.json (100%) rename packages/cli/{tests => test}/config/yarn.lock (100%) rename packages/cli/{tests => test}/context/cdk.context.json (100%) rename packages/cli/{tests => test}/context/context.test.js (100%) rename packages/cli/{tests => test}/context/lib/index.js (100%) rename packages/cli/{tests => test}/context/package.json (100%) rename packages/cli/{tests => test}/context/yarn.lock (100%) rename packages/cli/{tests => test}/helpers/clear-build-output.js (100%) rename packages/cli/{tests => test}/helpers/index.js (100%) rename packages/cli/{tests => test}/helpers/remove-node-modules.js (100%) rename packages/cli/{tests => test}/helpers/run-build-command.js (100%) rename packages/cli/{tests => test}/helpers/run-jest-command.js (100%) rename packages/cli/{tests => test}/helpers/setup-tests.js (100%) rename packages/cli/{tests => test}/helpers/yarn-install.js (100%) rename packages/cli/{tests => test}/jest-ts/jest-ts.test.js (100%) rename packages/cli/{tests => test}/jest-ts/lib/index.ts (100%) rename packages/cli/{tests => test}/jest-ts/lib/sample-stack.ts (100%) rename packages/cli/{tests => test}/jest-ts/package.json (93%) rename packages/cli/{tests/jest-ts/tests/sample-stack.test.js => test/jest-ts/test/sample-stack.test.ts} (100%) rename packages/cli/{tests => test}/jest-ts/tsconfig.json (96%) create mode 100644 packages/cli/test/jest-ts/yarn.lock rename packages/cli/{tests => test}/jest/jest.test.js (100%) rename packages/cli/{tests => test}/jest/lib/dynamodb.js (100%) rename packages/cli/{tests => test}/jest/package.json (100%) rename packages/cli/{tests/jest/tests => test/jest/test}/dynamodb.test.js (100%) rename packages/cli/{tests => test}/jest/yarn.lock (100%) delete mode 100644 packages/cli/tests/jest-ts/yarn.lock create mode 100755 packages/create-serverless-stack/bin/index.js create mode 100644 packages/create-serverless-stack/config/paths.js create mode 100644 packages/create-serverless-stack/package.json create mode 100644 packages/create-serverless-stack/templates/resources/javascript/.template.gitignore create mode 100644 packages/create-serverless-stack/templates/resources/javascript/README.template.md create mode 100644 packages/create-serverless-stack/templates/resources/javascript/lib/%name.PascalCased%Stack.template.js create mode 100644 packages/create-serverless-stack/templates/resources/javascript/lib/index.template.js create mode 100644 packages/create-serverless-stack/templates/resources/javascript/package.template.json create mode 100644 packages/create-serverless-stack/templates/resources/javascript/sst.template.json create mode 100644 packages/create-serverless-stack/templates/resources/javascript/test/%name.PascalCased%Stack.test.template.js create mode 100644 packages/create-serverless-stack/templates/resources/typescript/.template.gitignore create mode 100644 packages/create-serverless-stack/templates/resources/typescript/README.template.md create mode 100644 packages/create-serverless-stack/templates/resources/typescript/lib/%name.PascalCased%Stack.template.ts create mode 100644 packages/create-serverless-stack/templates/resources/typescript/lib/index.template.ts create mode 100644 packages/create-serverless-stack/templates/resources/typescript/package.template.json create mode 100644 packages/create-serverless-stack/templates/resources/typescript/test/%name.PascalCased%Stack.test.template.ts create mode 100644 packages/create-serverless-stack/templates/resources/typescript/tsconfig.json diff --git a/.eslintignore b/.eslintignore index c35a6ea721..9519ad6a6f 100644 --- a/.eslintignore +++ b/.eslintignore @@ -5,4 +5,6 @@ dist # Don't lint nyc coverage output coverage # Don't lint build outputs in test -/packages/cli/tests/*/build/** +/packages/cli/test/*/build/** +# Don't lint templates +/packages/create-serverless-stack/templates/** diff --git a/.gitignore b/.gitignore index 2a3ce969aa..6b4d819d46 100644 --- a/.gitignore +++ b/.gitignore @@ -104,4 +104,4 @@ dist .tern-port # Build outputs in test -/packages/cli/tests/*/build/** +/packages/cli/test/*/build/** diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000..337cd77a5a --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +# Ignore templates +/packages/create-serverless-stack/templates/** + diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index 70745775f7..d4e75f58ec 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -1,7 +1,4 @@ #!/usr/bin/env node -/** - * Based on https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/bin/react-scripts.js - */ "use strict"; @@ -13,6 +10,7 @@ process.on("unhandledRejection", (err) => { }); const yargs = require("yargs"); +const chalk = require("chalk"); const spawn = require("cross-spawn"); const args = process.argv.slice(2); @@ -88,10 +86,10 @@ const argv = yargs ], ]) - .help("h") .version() - .alias("h", "help") - .alias("v", "version") + .alias("version", "v") + .help("help") + .alias("help", "h") .epilogue("For more information, visit www.serverless-stack.com") .strictCommands(true) @@ -100,9 +98,11 @@ const argv = yargs .fail((msg, err) => { if (err) throw err; + console.log(chalk.red(msg) + "\n"); + yargs.showHelp(); - process.exit(0); + process.exit(1); }) .parse(); diff --git a/packages/cli/package.json b/packages/cli/package.json index df9ae47f3f..2d79ebe0c2 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -13,12 +13,12 @@ }, "jest": { "setupFilesAfterEnv": [ - "/tests/helpers/setup-tests.js" + "/test/helpers/setup-tests.js" ], "testPathIgnorePatterns": [ "/scripts", - "/tests/jest/tests", - "/tests/jest-ts/tests" + "/test/jest/test", + "/test/jest-ts/test" ] }, "author": { @@ -29,6 +29,11 @@ "publishConfig": { "access": "public" }, + "repository": { + "type": "git", + "url": "https://github.com/serverless-stack/serverless-stack.git", + "directory": "packages/cli" + }, "homepage": "https://serverless-stack.com", "dependencies": { "@aws-cdk/core": "^1.54.0", diff --git a/packages/cli/tests/base-ts/base-ts.test.js b/packages/cli/test/base-ts/base-ts.test.js similarity index 100% rename from packages/cli/tests/base-ts/base-ts.test.js rename to packages/cli/test/base-ts/base-ts.test.js diff --git a/packages/cli/tests/base-ts/lib/index.ts b/packages/cli/test/base-ts/lib/index.ts similarity index 100% rename from packages/cli/tests/base-ts/lib/index.ts rename to packages/cli/test/base-ts/lib/index.ts diff --git a/packages/cli/tests/base-ts/lib/stacks/sample-stack.ts b/packages/cli/test/base-ts/lib/stacks/sample-stack.ts similarity index 100% rename from packages/cli/tests/base-ts/lib/stacks/sample-stack.ts rename to packages/cli/test/base-ts/lib/stacks/sample-stack.ts diff --git a/packages/cli/tests/base-ts/package.json b/packages/cli/test/base-ts/package.json similarity index 100% rename from packages/cli/tests/base-ts/package.json rename to packages/cli/test/base-ts/package.json diff --git a/packages/cli/tests/base-ts/tsconfig.json b/packages/cli/test/base-ts/tsconfig.json similarity index 96% rename from packages/cli/tests/base-ts/tsconfig.json rename to packages/cli/test/base-ts/tsconfig.json index 087b99baa9..7d659db8a8 100644 --- a/packages/cli/tests/base-ts/tsconfig.json +++ b/packages/cli/test/base-ts/tsconfig.json @@ -19,5 +19,5 @@ "strictPropertyInitialization": false, "typeRoots": ["./node_modules/@types"] }, - "exclude": ["build"] + "include": ["lib"] } diff --git a/packages/cli/tests/base-ts/yarn.lock b/packages/cli/test/base-ts/yarn.lock similarity index 100% rename from packages/cli/tests/base-ts/yarn.lock rename to packages/cli/test/base-ts/yarn.lock diff --git a/packages/cli/tests/base/base.test.js b/packages/cli/test/base/base.test.js similarity index 100% rename from packages/cli/tests/base/base.test.js rename to packages/cli/test/base/base.test.js diff --git a/packages/cli/tests/base/cdk.context.json b/packages/cli/test/base/cdk.context.json similarity index 100% rename from packages/cli/tests/base/cdk.context.json rename to packages/cli/test/base/cdk.context.json diff --git a/packages/cli/tests/base/lib/cognito.js b/packages/cli/test/base/lib/cognito.js similarity index 100% rename from packages/cli/tests/base/lib/cognito.js rename to packages/cli/test/base/lib/cognito.js diff --git a/packages/cli/tests/base/lib/dynamodb.js b/packages/cli/test/base/lib/dynamodb.js similarity index 100% rename from packages/cli/tests/base/lib/dynamodb.js rename to packages/cli/test/base/lib/dynamodb.js diff --git a/packages/cli/tests/base/lib/index.js b/packages/cli/test/base/lib/index.js similarity index 100% rename from packages/cli/tests/base/lib/index.js rename to packages/cli/test/base/lib/index.js diff --git a/packages/cli/tests/base/lib/nested-stack.js b/packages/cli/test/base/lib/nested-stack.js similarity index 100% rename from packages/cli/tests/base/lib/nested-stack.js rename to packages/cli/test/base/lib/nested-stack.js diff --git a/packages/cli/tests/base/lib/s3.js b/packages/cli/test/base/lib/s3.js similarity index 100% rename from packages/cli/tests/base/lib/s3.js rename to packages/cli/test/base/lib/s3.js diff --git a/packages/cli/tests/base/package.json b/packages/cli/test/base/package.json similarity index 100% rename from packages/cli/tests/base/package.json rename to packages/cli/test/base/package.json diff --git a/packages/cli/tests/base/sst.json b/packages/cli/test/base/sst.json similarity index 100% rename from packages/cli/tests/base/sst.json rename to packages/cli/test/base/sst.json diff --git a/packages/cli/tests/base/yarn.lock b/packages/cli/test/base/yarn.lock similarity index 100% rename from packages/cli/tests/base/yarn.lock rename to packages/cli/test/base/yarn.lock diff --git a/packages/cli/tests/config/config.test.js b/packages/cli/test/config/config.test.js similarity index 100% rename from packages/cli/tests/config/config.test.js rename to packages/cli/test/config/config.test.js diff --git a/packages/cli/tests/config/lib/index.js b/packages/cli/test/config/lib/index.js similarity index 100% rename from packages/cli/tests/config/lib/index.js rename to packages/cli/test/config/lib/index.js diff --git a/packages/cli/tests/config/package.json b/packages/cli/test/config/package.json similarity index 100% rename from packages/cli/tests/config/package.json rename to packages/cli/test/config/package.json diff --git a/packages/cli/tests/config/sst.json b/packages/cli/test/config/sst.json similarity index 100% rename from packages/cli/tests/config/sst.json rename to packages/cli/test/config/sst.json diff --git a/packages/cli/tests/config/yarn.lock b/packages/cli/test/config/yarn.lock similarity index 100% rename from packages/cli/tests/config/yarn.lock rename to packages/cli/test/config/yarn.lock diff --git a/packages/cli/tests/context/cdk.context.json b/packages/cli/test/context/cdk.context.json similarity index 100% rename from packages/cli/tests/context/cdk.context.json rename to packages/cli/test/context/cdk.context.json diff --git a/packages/cli/tests/context/context.test.js b/packages/cli/test/context/context.test.js similarity index 100% rename from packages/cli/tests/context/context.test.js rename to packages/cli/test/context/context.test.js diff --git a/packages/cli/tests/context/lib/index.js b/packages/cli/test/context/lib/index.js similarity index 100% rename from packages/cli/tests/context/lib/index.js rename to packages/cli/test/context/lib/index.js diff --git a/packages/cli/tests/context/package.json b/packages/cli/test/context/package.json similarity index 100% rename from packages/cli/tests/context/package.json rename to packages/cli/test/context/package.json diff --git a/packages/cli/tests/context/yarn.lock b/packages/cli/test/context/yarn.lock similarity index 100% rename from packages/cli/tests/context/yarn.lock rename to packages/cli/test/context/yarn.lock diff --git a/packages/cli/tests/helpers/clear-build-output.js b/packages/cli/test/helpers/clear-build-output.js similarity index 100% rename from packages/cli/tests/helpers/clear-build-output.js rename to packages/cli/test/helpers/clear-build-output.js diff --git a/packages/cli/tests/helpers/index.js b/packages/cli/test/helpers/index.js similarity index 100% rename from packages/cli/tests/helpers/index.js rename to packages/cli/test/helpers/index.js diff --git a/packages/cli/tests/helpers/remove-node-modules.js b/packages/cli/test/helpers/remove-node-modules.js similarity index 100% rename from packages/cli/tests/helpers/remove-node-modules.js rename to packages/cli/test/helpers/remove-node-modules.js diff --git a/packages/cli/tests/helpers/run-build-command.js b/packages/cli/test/helpers/run-build-command.js similarity index 100% rename from packages/cli/tests/helpers/run-build-command.js rename to packages/cli/test/helpers/run-build-command.js diff --git a/packages/cli/tests/helpers/run-jest-command.js b/packages/cli/test/helpers/run-jest-command.js similarity index 100% rename from packages/cli/tests/helpers/run-jest-command.js rename to packages/cli/test/helpers/run-jest-command.js diff --git a/packages/cli/tests/helpers/setup-tests.js b/packages/cli/test/helpers/setup-tests.js similarity index 100% rename from packages/cli/tests/helpers/setup-tests.js rename to packages/cli/test/helpers/setup-tests.js diff --git a/packages/cli/tests/helpers/yarn-install.js b/packages/cli/test/helpers/yarn-install.js similarity index 100% rename from packages/cli/tests/helpers/yarn-install.js rename to packages/cli/test/helpers/yarn-install.js diff --git a/packages/cli/tests/jest-ts/jest-ts.test.js b/packages/cli/test/jest-ts/jest-ts.test.js similarity index 100% rename from packages/cli/tests/jest-ts/jest-ts.test.js rename to packages/cli/test/jest-ts/jest-ts.test.js diff --git a/packages/cli/tests/jest-ts/lib/index.ts b/packages/cli/test/jest-ts/lib/index.ts similarity index 100% rename from packages/cli/tests/jest-ts/lib/index.ts rename to packages/cli/test/jest-ts/lib/index.ts diff --git a/packages/cli/tests/jest-ts/lib/sample-stack.ts b/packages/cli/test/jest-ts/lib/sample-stack.ts similarity index 100% rename from packages/cli/tests/jest-ts/lib/sample-stack.ts rename to packages/cli/test/jest-ts/lib/sample-stack.ts diff --git a/packages/cli/tests/jest-ts/package.json b/packages/cli/test/jest-ts/package.json similarity index 93% rename from packages/cli/tests/jest-ts/package.json rename to packages/cli/test/jest-ts/package.json index dcfcf55ff1..7270fb7028 100644 --- a/packages/cli/tests/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -10,6 +10,7 @@ "keywords": [], "author": "", "dependencies": { + "@serverless-stack/cli": "../../../cli", "@serverless-stack/resources": "../../../resources", "@aws-cdk/aws-dynamodb": "^1.55.0", "@aws-cdk/aws-sns": "^1.55.0", diff --git a/packages/cli/tests/jest-ts/tests/sample-stack.test.js b/packages/cli/test/jest-ts/test/sample-stack.test.ts similarity index 100% rename from packages/cli/tests/jest-ts/tests/sample-stack.test.js rename to packages/cli/test/jest-ts/test/sample-stack.test.ts diff --git a/packages/cli/tests/jest-ts/tsconfig.json b/packages/cli/test/jest-ts/tsconfig.json similarity index 96% rename from packages/cli/tests/jest-ts/tsconfig.json rename to packages/cli/test/jest-ts/tsconfig.json index 087b99baa9..7d659db8a8 100644 --- a/packages/cli/tests/jest-ts/tsconfig.json +++ b/packages/cli/test/jest-ts/tsconfig.json @@ -19,5 +19,5 @@ "strictPropertyInitialization": false, "typeRoots": ["./node_modules/@types"] }, - "exclude": ["build"] + "include": ["lib"] } diff --git a/packages/cli/test/jest-ts/yarn.lock b/packages/cli/test/jest-ts/yarn.lock new file mode 100644 index 0000000000..3c7f67a265 --- /dev/null +++ b/packages/cli/test/jest-ts/yarn.lock @@ -0,0 +1,5744 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aws-cdk/assert@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.55.0.tgz#04114356c911afae0c26b99f6cd91823c2676e9b" + integrity sha512-f+EXzBpFPl305EnGXH3DJLY/X51cU/u4enCE9BdCq4AnyR3/eqGpKuhav3lxZ0Yu704j9wZKd2M+3Hn2PPjWvA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cloudformation-diff" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/assets@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.55.0.tgz#02442aea514d08b8f1fb744a3e3f944ab9a5e389" + integrity sha512-fOdk2eW8GEgS9vwgpt/BljV1IvCZ/Et7zYcL331+3XAxZpptOYDjNvV/tfhadX9fe1DhwZnsdqQqDO7eAY2+ig== + dependencies: + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-applicationautoscaling@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.55.0.tgz#ba0a1ee4b8bbe5f565c8d76d32408fcfdd8ba046" + integrity sha512-6BCvybrCYqhmtIckpAdDmNvn6B85+D1tL0ZJofiF8/0DOvuV5noZyzJwvwMO4q/WLzqavxoMSxBd7OswVX3trw== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.55.0" + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-autoscaling-common@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.55.0.tgz#dc0f64351b2d388d9a195f4316a76ec349cee3f5" + integrity sha512-uQTjJmez/2QOYjmwLhQ/nQg4ywsoWvciS/y55nIlp409Ttuw/RapsrRhVAj3q58/3uTERuIUha4vpNe5C2gUKA== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-cloudformation@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.55.0.tgz#bf902768eb09623ae8e9439e1cde03619e3cd62c" + integrity sha512-Jd8ArtzRv6gKKrGlwMXnn5Gsg3xv8V0esRn3P9jfoNR7qMkH/u2O9mGJ8C2UXMdeAeDPJld0Xk5DxFYtHFrx2Q== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-sns" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-cloudwatch@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.55.0.tgz#3e58110d008b9dc0c0cd8a8973b4f0b1ca385fc3" + integrity sha512-WxJyDnrYHH7ox/1gWe4v+TfFR6LC7Q/bQS5jfdG1Wm3ZHzlSjOegcIw7jrkOXY5QI6N4jHM5bVwpQgX9cS8/dQ== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-codeguruprofiler@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.55.0.tgz#9e1504db79fe469dbd1678b9ed1e020f30b816c8" + integrity sha512-MeXlEPAQjhCOs7+u1Q+Stva97E/QkE37E5EgoNRWVMoel8TPlfg3/ogYlsvJzfh2/7N11Z2jsU2kPaFw0czdfw== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + +"@aws-cdk/aws-dynamodb@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.55.0.tgz#da2da006d03933385cd9aebf2404e175cc730cda" + integrity sha512-MqiTSZ2B1XFoQ28Y9GCtSPRyQGtTwxJxOiECXQZ3axnCz/3x3HFilvvBL31QsBmGkkRuiCNZ67u6+VUCn3J+LQ== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.55.0" + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/custom-resources" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-ec2@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.55.0.tgz#a6c2ab965bd75dd3f255027c11314775289e53a8" + integrity sha512-3FQ6X7BALEFMScsYUNCf+wAY4Zw6FE8V42S6i/OVZhZXY3/iZqiJh/BAJruj/VM1QO9nPRYdF5lnTwFssp17PQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-ssm" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + "@aws-cdk/region-info" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-efs@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.55.0.tgz#dfff8ceb245d2cc9f03b158c9d55b64d6a57c0cf" + integrity sha512-BGbF9vby78BNAPwyqzdsErrPgkC0ZCmhIekiTpMdlmhNFuMf6GJMOXY2rr81N7mW6HaAMe6Lqd6w+Te/G0IzHA== + dependencies: + "@aws-cdk/aws-ec2" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-events@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.55.0.tgz#3d784b0bf7ac2a2ebe6e52a9b89365d30bdd9398" + integrity sha512-jL9bygowe/6kYoAIApBcYi92zSjSxyn43CfOOILkplEsxdg3nNKfgnkQ4JgS1WwCuBNOhPAY6Zzc6bLKDi4Igw== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-iam@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.55.0.tgz#fedac6b83a9a7ee48e4cda6d877f684f1dac0056" + integrity sha512-cAKQN1sEdDXZ2xFOOoWQskDh/GuQS81m6Qd/o6KQeFli8ftXSlD5dq5+UIs+oHBwhE8xwYJLbHDx79L3lQcMug== + dependencies: + "@aws-cdk/core" "1.55.0" + "@aws-cdk/region-info" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-kms@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.55.0.tgz#eaaa9b2ea9b7f65d3bdcab8109104477b2ff2baf" + integrity sha512-GSNKEn2w5QwKF+vwlz0N9TPnRh/p/tOFHb+AuNmNq4y2f3c3rTmW/anJu+ISE5qIVzTnev6bLQ+y7Iidt8aXKQ== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-lambda@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.55.0.tgz#751c89a64797bc4ae1ea0801fb39083752455ff9" + integrity sha512-/5df6QR3vbJr/G5/HFmxG/QvxPIjSdzSgaXjK7a/7tzxRISWPaYLN4sVZQHVDYHPe+WZ291uulYE+juiyGrvqQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-codeguruprofiler" "1.55.0" + "@aws-cdk/aws-ec2" "1.55.0" + "@aws-cdk/aws-efs" "1.55.0" + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-s3-assets" "1.55.0" + "@aws-cdk/aws-sqs" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-logs@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.55.0.tgz#267aa66bff737e47be5dc3d326ea936cf73c62e6" + integrity sha512-sUflJ+MuB69MwHhtWZUY8jf2JLxXXbmGzs/T3VHnscULAsQoo6Tu5v/kXvtXU04CC8YxUG6+hQkO6bl3bF6M1Q== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-s3-assets@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.55.0.tgz#7243ee94f767d6686b6b9c0caaf9af3aa38a656d" + integrity sha512-zyYFRw1xFmuONiuj9ym9HsnYyAeE2a1L1q2/vpvlXARLIsk7JDG37nnnh40ccm2/YQAoVLXqKZb+VTS5cUKhgA== + dependencies: + "@aws-cdk/assets" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-s3@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.55.0.tgz#41a0f134608fa068d0ea2b451a5ec039da4ca372" + integrity sha512-VNBTw+ADXcNuIi+ziGpEiGN0kxE/32MGUK6esePMxRr+zv9JqE4q0YwiSSjp0FWnM1g3mufkergXfNcGCCPMrw== + dependencies: + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-sns-subscriptions@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.55.0.tgz#480081c3d8abf0bb1bb7067cefecf0ca29bce433" + integrity sha512-Mk5oKUIlXnw+Uoox88IY4Jlzi09DhiDnJqtZ7p2avyofzZ99ZZihncXwm6XxFe1yCo+c+jdEK0qWklyFWaKfOg== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/aws-sns" "1.55.0" + "@aws-cdk/aws-sqs" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-sns@1.55.0", "@aws-cdk/aws-sns@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.55.0.tgz#e3a6ef9b7235e39dba8a3f172da31d63e0d961b1" + integrity sha512-WR2ogCi6ngMsZAxq1O71WTxYz1GC9oSxK/K1sj7lboDW712OJXgaz5Giat073TYosyuiZD0uUvSPRvBfxbfEIg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-sqs" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-sqs@1.55.0", "@aws-cdk/aws-sqs@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.55.0.tgz#b70e100e941aad369557ae6ed991a40972b4e20b" + integrity sha512-CpXi33lBg8PgMJvxwRpPOQmD+DLUaUHxRpjjjLP6tfUDwk5cIGwRG+QSTd4FmNcDm3Cvb1x0WI8PSdwfgaOSiw== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-ssm@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.55.0.tgz#5b51cc6875956829df499b3c9ed34b41e47c63ce" + integrity sha512-lTJj0rDZS5qVapV4WI/yfm3B235hJtMgDHMRMoOAZTNQSgHFvp2/5l1gSKOfqlanS90aeLUIfEXWlXALnwveLg== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/cfnspec@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.55.0.tgz#6a6f78b0269ff8dae55fc2e986cca7469937e3fb" + integrity sha512-Bg4tTgtKMjBKWtyP2/V0atb3TmqshIW+j61gRigEhom1aS49QzvA6YpTjv6vzylQIH0+hdLYiCX6brBiYEXhTg== + dependencies: + md5 "^2.2.1" + +"@aws-cdk/cfnspec@1.56.0": + version "1.56.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.56.0.tgz#54d29eee2fcb33c1432ca7287f90f89c4aa73b9a" + integrity sha512-6bzVJX+RzcOoAAiPI1oE7lW1mLtm486QhkpEnyQefq136KqEINjYDCjH82KZJ5EbyJW7vYaxSqlH7u/Twp20bQ== + dependencies: + md5 "^2.2.1" + +"@aws-cdk/cloud-assembly-schema@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" + integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/cloud-assembly-schema@1.56.0": + version "1.56.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.56.0.tgz#b2b3cb687ead39ab8cecfaac6a4bee14666d6abc" + integrity sha512-QLuUOoEzrTyiBbPue1QzMmMLjh6FjuD6dIPJ1O81jPpBuIYiAN7MXzXQ9+4gqM0UrnMpSzB8DW2joENDPtJgFg== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/cloudformation-diff@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.55.0.tgz#f39fb63bd6388c2401373bf200575efe513a5045" + integrity sha512-lBFiLQXaJmf4hR+RzSXwAGun/NgANzK5p/Qm5ETgqTLVPRksJJruaFgFO/Pr0qIRpDbtxrkigoeFZxCgFkFqAQ== + dependencies: + "@aws-cdk/cfnspec" "1.55.0" + colors "^1.4.0" + diff "^4.0.2" + fast-deep-equal "^3.1.3" + string-width "^4.2.0" + table "^5.4.6" + +"@aws-cdk/cloudformation-diff@1.56.0": + version "1.56.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.56.0.tgz#7af2e2d7c757ad7f69a7536ae6ccf89bd18ba26a" + integrity sha512-JVLL3e6uhHknu9WW8TtYMmX/OGxU9Cee3Sfzh1K10rND6VYsrteSuCpkiVJOnSuNgNXAABw7/5oNRBNgKotgNw== + dependencies: + "@aws-cdk/cfnspec" "1.56.0" + colors "^1.4.0" + diff "^4.0.2" + fast-deep-equal "^3.1.3" + string-width "^4.2.0" + table "^5.4.6" + +"@aws-cdk/core@1.55.0", "@aws-cdk/core@^1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" + integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/core@^1.54.0": + version "1.56.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.56.0.tgz#499bf691a9937f5f5dfb2b83330fc3f9d9294662" + integrity sha512-MeImBUTbU8ipZAC6gYQHfJRXH+63XD1VBv9g1AO5GpERKHOZ58qiBroQOkVWD5/u+iasXJ7JSC9JKUBC/+2PlQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.56.0" + "@aws-cdk/cx-api" "1.56.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/custom-resources@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.55.0.tgz#af33b6dc28a9431d60cd6e7774a166919a7622be" + integrity sha512-AKc9y8RYAU4J2b6rB902jq66vwOzshsgNYl5dTS8cFxdCjR4YthuaAyatxXMBJz4SepL+X6kwjxF1ed6/DFFFQ== + dependencies: + "@aws-cdk/aws-cloudformation" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-sns" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/cx-api@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" + integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + semver "^7.2.2" + +"@aws-cdk/cx-api@1.56.0": + version "1.56.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.56.0.tgz#36bf05de73d26ecc69054855f238beaf0bf2a482" + integrity sha512-IuBmbz025AnuYAKv+ZOvnRV7Wwa/wdCiqiJ3BlVEqPsdvE4ZUMJTqLTY25ho5VT07o8Z/iQg7M6dRs9ccVC9Dw== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.56.0" + semver "^7.2.2" + +"@aws-cdk/region-info@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" + integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== + +"@aws-cdk/region-info@1.56.0": + version "1.56.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.56.0.tgz#2ae5ba607d23f42ba0343304a941a430ba333c98" + integrity sha512-EIX4RQeUGkyIc2leWqtL1Lpjl/jg2p30ngDXyFfW7j1myS+9rtDFpry6wf/vL8e4v/lluuGIJKHTWbNBaUl/hA== + +"@babel/cli@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.5.tgz#57df2987c8cf89d0fc7d4b157ec59d7619f1b77a" + integrity sha512-j9H9qSf3kLdM0Ao3aGPbGZ73mEA9XazuupcS6cDGWuiyAcANoguhP0r2Lx32H5JGw4sSSoHG3x/mxVnHgvOoyA== + dependencies: + commander "^4.0.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.1.0" + glob "^7.0.0" + lodash "^4.17.19" + make-dir "^2.1.0" + slash "^2.0.0" + source-map "^0.5.0" + optionalDependencies: + chokidar "^2.1.8" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" + integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ== + dependencies: + browserslist "^4.12.0" + invariant "^2.2.4" + semver "^5.5.0" + +"@babel/core@^7.1.0", "@babel/core@^7.10.5", "@babel/core@^7.7.5": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.1.tgz#2c55b604e73a40dc21b0e52650b11c65cf276643" + integrity sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.0" + "@babel/helper-module-transforms" "^7.11.0" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.11.1" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.11.0" + "@babel/types" "^7.11.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.0.tgz#4b90c78d8c12825024568cbe83ee6c9af193585c" + integrity sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ== + dependencies: + "@babel/types" "^7.11.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" + integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-compilation-targets@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" + integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== + dependencies: + "@babel/compat-data" "^7.10.4" + browserslist "^4.12.0" + invariant "^2.2.4" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" + integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.10.5" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" + integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + regexpu-core "^4.7.0" + +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c" + integrity sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A== + dependencies: + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" + integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-module-imports@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" + integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" + integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/template" "^7.10.4" + "@babel/types" "^7.11.0" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-regex@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" + integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== + dependencies: + lodash "^4.17.19" + +"@babel/helper-remap-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz#fce8bea4e9690bbe923056ded21e54b4e8b68ed5" + integrity sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-replace-supers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" + integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-simple-access@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" + integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== + dependencies: + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-skip-transparent-expression-wrappers@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" + integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helper-wrap-function@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" + integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helpers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" + integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.0", "@babel/parser@^7.11.1": + version "7.11.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.2.tgz#0882ab8a455df3065ea2dcb4c753b2460a24bead" + integrity sha512-Vuj/+7vLo6l1Vi7uuO+1ngCDNeVmNbTngcJFKCR/oEtz8tKz0CJxZEGmPt9KcIloZhOZ3Zit6xbpXT2MDlS9Vw== + +"@babel/plugin-proposal-async-generator-functions@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" + integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" + integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-dynamic-import@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" + integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-export-namespace-from@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" + integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" + integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-logical-assignment-operators@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8" + integrity sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" + integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" + integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" + integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.10.4" + +"@babel/plugin-proposal-optional-catch-binding@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" + integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" + integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" + integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" + integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.10.4", "@babel/plugin-syntax-class-properties@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" + integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" + integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-arrow-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" + integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" + integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + +"@babel/plugin-transform-block-scoped-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" + integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-block-scoping@^7.10.4": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" + integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-classes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" + integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" + integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-destructuring@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" + integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" + integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-duplicate-keys@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" + integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-exponentiation-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" + integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-for-of@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" + integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" + integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" + integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" + integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-modules-amd@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" + integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== + dependencies: + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" + integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" + integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" + integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" + integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + +"@babel/plugin-transform-new-target@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" + integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-object-super@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" + integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + +"@babel/plugin-transform-parameters@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" + integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-property-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" + integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" + integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" + integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-shorthand-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" + integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" + integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" + +"@babel/plugin-transform-sticky-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" + integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" + integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" + integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-escapes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" + integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" + integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/preset-env@^7.10.4": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.0.tgz#860ee38f2ce17ad60480c2021ba9689393efb796" + integrity sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg== + dependencies: + "@babel/compat-data" "^7.11.0" + "@babel/helper-compilation-targets" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-async-generator-functions" "^7.10.4" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/plugin-proposal-dynamic-import" "^7.10.4" + "@babel/plugin-proposal-export-namespace-from" "^7.10.4" + "@babel/plugin-proposal-json-strings" "^7.10.4" + "@babel/plugin-proposal-logical-assignment-operators" "^7.11.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread" "^7.11.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.11.0" + "@babel/plugin-proposal-private-methods" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.10.4" + "@babel/plugin-transform-arrow-functions" "^7.10.4" + "@babel/plugin-transform-async-to-generator" "^7.10.4" + "@babel/plugin-transform-block-scoped-functions" "^7.10.4" + "@babel/plugin-transform-block-scoping" "^7.10.4" + "@babel/plugin-transform-classes" "^7.10.4" + "@babel/plugin-transform-computed-properties" "^7.10.4" + "@babel/plugin-transform-destructuring" "^7.10.4" + "@babel/plugin-transform-dotall-regex" "^7.10.4" + "@babel/plugin-transform-duplicate-keys" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator" "^7.10.4" + "@babel/plugin-transform-for-of" "^7.10.4" + "@babel/plugin-transform-function-name" "^7.10.4" + "@babel/plugin-transform-literals" "^7.10.4" + "@babel/plugin-transform-member-expression-literals" "^7.10.4" + "@babel/plugin-transform-modules-amd" "^7.10.4" + "@babel/plugin-transform-modules-commonjs" "^7.10.4" + "@babel/plugin-transform-modules-systemjs" "^7.10.4" + "@babel/plugin-transform-modules-umd" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" + "@babel/plugin-transform-new-target" "^7.10.4" + "@babel/plugin-transform-object-super" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-property-literals" "^7.10.4" + "@babel/plugin-transform-regenerator" "^7.10.4" + "@babel/plugin-transform-reserved-words" "^7.10.4" + "@babel/plugin-transform-shorthand-properties" "^7.10.4" + "@babel/plugin-transform-spread" "^7.11.0" + "@babel/plugin-transform-sticky-regex" "^7.10.4" + "@babel/plugin-transform-template-literals" "^7.10.4" + "@babel/plugin-transform-typeof-symbol" "^7.10.4" + "@babel/plugin-transform-unicode-escapes" "^7.10.4" + "@babel/plugin-transform-unicode-regex" "^7.10.4" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.11.0" + browserslist "^4.12.0" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" + integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime@^7.8.4": + version "7.11.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" + integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.10.4", "@babel/template@^7.3.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.0.tgz#9b996ce1b98f53f7c3e4175115605d56ed07dd24" + integrity sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.0" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.11.0" + "@babel/types" "^7.11.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d" + integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" + integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + +"@jest/console@^26.2.0": + version "26.2.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.2.0.tgz#d18f2659b90930e7ec3925fb7209f1ba2cf463f0" + integrity sha512-mXQfx3nSLwiHm1i7jbu+uvi+vvpVjNGzIQYLCfsat9rapC+MJkS4zBseNrgJE0vU921b3P67bQzhduphjY3Tig== + dependencies: + "@jest/types" "^26.2.0" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.2.0" + jest-util "^26.2.0" + slash "^3.0.0" + +"@jest/core@^26.2.2": + version "26.2.2" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.2.2.tgz#63de01ffce967618003dd7a0164b05c8041b81a9" + integrity sha512-UwA8gNI8aeV4FHGfGAUfO/DHjrFVvlBravF1Tm9Kt6qFE+6YHR47kFhgdepOFpADEKstyO+MVdPvkV6/dyt9sA== + dependencies: + "@jest/console" "^26.2.0" + "@jest/reporters" "^26.2.2" + "@jest/test-result" "^26.2.0" + "@jest/transform" "^26.2.2" + "@jest/types" "^26.2.0" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^26.2.0" + jest-config "^26.2.2" + jest-haste-map "^26.2.2" + jest-message-util "^26.2.0" + jest-regex-util "^26.0.0" + jest-resolve "^26.2.2" + jest-resolve-dependencies "^26.2.2" + jest-runner "^26.2.2" + jest-runtime "^26.2.2" + jest-snapshot "^26.2.2" + jest-util "^26.2.0" + jest-validate "^26.2.0" + jest-watcher "^26.2.0" + micromatch "^4.0.2" + p-each-series "^2.1.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^26.2.0": + version "26.2.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.2.0.tgz#f6faee1630fcc2fad208953164bccb31dbe0e45f" + integrity sha512-oCgp9NmEiJ5rbq9VI/v/yYLDpladAAVvFxZgNsnJxOETuzPZ0ZcKKHYjKYwCtPOP1WCrM5nmyuOhMStXFGHn+g== + dependencies: + "@jest/fake-timers" "^26.2.0" + "@jest/types" "^26.2.0" + "@types/node" "*" + jest-mock "^26.2.0" + +"@jest/fake-timers@^26.2.0": + version "26.2.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.2.0.tgz#b485c57dc4c74d61406a339807a9af4bac74b75a" + integrity sha512-45Gfe7YzYTKqTayBrEdAF0qYyAsNRBzfkV0IyVUm3cx7AsCWlnjilBM4T40w7IXT5VspOgMPikQlV0M6gHwy/g== + dependencies: + "@jest/types" "^26.2.0" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + jest-message-util "^26.2.0" + jest-mock "^26.2.0" + jest-util "^26.2.0" + +"@jest/globals@^26.2.0": + version "26.2.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.2.0.tgz#ad78f1104f250c1a4bf5184a2ba51facc59b23f6" + integrity sha512-Hoc6ScEIPaym7RNytIL2ILSUWIGKlwEv+JNFof9dGYOdvPjb2evEURSslvCMkNuNg1ECEClTE8PH7ULlMJntYA== + dependencies: + "@jest/environment" "^26.2.0" + "@jest/types" "^26.2.0" + expect "^26.2.0" + +"@jest/reporters@^26.2.2": + version "26.2.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.2.2.tgz#5a8632ab410f4fc57782bc05dcf115e91818e869" + integrity sha512-7854GPbdFTAorWVh+RNHyPO9waRIN6TcvCezKVxI1khvFq9YjINTW7J3WU+tbR038Ynn6WjYred6vtT0YmIWVQ== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.2.0" + "@jest/test-result" "^26.2.0" + "@jest/transform" "^26.2.2" + "@jest/types" "^26.2.0" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^26.2.2" + jest-resolve "^26.2.2" + jest-util "^26.2.0" + jest-worker "^26.2.1" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^4.1.3" + optionalDependencies: + node-notifier "^7.0.0" + +"@jest/source-map@^26.1.0": + version "26.1.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.1.0.tgz#a6a020d00e7d9478f4b690167c5e8b77e63adb26" + integrity sha512-XYRPYx4eEVX15cMT9mstnO7hkHP3krNtKfxUYd8L7gbtia8JvZZ6bMzSwa6IQJENbudTwKMw5R1BePRD+bkEmA== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" + +"@jest/test-result@^26.2.0": + version "26.2.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.2.0.tgz#51c9b165c8851cfcf7a3466019114785e154f76b" + integrity sha512-kgPlmcVafpmfyQEu36HClK+CWI6wIaAWDHNxfQtGuKsgoa2uQAYdlxjMDBEa3CvI40+2U3v36gQF6oZBkoKatw== + dependencies: + "@jest/console" "^26.2.0" + "@jest/types" "^26.2.0" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^26.2.2": + version "26.2.2" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.2.2.tgz#5e8091f2e6c61fdf242af566cb820a4eadc6c4af" + integrity sha512-SliZWon5LNqV/lVXkeowSU6L8++FGOu3f43T01L1Gv6wnFDP00ER0utV9jyK9dVNdXqfMNCN66sfcyar/o7BNw== + dependencies: + "@jest/test-result" "^26.2.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.2.2" + jest-runner "^26.2.2" + jest-runtime "^26.2.2" + +"@jest/transform@^26.2.2": + version "26.2.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.2.2.tgz#86c005c8d5d749ac54d8df53ea58675fffe7a97e" + integrity sha512-c1snhvi5wRVre1XyoO3Eef5SEWpuBCH/cEbntBUd9tI5sNYiBDmO0My/lc5IuuGYKp/HFIHV1eZpSx5yjdkhKw== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^26.2.0" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.2.2" + jest-regex-util "^26.0.0" + jest-util "^26.2.0" + micromatch "^4.0.2" + pirates "^4.0.1" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^25.5.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" + integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + +"@jest/types@^26.2.0": + version "26.2.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.2.0.tgz#b28ca1fb517a4eb48c0addea7fcd9edc4ab45721" + integrity sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + +"@serverless-stack/cli@../../../cli": + version "0.0.4" + dependencies: + "@aws-cdk/core" "^1.54.0" + "@babel/cli" "^7.10.5" + "@babel/core" "^7.10.5" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/preset-env" "^7.10.4" + "@serverless-stack/resources" "^0.0.4" + "@types/jest" "^26.0.7" + "@types/node" "^14.0.27" + aws-cdk "^1.54.0" + chalk "^4.1.0" + core-js "^3.6.5" + cross-spawn "^7.0.3" + jest "^26.1.0" + ts-jest "^26.1.4" + typescript "^3.9.7" + yargs "^15.4.1" + +"@serverless-stack/resources@../../../resources": + version "0.0.4" + dependencies: + "@aws-cdk/core" "^1.55.0" + +"@serverless-stack/resources@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@serverless-stack/resources/-/resources-0.0.4.tgz#88985ad596b407507bbf623a72f49793611f697c" + integrity sha512-9QDTvvl4m+KVT4MtgCDYAONfDuxPLsmm0+3Vg9WM6YKEgKwYfZ6hLoewa/88WluFzC81XCC0s0mGEsM8Q9W/pw== + dependencies: + "@aws-cdk/core" "^1.55.0" + +"@sinonjs/commons@^1.7.0": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" + integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": + version "7.1.9" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d" + integrity sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.1" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04" + integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" + integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.0.13" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.13.tgz#1874914be974a492e1b4cb00585cabb274e8ba18" + integrity sha512-i+zS7t6/s9cdQvbqKDARrcbrPvtJGlbYsMkazo03nTAK3RX9FNrLllXys22uiTGJapPOTZTQ35nHh4ISph4SLQ== + dependencies: + "@babel/types" "^7.3.0" + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/graceful-fs@^4.1.2": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.3.tgz#039af35fe26bec35003e8d86d2ee9c586354348f" + integrity sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" + integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" + +"@types/jest@^26.0.7": + version "26.0.9" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.9.tgz#0543b57da5f0cd949c5f423a00c56c492289c989" + integrity sha512-k4qFfJ5AUKrWok5KYXp2EPm89b0P/KZpl7Vg4XuOTVVQEhLDBDBU3iBFrjjdgd8fLw96aAtmnwhXHl63bWeBQQ== + dependencies: + jest-diff "^25.2.1" + pretty-format "^25.2.1" + +"@types/node@*", "@types/node@^14.0.27": + version "14.0.27" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1" + integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g== + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/prettier@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.0.2.tgz#5bb52ee68d0f8efa9cc0099920e56be6cc4e37f3" + integrity sha512-IkVfat549ggtkZUthUzEX49562eGikhSYeVGX97SkMFn+sTZrgRewXjQ4tPKFPCykZHkX1Zfd9OoELGqKU2jJA== + +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== + +"@types/yargs-parser@*": + version "15.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== + +"@types/yargs@^15.0.0": + version "15.0.5" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79" + integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w== + dependencies: + "@types/yargs-parser" "*" + +abab@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.4.tgz#6dfa57b417ca06d21b2478f0e638302f99c2405c" + integrity sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ== + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^7.1.1: + version "7.4.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" + integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== + +agent-base@4, agent-base@^4.2.0, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + +agent-base@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== + dependencies: + es6-promisify "^5.0.0" + +ajv@^6.10.2, ajv@^6.12.3: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-escapes@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +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@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-4.0.2.tgz#43c72865eadb4ddaaa2fb74852527b6a450d927c" + integrity sha512-B9IZjlGwaxF33UN4oPbfBkyA4V1SxNLeIhR1qY8sRXSsbdUkEHrrOvwlYFPx+8uQeCe9M+FG6KgO+imDmQ79CQ== + dependencies: + archiver-utils "^2.1.0" + async "^3.2.0" + buffer-crc32 "^0.2.1" + glob "^7.1.6" + readable-stream "^3.6.0" + tar-stream "^2.1.2" + zip-stream "^3.0.1" + +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" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +ast-types@0.x.x: + version "0.13.3" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.3.tgz#50da3f28d17bdbc7969a3a2d83a0e4a72ae755a7" + integrity sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA== + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" + integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +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== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +aws-cdk@^1.54.0: + version "1.56.0" + resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-1.56.0.tgz#7947f2bb9258b976669e36f6cd82953c76e54ee3" + integrity sha512-3ZzPrS5vQEIlusmw5YW8SGPUUqhHF34aaoPY2QyFGd9+wnZYDK7xu1/JGfhMtiFVzwh1A3jBRQL372s0hXWhyA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.56.0" + "@aws-cdk/cloudformation-diff" "1.56.0" + "@aws-cdk/cx-api" "1.56.0" + "@aws-cdk/region-info" "1.56.0" + archiver "^4.0.2" + aws-sdk "^2.715.0" + camelcase "^6.0.0" + cdk-assets "1.56.0" + colors "^1.4.0" + decamelize "^4.0.0" + fs-extra "^9.0.1" + glob "^7.1.6" + json-diff "^0.5.4" + minimatch ">=3.0" + promptly "^3.0.3" + proxy-agent "^3.1.1" + semver "^7.2.2" + source-map-support "^0.5.19" + table "^5.4.6" + uuid "^8.2.0" + wrap-ansi "^7.0.0" + yaml "^1.10.0" + yargs "^15.3.1" + +aws-sdk@^2.715.0: + version "2.728.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.728.0.tgz#381805dcac7835b5686694e9468d104595bfce42" + integrity sha512-pUVSxb+04urr6BMHg32Op+kT1IWGmwbelrQKMdLnvgcgysmBu1P4XbGBg8/SmAXWfuqqWjz8YnmFNY46VJE43A== + dependencies: + buffer "4.9.2" + events "1.1.1" + ieee754 "1.1.13" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "3.3.2" + xml2js "0.4.19" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" + integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== + +babel-jest@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.2.2.tgz#70f618f2d7016ed71b232241199308985462f812" + integrity sha512-JmLuePHgA+DSOdOL8lPxCgD2LhPPm+rdw1vnxR73PpIrnmKCS2/aBhtkAcxQWuUcW2hBrH8MJ3LKXE7aWpNZyA== + dependencies: + "@jest/transform" "^26.2.2" + "@jest/types" "^26.2.0" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.2.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-istanbul@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^4.0.0" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.2.0.tgz#bdd0011df0d3d513e5e95f76bd53b51147aca2dd" + integrity sha512-B/hVMRv8Nh1sQ1a3EY8I0n4Y1Wty3NrR5ebOyVT302op+DOAau+xNEImGMsUWOC3++ZlMooCytKz+NgN8aKGbA== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.3.tgz#b4b547acddbf963cba555ba9f9cbbb70bfd044da" + integrity sha512-uyexu1sVwcdFnyq9o8UQYsXwXflIh8LvrF5+cKrYam93ned1CStffB3+BEcsxGSgagoA3GEyjDqO4a/58hyPYQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +babel-preset-jest@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.2.0.tgz#f198201a4e543a43eb40bc481e19736e095fd3e0" + integrity sha512-R1k8kdP3R9phYQugXeNnK/nvCGlBzG4m3EoIIukC80GXb6wCv2XiwPhK6K9MAkQcMszWBYvl2Wm+yigyXFQqXg== + dependencies: + babel-plugin-jest-hoist "^26.2.0" + babel-preset-current-node-syntax "^0.1.2" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bl@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a" + integrity sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.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" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1: + 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" + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browserslist@^4.12.0, browserslist@^4.8.5: + version "4.13.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.13.0.tgz#42556cba011e1b0a2775b611cba6a8eca18e940d" + integrity sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ== + dependencies: + caniuse-lite "^1.0.30001093" + electron-to-chromium "^1.3.488" + escalade "^3.0.1" + node-releases "^1.1.58" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-from@1.x, buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +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.1.0, buffer@^5.5.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" + integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" + integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== + +caniuse-lite@^1.0.30001093: + version "1.0.30001111" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001111.tgz#dd0ce822c70eb6c7c068e4a55c22e19ec1501298" + integrity sha512-xnDje2wchd/8mlJu8sXvWxOGvMgv+uT3iZ3bkIAynKOzToCssWCmkz/ZIkQBs/2pUB4uwnJKVORWQ31UkbVjOg== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +cdk-assets@1.56.0: + version "1.56.0" + resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.56.0.tgz#7a9805ec4f9eb380da50054bf6958aa1f5f86fd5" + integrity sha512-YlZGTCFrnqSSSCBtgAC2u/MjJamJLerCxwf5smMezOwM2Oo83BswqhAQ+ZQLxQdUifqwN2HNqN0juKeS9X5e5g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.56.0" + "@aws-cdk/cx-api" "1.56.0" + archiver "^4.0.2" + aws-sdk "^2.715.0" + glob "^7.1.6" + yargs "^15.3.1" + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +charenc@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cli-color@~0.1.6: + version "0.1.7" + resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-0.1.7.tgz#adc3200fa471cc211b0da7f566b71e98b9d67347" + integrity sha1-rcMgD6RxzCEbDaf1ZrcemLnWc0c= + dependencies: + es5-ext "0.8.x" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +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.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +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== + +colors@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.6, combined-stream@~1.0.6: + 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@^4.0.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.2.1: + 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@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-3.0.0.tgz#833944d84596e537224dd91cf92f5246823d4f1d" + integrity sha512-FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg== + dependencies: + buffer-crc32 "^0.2.13" + crc32-stream "^3.0.1" + normalize-path "^3.0.0" + readable-stream "^2.3.7" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +constructs@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" + integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== + +convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js-compat@^3.6.2: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" + integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== + dependencies: + browserslist "^4.8.5" + semver "7.0.0" + +core-js@^3.6.5: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" + integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +crc32-stream@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85" + integrity sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w== + dependencies: + crc "^3.4.4" + readable-stream "^3.4.0" + +crc@^3.4.4: + version "3.8.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" + integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== + dependencies: + buffer "^5.1.0" + +cross-spawn@^6.0.0: + 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" + +cross-spawn@^7.0.0, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypt@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-uri-to-buffer@1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" + integrity sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ== + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +debug@2, debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decimal.js@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.0.tgz#39466113a9e036111d02f82489b5fd6b0b5ed231" + integrity sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +define-properties@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +degenerator@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" + integrity sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU= + dependencies: + ast-types "0.x.x" + escodegen "1.x.x" + esprima "3.x.x" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" + integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== + +diff-sequences@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.0.0.tgz#0760059a5c287637b842bd7085311db7060e88a6" + integrity sha512-JC/eHYEC3aSS0vZGjuoc4vHA0yAQTzhQQldXMeMF+JlxLGJlCO38Gma82NV9gk1jGFz8mDzUMeaKXvjRRdJ2dg== + +diff@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +difflib@~0.2.1: + version "0.2.4" + resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" + integrity sha1-teMDYabbAjF21WKJLbhZQKcY9H4= + dependencies: + heap ">= 0.2.0" + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +dreamopt@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/dreamopt/-/dreamopt-0.6.0.tgz#d813ccdac8d39d8ad526775514a13dda664d6b4b" + integrity sha1-2BPM2sjTnYrVJndVFKE92mZNa0s= + dependencies: + wordwrap ">=0.0.2" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +electron-to-chromium@^1.3.488: + version "1.3.523" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.523.tgz#494080b318ba929614eebd04405b94c359ea9333" + integrity sha512-D4/3l5DpciddD92IDRtpLearQSGzly8FwBJv+nITvLH8YJrFabpDFe4yuiOJh2MS4/EsXqyQTXyw1toeYPtshQ== + +emittery@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.1.tgz#c02375a927a40948c0345cc903072597f5270451" + integrity sha512-d34LN4L6h18Bzz9xpoku2nPwKxCPlPMr3EEKTkoEBi+1/+b0lcRkRJ1UVyyZaKNeqGR3swcGl6s390DNO4YVgQ== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +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.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" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es5-ext@0.8.x: + version "0.8.2" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab" + integrity sha1-q6jZ4ZQ6iVrJaDemKjmz9V7NlKs= + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +escalade@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" + integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== + +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 sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escodegen@1.x.x, escodegen@^1.14.1: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +esprima@3.x.x: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +events@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= + +exec-sh@^0.3.2: + version "0.3.4" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2" + integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expect@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.2.0.tgz#0140dd9cc7376d7833852e9cda88c05414f1efba" + integrity sha512-8AMBQ9UVcoUXt0B7v+5/U5H6yiUR87L6eKCfjE3spx7Ya5lF+ebUo37MCFBML2OiLfkX1sxmQOZhIDonyVTkcw== + dependencies: + "@jest/types" "^26.2.0" + ansi-styles "^4.0.0" + jest-get-type "^26.0.0" + jest-matcher-utils "^26.2.0" + jest-message-util "^26.2.0" + jest-regex-util "^26.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + 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-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +file-uri-to-path@1, file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +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-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +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@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +ftp@~0.3.10: + version "0.3.10" + resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" + integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0= + dependencies: + readable-stream "1.1.x" + xregexp "2.0.0" + +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== + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + +get-caller-file@^2.0.1: + 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-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" + integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + dependencies: + pump "^3.0.0" + +get-uri@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.4.tgz#d4937ab819e218d4cb5ae18e4f5962bef169cc6a" + integrity sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q== + dependencies: + data-uri-to-buffer "1" + debug "2" + extend "~3.0.2" + file-uri-to-path "1" + ftp "~0.3.10" + readable-stream "2" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +graceful-fs@^4.1.11, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +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-symbols@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +"heap@>= 0.2.0": + version "0.2.6" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" + integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-errors@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== + dependencies: + agent-base "4" + debug "3.1.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-proxy-agent@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81" + integrity sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +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, ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, 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== + +invariant@^2.2.2, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@1.1.5, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5, is-buffer@~1.1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-docker@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" + integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +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-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +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-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-potential-custom-element-name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" + integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +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@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.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 sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + +istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.2.0.tgz#b4946201defe0c919a2f3d601e9f98cb21dacc15" + integrity sha512-+RyJb+F1K/XBLIYiL449vo5D+CvlHv29QveJUWNPXuUicyZcq+tf1wNxmmFeRvAU1+TzhwqczSjxnCCFt7+8iA== + dependencies: + "@jest/types" "^26.2.0" + execa "^4.0.0" + throat "^5.0.0" + +jest-cli@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.2.2.tgz#4c273e5474baafac1eb15fd25aaafb4703f5ffbc" + integrity sha512-vVcly0n/ijZvdy6gPQiQt0YANwX2hLTPQZHtW7Vi3gcFdKTtif7YpI85F8R8JYy5DFSWz4x1OW0arnxlziu5Lw== + dependencies: + "@jest/core" "^26.2.2" + "@jest/test-result" "^26.2.0" + "@jest/types" "^26.2.0" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + import-local "^3.0.2" + is-ci "^2.0.0" + jest-config "^26.2.2" + jest-util "^26.2.0" + jest-validate "^26.2.0" + prompts "^2.0.1" + yargs "^15.3.1" + +jest-config@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.2.2.tgz#f3ebc7e2bc3f49de8ed3f8007152f345bb111917" + integrity sha512-2lhxH0y4YFOijMJ65usuf78m7+9/8+hAb1PZQtdRdgnQpAb4zP6KcVDDktpHEkspBKnc2lmFu+RQdHukUUbiTg== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^26.2.2" + "@jest/types" "^26.2.0" + babel-jest "^26.2.2" + chalk "^4.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + jest-environment-jsdom "^26.2.0" + jest-environment-node "^26.2.0" + jest-get-type "^26.0.0" + jest-jasmine2 "^26.2.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.2.2" + jest-util "^26.2.0" + jest-validate "^26.2.0" + micromatch "^4.0.2" + pretty-format "^26.2.0" + +jest-diff@^25.2.1: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" + integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== + dependencies: + chalk "^3.0.0" + diff-sequences "^25.2.6" + jest-get-type "^25.2.6" + pretty-format "^25.5.0" + +jest-diff@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.2.0.tgz#dee62c771adbb23ae585f3f1bd289a6e8ef4f298" + integrity sha512-Wu4Aopi2nzCsHWLBlD48TgRy3Z7OsxlwvHNd1YSnHc7q1NJfrmyCPoUXrTIrydQOG5ApaYpsAsdfnMbJqV1/wQ== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.0.0" + jest-get-type "^26.0.0" + pretty-format "^26.2.0" + +jest-docblock@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== + dependencies: + detect-newline "^3.0.0" + +jest-each@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.2.0.tgz#aec8efa01d072d7982c900e74940863385fa884e" + integrity sha512-gHPCaho1twWHB5bpcfnozlc6mrMi+VAewVPNgmwf81x2Gzr6XO4dl+eOrwPWxbkYlgjgrYjWK2xgKnixbzH3Ew== + dependencies: + "@jest/types" "^26.2.0" + chalk "^4.0.0" + jest-get-type "^26.0.0" + jest-util "^26.2.0" + pretty-format "^26.2.0" + +jest-environment-jsdom@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.2.0.tgz#6443a6f3569297dcaa4371dddf93acaf167302dc" + integrity sha512-sDG24+5M4NuIGzkI3rJW8XUlrpkvIdE9Zz4jhD8OBnVxAw+Y1jUk9X+lAOD48nlfUTlnt3lbAI3k2Ox+WF3S0g== + dependencies: + "@jest/environment" "^26.2.0" + "@jest/fake-timers" "^26.2.0" + "@jest/types" "^26.2.0" + "@types/node" "*" + jest-mock "^26.2.0" + jest-util "^26.2.0" + jsdom "^16.2.2" + +jest-environment-node@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.2.0.tgz#fee89e06bdd4bed3f75ee2978d73ede9bb57a681" + integrity sha512-4M5ExTYkJ19efBzkiXtBi74JqKLDciEk4CEsp5tTjWGYMrlKFQFtwIVG3tW1OGE0AlXhZjuHPwubuRYY4j4uOw== + dependencies: + "@jest/environment" "^26.2.0" + "@jest/fake-timers" "^26.2.0" + "@jest/types" "^26.2.0" + "@types/node" "*" + jest-mock "^26.2.0" + jest-util "^26.2.0" + +jest-get-type@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" + integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== + +jest-get-type@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.0.0.tgz#381e986a718998dbfafcd5ec05934be538db4039" + integrity sha512-zRc1OAPnnws1EVfykXOj19zo2EMw5Hi6HLbFCSjpuJiXtOWAYIjNsHVSbpQ8bDX7L5BGYGI8m+HmKdjHYFF0kg== + +jest-haste-map@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.2.2.tgz#6d4267b1903854bfdf6a871419f35a82f03ae71e" + integrity sha512-3sJlMSt+NHnzCB+0KhJ1Ut4zKJBiJOlbrqEYNdRQGlXTv8kqzZWjUKQRY3pkjmlf+7rYjAV++MQ4D6g4DhAyOg== + dependencies: + "@jest/types" "^26.2.0" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.2.0" + jest-util "^26.2.0" + jest-worker "^26.2.1" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.1.2" + +jest-jasmine2@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.2.2.tgz#d82b1721fac2b153a4f8b3f0c95e81e702812de2" + integrity sha512-Q8AAHpbiZMVMy4Hz9j1j1bg2yUmPa1W9StBvcHqRaKa9PHaDUMwds8LwaDyzP/2fkybcTQE4+pTMDOG9826tEw== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.2.0" + "@jest/source-map" "^26.1.0" + "@jest/test-result" "^26.2.0" + "@jest/types" "^26.2.0" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^26.2.0" + is-generator-fn "^2.0.0" + jest-each "^26.2.0" + jest-matcher-utils "^26.2.0" + jest-message-util "^26.2.0" + jest-runtime "^26.2.2" + jest-snapshot "^26.2.2" + jest-util "^26.2.0" + pretty-format "^26.2.0" + throat "^5.0.0" + +jest-leak-detector@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.2.0.tgz#073ee6d8db7a9af043e7ce99d8eea17a4fb0cc50" + integrity sha512-aQdzTX1YiufkXA1teXZu5xXOJgy7wZQw6OJ0iH5CtQlOETe6gTSocaYKUNui1SzQ91xmqEUZ/WRavg9FD82rtQ== + dependencies: + jest-get-type "^26.0.0" + pretty-format "^26.2.0" + +jest-matcher-utils@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.2.0.tgz#b107af98c2b8c557ffd46c1adf06f794aa52d622" + integrity sha512-2cf/LW2VFb3ayPHrH36ZDjp9+CAeAe/pWBAwsV8t3dKcrINzXPVxq8qMWOxwt5BaeBCx4ZupVGH7VIgB8v66vQ== + dependencies: + chalk "^4.0.0" + jest-diff "^26.2.0" + jest-get-type "^26.0.0" + pretty-format "^26.2.0" + +jest-message-util@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.2.0.tgz#757fbc1323992297092bb9016a71a2eb12fd22ea" + integrity sha512-g362RhZaJuqeqG108n1sthz5vNpzTNy926eNDszo4ncRbmmcMRIUAZibnd6s5v2XSBCChAxQtCoN25gnzp7JbQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.2.0" + "@types/stack-utils" "^1.0.1" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + slash "^3.0.0" + stack-utils "^2.0.2" + +jest-mock@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.2.0.tgz#a1b3303ab38c34aa1dbbc16ab57cdc1a59ed50d1" + integrity sha512-XeC7yWtWmWByoyVOHSsE7NYsbXJLtJNgmhD7z4MKumKm6ET0si81bsSLbQ64L5saK3TgsHo2B/UqG5KNZ1Sp/Q== + dependencies: + "@jest/types" "^26.2.0" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + +jest-resolve-dependencies@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.2.2.tgz#2ad3cd9281730e9a5c487cd846984c5324e47929" + integrity sha512-S5vufDmVbQXnpP7435gr710xeBGUFcKNpNswke7RmFvDQtmqPjPVU/rCeMlEU0p6vfpnjhwMYeaVjKZAy5QYJA== + dependencies: + "@jest/types" "^26.2.0" + jest-regex-util "^26.0.0" + jest-snapshot "^26.2.2" + +jest-resolve@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.2.2.tgz#324a20a516148d61bffa0058ed0c77c510ecfd3e" + integrity sha512-ye9Tj/ILn/0OgFPE/3dGpQPUqt4dHwIocxt5qSBkyzxQD8PbL0bVxBogX2FHxsd3zJA7V2H/cHXnBnNyyT9YoQ== + dependencies: + "@jest/types" "^26.2.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.2.0" + read-pkg-up "^7.0.1" + resolve "^1.17.0" + slash "^3.0.0" + +jest-runner@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.2.2.tgz#6d03d057886e9c782e10b2cf37443f902fe0e39e" + integrity sha512-/qb6ptgX+KQ+aNMohJf1We695kaAfuu3u3ouh66TWfhTpLd9WbqcF6163d/tMoEY8GqPztXPLuyG0rHRVDLxCA== + dependencies: + "@jest/console" "^26.2.0" + "@jest/environment" "^26.2.0" + "@jest/test-result" "^26.2.0" + "@jest/types" "^26.2.0" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.7.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-config "^26.2.2" + jest-docblock "^26.0.0" + jest-haste-map "^26.2.2" + jest-leak-detector "^26.2.0" + jest-message-util "^26.2.0" + jest-resolve "^26.2.2" + jest-runtime "^26.2.2" + jest-util "^26.2.0" + jest-worker "^26.2.1" + source-map-support "^0.5.6" + throat "^5.0.0" + +jest-runtime@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.2.2.tgz#2480ff79320680a643031dd21998d7c63d83ab68" + integrity sha512-a8VXM3DxCDnCIdl9+QucWFfQ28KdqmyVFqeKLigHdErtsx56O2ZIdQkhFSuP1XtVrG9nTNHbKxjh5XL1UaFDVQ== + dependencies: + "@jest/console" "^26.2.0" + "@jest/environment" "^26.2.0" + "@jest/fake-timers" "^26.2.0" + "@jest/globals" "^26.2.0" + "@jest/source-map" "^26.1.0" + "@jest/test-result" "^26.2.0" + "@jest/transform" "^26.2.2" + "@jest/types" "^26.2.0" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-config "^26.2.2" + jest-haste-map "^26.2.2" + jest-message-util "^26.2.0" + jest-mock "^26.2.0" + jest-regex-util "^26.0.0" + jest-resolve "^26.2.2" + jest-snapshot "^26.2.2" + jest-util "^26.2.0" + jest-validate "^26.2.0" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.3.1" + +jest-serializer@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.2.0.tgz#92dcae5666322410f4bf50211dd749274959ddac" + integrity sha512-V7snZI9IVmyJEu0Qy0inmuXgnMWDtrsbV2p9CRAcmlmPVwpC2ZM8wXyYpiugDQnwLHx0V4+Pnog9Exb3UO8M6Q== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + +jest-snapshot@^26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.2.2.tgz#9d2eda083a4a1017b157e351868749bd63211799" + integrity sha512-NdjD8aJS7ePu268Wy/n/aR1TUisG0BOY+QOW4f6h46UHEKOgYmmkvJhh2BqdVZQ0BHSxTMt04WpCf9njzx8KtA== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^26.2.0" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.2.0" + graceful-fs "^4.2.4" + jest-diff "^26.2.0" + jest-get-type "^26.0.0" + jest-haste-map "^26.2.2" + jest-matcher-utils "^26.2.0" + jest-message-util "^26.2.0" + jest-resolve "^26.2.2" + natural-compare "^1.4.0" + pretty-format "^26.2.0" + semver "^7.3.2" + +jest-util@26.x, jest-util@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.2.0.tgz#0597d2a27c559340957609f106c408c17c1d88ac" + integrity sha512-YmDwJxLZ1kFxpxPfhSJ0rIkiZOM0PQbRcfH0TzJOhqCisCAsI1WcmoQqO83My9xeVA2k4n+rzg2UuexVKzPpig== + dependencies: + "@jest/types" "^26.2.0" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + +jest-validate@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.2.0.tgz#97fedf3e7984b7608854cbf925b9ca6ebcbdb78a" + integrity sha512-8XKn3hM6VIVmLNuyzYLCPsRCT83o8jMZYhbieh4dAyKLc4Ypr36rVKC+c8WMpWkfHHpGnEkvWUjjIAyobEIY/Q== + dependencies: + "@jest/types" "^26.2.0" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.0.0" + leven "^3.1.0" + pretty-format "^26.2.0" + +jest-watcher@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.2.0.tgz#45bdf2fecadd19c0a501f3b071a474dca636825b" + integrity sha512-674Boco4Joe0CzgKPL6K4Z9LgyLx+ZvW2GilbpYb8rFEUkmDGgsZdv1Hv5rxsRpb1HLgKUOL/JfbttRCuFdZXQ== + dependencies: + "@jest/test-result" "^26.2.0" + "@jest/types" "^26.2.0" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^26.2.0" + string-length "^4.0.1" + +jest-worker@^26.2.1: + version "26.2.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.2.1.tgz#5d630ab93f666b53f911615bc13e662b382bd513" + integrity sha512-+XcGMMJDTeEGncRb5M5Zq9P7K4sQ1sirhjdOxsN1462h6lFo9w59bl2LVQmdGEEeU3m+maZCkS2Tcc9SfCHO4A== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest@^26.1.0: + version "26.2.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.2.2.tgz#a022303887b145147204c5f66e6a5c832333c7e7" + integrity sha512-EkJNyHiAG1+A8pqSz7cXttoVa34hOEzN/MrnJhYnfp5VHxflVcf2pu3oJSrhiy6LfIutLdWo+n6q63tjcoIeig== + dependencies: + "@jest/core" "^26.2.2" + import-local "^3.0.2" + jest-cli "^26.2.2" + +jmespath@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" + integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc= + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@^16.2.2: + version "16.3.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.3.0.tgz#75690b7dac36c67be49c336dcd7219bbbed0810c" + integrity sha512-zggeX5UuEknpdZzv15+MS1dPYG0J/TftiiNunOeNxSl3qr8Z6cIlQpN0IdJa44z9aFxZRIVqRncvEhQ7X5DtZg== + dependencies: + abab "^2.0.3" + acorn "^7.1.1" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.2.0" + data-urls "^2.0.0" + decimal.js "^10.2.0" + domexception "^2.0.1" + escodegen "^1.14.1" + html-encoding-sniffer "^2.0.1" + is-potential-custom-element-name "^1.0.0" + nwsapi "^2.2.0" + parse5 "5.1.1" + request "^2.88.2" + request-promise-native "^1.0.8" + saxes "^5.0.0" + symbol-tree "^3.2.4" + tough-cookie "^3.0.1" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + ws "^7.2.3" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-diff@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/json-diff/-/json-diff-0.5.4.tgz#7bc8198c441756632aab66c7d9189d365a7a035a" + integrity sha512-q5Xmx9QXNOzOzIlMoYtLrLiu4Jl/Ce2bn0CNcv54PhyH89CI4GWlGVDye8ei2Ijt9R3U+vsWPsXpLUNob8bs8Q== + dependencies: + cli-color "~0.1.6" + difflib "~0.2.1" + dreamopt "~0.6.0" + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json5@2.x, json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" + integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +lazystream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= + dependencies: + readable-stream "^2.0.5" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== + dependencies: + leven "^3.1.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash.union@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= + +lodash@^4.17.14, lodash@^4.17.19: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.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.x: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +md5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" + integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk= + dependencies: + charenc "~0.0.1" + crypt "~0.0.1" + is-buffer "~1.1.1" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +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== + +minimatch@>=3.0, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@1.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + 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.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nan@^2.12.1: + version "2.14.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +netmask@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" + integrity sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU= + +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-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-notifier@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-7.0.2.tgz#3a70b1b70aca5e919d0b1b022530697466d9c675" + integrity sha512-ux+n4hPVETuTL8+daJXTOC6uKLgMsl1RYfFv7DKRzyvzBapqco0rZZ9g72ZN8VS6V+gvNYHYa/ofcCY8fkJWsA== + dependencies: + growly "^1.3.0" + is-wsl "^2.2.0" + semver "^7.3.2" + shellwords "^0.1.1" + uuid "^8.2.0" + which "^2.0.2" + +node-releases@^1.1.58: + version "1.1.60" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084" + integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA== + +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +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== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-keys@^1.0.11, object-keys@^1.0.12: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +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 sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.1.tgz#5c8016847b0d67fcedb7eef254751cfcdc7e9418" + integrity sha512-ZpZpjcJeugQfWsfyQlshVoowIIQ1qBGSVll4rfDq6JJVO//fesjoX808hXWfBjY+ROZgpKDI5TRSRBSoJiZ8eg== + dependencies: + mimic-fn "^2.1.0" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +p-each-series@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" + integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pac-proxy-agent@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz#115b1e58f92576cac2eba718593ca7b0e37de2ad" + integrity sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ== + dependencies: + agent-base "^4.2.0" + debug "^4.1.1" + get-uri "^2.0.0" + http-proxy-agent "^2.1.0" + https-proxy-agent "^3.0.0" + pac-resolver "^3.0.0" + raw-body "^2.2.0" + socks-proxy-agent "^4.0.1" + +pac-resolver@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26" + integrity sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA== + dependencies: + co "^4.6.0" + degenerator "^1.0.4" + ip "^1.1.5" + netmask "^1.0.6" + thunkify "^2.1.2" + +parse-json@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.1.tgz#7cfe35c1ccd641bce3981467e6c2ece61b3b3878" + integrity sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + lines-and-columns "^1.1.6" + +parse5@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +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 sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.0.5: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +pretty-format@^25.2.1, pretty-format@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" + integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== + dependencies: + "@jest/types" "^25.5.0" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + +pretty-format@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.2.0.tgz#83ecc8d7de676ff224225055e72bd64821cec4f1" + integrity sha512-qi/8IuBu2clY9G7qCXgCdD1Bf9w+sXakdHTRToknzMtVy0g7c4MBWaZy7MfB7ndKZovRO6XRwJiAYqq+MC7SDA== + dependencies: + "@jest/types" "^26.2.0" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + +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== + +promptly@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/promptly/-/promptly-3.0.3.tgz#e178f722e73d82c60d019462044bccfdd9872f42" + integrity sha512-EWnzOsxVKUjqKeE6SStH1/cO4+DE44QolaoJ4ojGd9z6pcNkpgfJKr1ncwxrOFHSTIzoudo7jG8y0re30/LO1g== + dependencies: + pify "^3.0.0" + read "^1.0.4" + +prompts@^2.0.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" + integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.4" + +proxy-agent@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.1.1.tgz#7e04e06bf36afa624a1540be247b47c970bd3014" + integrity sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw== + dependencies: + agent-base "^4.2.0" + debug "4" + http-proxy-agent "^2.1.0" + https-proxy-agent "^3.0.0" + lru-cache "^5.1.1" + pac-proxy-agent "^3.0.1" + proxy-from-env "^1.0.0" + socks-proxy-agent "^4.0.1" + +proxy-from-env@^1.0.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== + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +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 sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^2.1.0, punycode@^2.1.1: + 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.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +raw-body@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" + integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== + dependencies: + bytes "3.1.0" + http-errors "1.7.3" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-is@^16.12.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +read@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + dependencies: + mute-stream "~0.0.4" + +readable-stream@1.1.x: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.3.7: + 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.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" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== + +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpu-core@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.8: + version "1.0.9" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== + dependencies: + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.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 sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.10.0, resolve@^1.17.0, resolve@^1.3.2: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +safe-buffer@^5.0.1, safe-buffer@^5.1.2, 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@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +sax@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + integrity sha1-e45lYZCyKOgaZq6nSEgNgozS03o= + +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== + +saxes@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@7.x, semver@^7.2.2, semver@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.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 sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +sisteransi@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +socks-proxy-agent@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" + +socks@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.19, source-map-support@^0.5.6: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^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 sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stack-utils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593" + integrity sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg== + dependencies: + escape-string-regexp "^2.0.0" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.5.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +string-length@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" + integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +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@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +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@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" + integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +table@^5.4.6: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +tar-stream@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.3.tgz#1e2022559221b7866161660f118255e20fa79e41" + integrity sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA== + dependencies: + bl "^4.0.1" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +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== + +thunkify@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" + integrity sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0= + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +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" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tough-cookie@^2.3.3, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tough-cookie@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" + integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== + dependencies: + ip-regex "^2.1.0" + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" + integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== + dependencies: + punycode "^2.1.1" + +ts-jest@^26.1.4: + version "26.1.4" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.1.4.tgz#87d41a96016a8efe4b8cc14501d3785459af6fa6" + integrity sha512-Nd7diUX6NZWfWq6FYyvcIPR/c7GbEF75fH1R6coOp3fbNzbRJBZZAn0ueVS0r8r9ral1VcrpneAFAwB3TsVS1Q== + dependencies: + bs-logger "0.x" + buffer-from "1.x" + fast-json-stable-stringify "2.x" + jest-util "26.x" + json5 "2.x" + lodash.memoize "4.x" + make-error "1.x" + mkdirp "1.x" + semver "7.x" + yargs-parser "18.x" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typescript@^3.9.7: + version "3.9.7" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + integrity sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +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 sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.2.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" + integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== + +v8-to-istanbul@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6" + integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.1.0.tgz#c628acdcf45b82274ce7281ee31dd3c839791771" + integrity sha512-vEIkwNi9Hqt4TV9RdnaBPNt+E2Sgmo3gePebCRgZ1R7g6d23+53zCTnuB0amKI4AXq6VM8jj2DUAa0S1vjJxkw== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^2.0.2" + webidl-conversions "^5.0.0" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +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.1, 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" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@>=0.0.2: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.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 sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^7.2.3: + version "7.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" + integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +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 sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xregexp@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" + integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yaml@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" + integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== + +yargs-parser@18.x, yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^15.3.1, yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +zip-stream@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-3.0.1.tgz#cb8db9d324a76c09f9b76b31a12a48638b0b9708" + integrity sha512-r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ== + dependencies: + archiver-utils "^2.1.0" + compress-commons "^3.0.0" + readable-stream "^3.6.0" diff --git a/packages/cli/tests/jest/jest.test.js b/packages/cli/test/jest/jest.test.js similarity index 100% rename from packages/cli/tests/jest/jest.test.js rename to packages/cli/test/jest/jest.test.js diff --git a/packages/cli/tests/jest/lib/dynamodb.js b/packages/cli/test/jest/lib/dynamodb.js similarity index 100% rename from packages/cli/tests/jest/lib/dynamodb.js rename to packages/cli/test/jest/lib/dynamodb.js diff --git a/packages/cli/tests/jest/package.json b/packages/cli/test/jest/package.json similarity index 100% rename from packages/cli/tests/jest/package.json rename to packages/cli/test/jest/package.json diff --git a/packages/cli/tests/jest/tests/dynamodb.test.js b/packages/cli/test/jest/test/dynamodb.test.js similarity index 100% rename from packages/cli/tests/jest/tests/dynamodb.test.js rename to packages/cli/test/jest/test/dynamodb.test.js diff --git a/packages/cli/tests/jest/yarn.lock b/packages/cli/test/jest/yarn.lock similarity index 100% rename from packages/cli/tests/jest/yarn.lock rename to packages/cli/test/jest/yarn.lock diff --git a/packages/cli/tests/jest-ts/yarn.lock b/packages/cli/tests/jest-ts/yarn.lock deleted file mode 100644 index 1966385063..0000000000 --- a/packages/cli/tests/jest-ts/yarn.lock +++ /dev/null @@ -1,567 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-cdk/assert@^1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.55.0.tgz#04114356c911afae0c26b99f6cd91823c2676e9b" - integrity sha512-f+EXzBpFPl305EnGXH3DJLY/X51cU/u4enCE9BdCq4AnyR3/eqGpKuhav3lxZ0Yu704j9wZKd2M+3Hn2PPjWvA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cloudformation-diff" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/assets@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.55.0.tgz#02442aea514d08b8f1fb744a3e3f944ab9a5e389" - integrity sha512-fOdk2eW8GEgS9vwgpt/BljV1IvCZ/Et7zYcL331+3XAxZpptOYDjNvV/tfhadX9fe1DhwZnsdqQqDO7eAY2+ig== - dependencies: - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-applicationautoscaling@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.55.0.tgz#ba0a1ee4b8bbe5f565c8d76d32408fcfdd8ba046" - integrity sha512-6BCvybrCYqhmtIckpAdDmNvn6B85+D1tL0ZJofiF8/0DOvuV5noZyzJwvwMO4q/WLzqavxoMSxBd7OswVX3trw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.55.0" - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-autoscaling-common@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.55.0.tgz#dc0f64351b2d388d9a195f4316a76ec349cee3f5" - integrity sha512-uQTjJmez/2QOYjmwLhQ/nQg4ywsoWvciS/y55nIlp409Ttuw/RapsrRhVAj3q58/3uTERuIUha4vpNe5C2gUKA== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-cloudformation@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.55.0.tgz#bf902768eb09623ae8e9439e1cde03619e3cd62c" - integrity sha512-Jd8ArtzRv6gKKrGlwMXnn5Gsg3xv8V0esRn3P9jfoNR7qMkH/u2O9mGJ8C2UXMdeAeDPJld0Xk5DxFYtHFrx2Q== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-sns" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-cloudwatch@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.55.0.tgz#3e58110d008b9dc0c0cd8a8973b4f0b1ca385fc3" - integrity sha512-WxJyDnrYHH7ox/1gWe4v+TfFR6LC7Q/bQS5jfdG1Wm3ZHzlSjOegcIw7jrkOXY5QI6N4jHM5bVwpQgX9cS8/dQ== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-codeguruprofiler@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.55.0.tgz#9e1504db79fe469dbd1678b9ed1e020f30b816c8" - integrity sha512-MeXlEPAQjhCOs7+u1Q+Stva97E/QkE37E5EgoNRWVMoel8TPlfg3/ogYlsvJzfh2/7N11Z2jsU2kPaFw0czdfw== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - -"@aws-cdk/aws-dynamodb@^1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.55.0.tgz#da2da006d03933385cd9aebf2404e175cc730cda" - integrity sha512-MqiTSZ2B1XFoQ28Y9GCtSPRyQGtTwxJxOiECXQZ3axnCz/3x3HFilvvBL31QsBmGkkRuiCNZ67u6+VUCn3J+LQ== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.55.0" - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/custom-resources" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-ec2@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.55.0.tgz#a6c2ab965bd75dd3f255027c11314775289e53a8" - integrity sha512-3FQ6X7BALEFMScsYUNCf+wAY4Zw6FE8V42S6i/OVZhZXY3/iZqiJh/BAJruj/VM1QO9nPRYdF5lnTwFssp17PQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-ssm" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - "@aws-cdk/region-info" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-efs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.55.0.tgz#dfff8ceb245d2cc9f03b158c9d55b64d6a57c0cf" - integrity sha512-BGbF9vby78BNAPwyqzdsErrPgkC0ZCmhIekiTpMdlmhNFuMf6GJMOXY2rr81N7mW6HaAMe6Lqd6w+Te/G0IzHA== - dependencies: - "@aws-cdk/aws-ec2" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-events@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.55.0.tgz#3d784b0bf7ac2a2ebe6e52a9b89365d30bdd9398" - integrity sha512-jL9bygowe/6kYoAIApBcYi92zSjSxyn43CfOOILkplEsxdg3nNKfgnkQ4JgS1WwCuBNOhPAY6Zzc6bLKDi4Igw== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-iam@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.55.0.tgz#fedac6b83a9a7ee48e4cda6d877f684f1dac0056" - integrity sha512-cAKQN1sEdDXZ2xFOOoWQskDh/GuQS81m6Qd/o6KQeFli8ftXSlD5dq5+UIs+oHBwhE8xwYJLbHDx79L3lQcMug== - dependencies: - "@aws-cdk/core" "1.55.0" - "@aws-cdk/region-info" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-kms@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.55.0.tgz#eaaa9b2ea9b7f65d3bdcab8109104477b2ff2baf" - integrity sha512-GSNKEn2w5QwKF+vwlz0N9TPnRh/p/tOFHb+AuNmNq4y2f3c3rTmW/anJu+ISE5qIVzTnev6bLQ+y7Iidt8aXKQ== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-lambda@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.55.0.tgz#751c89a64797bc4ae1ea0801fb39083752455ff9" - integrity sha512-/5df6QR3vbJr/G5/HFmxG/QvxPIjSdzSgaXjK7a/7tzxRISWPaYLN4sVZQHVDYHPe+WZ291uulYE+juiyGrvqQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-codeguruprofiler" "1.55.0" - "@aws-cdk/aws-ec2" "1.55.0" - "@aws-cdk/aws-efs" "1.55.0" - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-s3-assets" "1.55.0" - "@aws-cdk/aws-sqs" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-logs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.55.0.tgz#267aa66bff737e47be5dc3d326ea936cf73c62e6" - integrity sha512-sUflJ+MuB69MwHhtWZUY8jf2JLxXXbmGzs/T3VHnscULAsQoo6Tu5v/kXvtXU04CC8YxUG6+hQkO6bl3bF6M1Q== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-s3-assets@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.55.0.tgz#7243ee94f767d6686b6b9c0caaf9af3aa38a656d" - integrity sha512-zyYFRw1xFmuONiuj9ym9HsnYyAeE2a1L1q2/vpvlXARLIsk7JDG37nnnh40ccm2/YQAoVLXqKZb+VTS5cUKhgA== - dependencies: - "@aws-cdk/assets" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-s3@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.55.0.tgz#41a0f134608fa068d0ea2b451a5ec039da4ca372" - integrity sha512-VNBTw+ADXcNuIi+ziGpEiGN0kxE/32MGUK6esePMxRr+zv9JqE4q0YwiSSjp0FWnM1g3mufkergXfNcGCCPMrw== - dependencies: - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-sns-subscriptions@^1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.55.0.tgz#480081c3d8abf0bb1bb7067cefecf0ca29bce433" - integrity sha512-Mk5oKUIlXnw+Uoox88IY4Jlzi09DhiDnJqtZ7p2avyofzZ99ZZihncXwm6XxFe1yCo+c+jdEK0qWklyFWaKfOg== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/aws-sns" "1.55.0" - "@aws-cdk/aws-sqs" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-sns@1.55.0", "@aws-cdk/aws-sns@^1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.55.0.tgz#e3a6ef9b7235e39dba8a3f172da31d63e0d961b1" - integrity sha512-WR2ogCi6ngMsZAxq1O71WTxYz1GC9oSxK/K1sj7lboDW712OJXgaz5Giat073TYosyuiZD0uUvSPRvBfxbfEIg== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-sqs" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-sqs@1.55.0", "@aws-cdk/aws-sqs@^1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.55.0.tgz#b70e100e941aad369557ae6ed991a40972b4e20b" - integrity sha512-CpXi33lBg8PgMJvxwRpPOQmD+DLUaUHxRpjjjLP6tfUDwk5cIGwRG+QSTd4FmNcDm3Cvb1x0WI8PSdwfgaOSiw== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-ssm@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.55.0.tgz#5b51cc6875956829df499b3c9ed34b41e47c63ce" - integrity sha512-lTJj0rDZS5qVapV4WI/yfm3B235hJtMgDHMRMoOAZTNQSgHFvp2/5l1gSKOfqlanS90aeLUIfEXWlXALnwveLg== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/cfnspec@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.55.0.tgz#6a6f78b0269ff8dae55fc2e986cca7469937e3fb" - integrity sha512-Bg4tTgtKMjBKWtyP2/V0atb3TmqshIW+j61gRigEhom1aS49QzvA6YpTjv6vzylQIH0+hdLYiCX6brBiYEXhTg== - dependencies: - md5 "^2.2.1" - -"@aws-cdk/cloud-assembly-schema@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" - integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/cloudformation-diff@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.55.0.tgz#f39fb63bd6388c2401373bf200575efe513a5045" - integrity sha512-lBFiLQXaJmf4hR+RzSXwAGun/NgANzK5p/Qm5ETgqTLVPRksJJruaFgFO/Pr0qIRpDbtxrkigoeFZxCgFkFqAQ== - dependencies: - "@aws-cdk/cfnspec" "1.55.0" - colors "^1.4.0" - diff "^4.0.2" - fast-deep-equal "^3.1.3" - string-width "^4.2.0" - table "^5.4.6" - -"@aws-cdk/core@1.55.0", "@aws-cdk/core@^1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" - integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - fs-extra "^9.0.1" - minimatch "^3.0.4" - -"@aws-cdk/custom-resources@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.55.0.tgz#af33b6dc28a9431d60cd6e7774a166919a7622be" - integrity sha512-AKc9y8RYAU4J2b6rB902jq66vwOzshsgNYl5dTS8cFxdCjR4YthuaAyatxXMBJz4SepL+X6kwjxF1ed6/DFFFQ== - dependencies: - "@aws-cdk/aws-cloudformation" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-sns" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/cx-api@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" - integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - semver "^7.2.2" - -"@aws-cdk/region-info@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" - integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== - -"@serverless-stack/resources@../../../resources": - version "0.0.1" - dependencies: - "@aws-cdk/core" "^1.55.0" - -ajv@^6.10.2: - version "6.12.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" - integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -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== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -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" - -charenc@~0.0.1: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -colors@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -constructs@^3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== - -crypt@~0.0.1: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= - -diff@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -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== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - 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-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -is-buffer@~1.1.1: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -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== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== - -lodash@^4.17.14: - version "4.17.19" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" - integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== - -md5@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" - integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk= - dependencies: - charenc "~0.0.1" - crypt "~0.0.1" - is-buffer "~1.1.1" - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -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== - -semver@^7.2.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -table@^5.4.6: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" diff --git a/packages/create-serverless-stack/bin/index.js b/packages/create-serverless-stack/bin/index.js new file mode 100755 index 0000000000..c048eeebd4 --- /dev/null +++ b/packages/create-serverless-stack/bin/index.js @@ -0,0 +1,158 @@ +#!/usr/bin/env node + +"use strict"; + +// Makes the script crash on unhandled rejections instead of silently +// ignoring them. In the future, promise rejections that are not handled will +// terminate the Node.js process with a non-zero exit code. +process.on("unhandledRejection", (err) => { + throw err; +}); + +const fs = require("fs"); +const path = require("path"); +const yargs = require("yargs"); +const chalk = require("chalk"); +const spawn = require("cross-spawn"); +const camelCase = require("camelcase"); +const execSync = require("child_process").execSync; + +const paths = require("../config/paths"); + +const cmd = { + i: "create-serverless-stack", + r: "resources", +}; + +const argv = yargs + .usage(`${cmd.i} `) + .demandCommand(1) + + .command( + `${cmd.r} [name]`, + "Initialize a template for the resources in your Serverless Stack", + function (yargs) { + yargs.positional("name", { + type: "string", + default: "my-serverless-resources", + describe: "The name of your Serverless Stack app", + }); + } + ) + + .option("use-npm", { + type: "boolean", + default: false, + describe: "Use npm instead of Yarn", + }) + .option("language", { + type: "string", + default: "javascript", + choices: ["javascript", "typescript"], + describe: "The language of the template", + }) + + .version() + .alias("version", "v") + .help("help") + .alias("help", "h") + .epilogue("For more information, visit www.serverless-stack.com") + + .strictCommands(true) + .wrap(yargs.terminalWidth()) + + .fail((msg, err) => { + if (err) throw err; + + console.log(chalk.red(msg) + "\n"); + + yargs.showHelp(); + + process.exit(1); + }) + .parse(); + +function shouldUseYarn() { + try { + execSync("yarnpkg --version", { stdio: "ignore" }); + return true; + } catch (e) { + return false; + } +} + +function processString(str) { + const sstVersion = require("../package.json").version; + return str + .replace(/%name%/g, appName) + .replace(/%cdk-version%/g, cdkVersion) + .replace(/%sst-version%/g, sstVersion) + .replace(/%name\.camelCased%/g, camelCase(appName)) + .replace(/%name\.PascalCased%/g, camelCase(appName, { pascalCase: true })); +} + +function processFile(templatePath, toFile) { + const template = fs.readFileSync(templatePath, { encoding: "utf-8" }); + fs.writeFileSync(toFile, processString(template)); +} + +function copyFiles(sourceDirectory, targetDirectory) { + const files = fs.readdirSync(sourceDirectory); + + for (var i = 0, l = files.length; i < l; i++) { + const file = files[i]; + + const fromFile = path.join(sourceDirectory, file); + const toFile = path.join(targetDirectory, processString(file)); + + if (fs.statSync(fromFile).isDirectory()) { + fs.mkdirSync(toFile); + copyFiles(fromFile, toFile); + continue; + } else if (file.match(/^.*\.template\.[^.]+$/)) { + processFile(fromFile, toFile.replace(/\.template(\.[^.]+)$/, "$1")); + continue; + } else if (file.match(/\.(swp|swo|DS_FILE)$/i)) { + continue; + } else { + fs.copyFileSync(fromFile, toFile); + } + } +} + +const appName = argv.name; +const cdkVersion = "1.56.0"; +const templateType = argv._[0]; +const templateLanguage = argv.language; +const useYarn = argv.useNpm ? false : shouldUseYarn(); + +const appPath = path.join(paths.parentPath, appName); +const templatePath = path.join( + paths.ownTemplatesPath, + templateType, + templateLanguage +); + +// Create app directory +if (!fs.existsSync(appPath)) { + fs.mkdirSync(appPath); +} else { + console.log(chalk.red(`A directory called ${appName} already exists.`)); + process.exit(1); +} + +// Copy template files to app directory +copyFiles(templatePath, appPath); + +// Install dependencies +if (useYarn) { + spawn.sync("yarn", [], { + stdio: "inherit", + cwd: appPath, + }); +} else { + spawn.sync("npm", ["install"], { + stdio: "inherit", + cwd: appPath, + }); +} diff --git a/packages/create-serverless-stack/config/paths.js b/packages/create-serverless-stack/config/paths.js new file mode 100644 index 0000000000..65e795b922 --- /dev/null +++ b/packages/create-serverless-stack/config/paths.js @@ -0,0 +1,21 @@ +/** + * Based on https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/config/paths.js + */ +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +// Make sure any symlinks in the project folder are resolved: +// https://github.com/facebook/create-react-app/issues/637 +const appDirectory = fs.realpathSync(process.cwd()); +const resolveApp = (relativePath) => path.resolve(appDirectory, relativePath); + +const resolveOwn = (relativePath) => + path.resolve(__dirname, "..", relativePath); + +module.exports = { + parentPath: resolveApp("."), + ownPath: resolveOwn("."), + ownTemplatesPath: resolveOwn("./templates"), +}; diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json new file mode 100644 index 0000000000..4d97ca5482 --- /dev/null +++ b/packages/create-serverless-stack/package.json @@ -0,0 +1,28 @@ +{ + "name": "create-serverless-stack", + "version": "0.0.4", + "homepage": "https://serverless-stack.com", + "description": "Create Serverless Stack apps.", + "bin": { + "create-serverless-stack": "./bin/index.js" + }, + "author": { + "name": "Anomaly Innovations", + "url": "https://anoma.ly" + }, + "repository": { + "type": "git", + "url": "https://github.com/serverless-stack/serverless-stack.git", + "directory": "packages/create-serverless-stack" + }, + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "dependencies": { + "camelcase": "^6.0.0", + "chalk": "^4.1.0", + "cross-spawn": "^7.0.3", + "yargs": "^15.4.1" + } +} diff --git a/packages/create-serverless-stack/templates/resources/javascript/.template.gitignore b/packages/create-serverless-stack/templates/resources/javascript/.template.gitignore new file mode 100644 index 0000000000..c39d5a3792 --- /dev/null +++ b/packages/create-serverless-stack/templates/resources/javascript/.template.gitignore @@ -0,0 +1,17 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules + +# testing +/coverage + +# production +/build + +# misc +.DS_Store + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/packages/create-serverless-stack/templates/resources/javascript/README.template.md b/packages/create-serverless-stack/templates/resources/javascript/README.template.md new file mode 100644 index 0000000000..16bea40876 --- /dev/null +++ b/packages/create-serverless-stack/templates/resources/javascript/README.template.md @@ -0,0 +1,3 @@ +# Getting Started with Serverless Stack Resources + +This project was bootstrapped with [Create Serverless Stack](https://github.com/serverless-stack/serverless-stack). diff --git a/packages/create-serverless-stack/templates/resources/javascript/lib/%name.PascalCased%Stack.template.js b/packages/create-serverless-stack/templates/resources/javascript/lib/%name.PascalCased%Stack.template.js new file mode 100644 index 0000000000..c4531ae27b --- /dev/null +++ b/packages/create-serverless-stack/templates/resources/javascript/lib/%name.PascalCased%Stack.template.js @@ -0,0 +1,9 @@ +import * as sst from "@serverless-stack/resources"; + +export default class %name.PascalCased%Stack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + // Define your stack + } +} diff --git a/packages/create-serverless-stack/templates/resources/javascript/lib/index.template.js b/packages/create-serverless-stack/templates/resources/javascript/lib/index.template.js new file mode 100644 index 0000000000..a5f9cc880b --- /dev/null +++ b/packages/create-serverless-stack/templates/resources/javascript/lib/index.template.js @@ -0,0 +1,7 @@ +import %name.PascalCased%Stack from "./%name.PascalCased%Stack"; + +export default function main(app) { + new %name.PascalCased%Stack(app, "%name.PascalCased%Stack"); + + // Add more stacks +} diff --git a/packages/create-serverless-stack/templates/resources/javascript/package.template.json b/packages/create-serverless-stack/templates/resources/javascript/package.template.json new file mode 100644 index 0000000000..87d87ffb34 --- /dev/null +++ b/packages/create-serverless-stack/templates/resources/javascript/package.template.json @@ -0,0 +1,18 @@ +{ + "name": "%name%", + "version": "0.1.0", + "scripts": { + "test": "sst test", + "build": "sst build", + "deploy": "sst deploy", + "remove": "sst remove" + }, + "devDependencies": { + "@aws-cdk/assert": "%cdk-version%" + }, + "dependencies": { + "@serverless-stack/cli": "%sst-version%", + "@serverless-stack/resources": "%sst-version%", + "@aws-cdk/core": "%cdk-version%" + } +} diff --git a/packages/create-serverless-stack/templates/resources/javascript/sst.template.json b/packages/create-serverless-stack/templates/resources/javascript/sst.template.json new file mode 100644 index 0000000000..6f5cbea99a --- /dev/null +++ b/packages/create-serverless-stack/templates/resources/javascript/sst.template.json @@ -0,0 +1,6 @@ +{ + "name": "%name%", + "type": "@serverless-stack/resources", + "stage": "dev", + "region": "us-east-1" +} diff --git a/packages/create-serverless-stack/templates/resources/javascript/test/%name.PascalCased%Stack.test.template.js b/packages/create-serverless-stack/templates/resources/javascript/test/%name.PascalCased%Stack.test.template.js new file mode 100644 index 0000000000..32945893d2 --- /dev/null +++ b/packages/create-serverless-stack/templates/resources/javascript/test/%name.PascalCased%Stack.test.template.js @@ -0,0 +1,13 @@ +import { expect, matchTemplate, MatchStyle } from "@aws-cdk/assert"; +import * as sst from "@serverless-stack/resources"; +import %name.PascalCased%Stack from "../lib/%name.PascalCased%Stack"; + +test('Empty Stack', () => { + const app = new sst.App(); + // WHEN + const stack = new %name.PascalCased%Stack(app, 'MyTestStack'); + // THEN + expect(stack).to(matchTemplate({ + "Resources": {} + }, MatchStyle.EXACT)) +}); diff --git a/packages/create-serverless-stack/templates/resources/typescript/.template.gitignore b/packages/create-serverless-stack/templates/resources/typescript/.template.gitignore new file mode 100644 index 0000000000..3323f9317b --- /dev/null +++ b/packages/create-serverless-stack/templates/resources/typescript/.template.gitignore @@ -0,0 +1,22 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules + +# testing +/coverage + +# production +/build + +# typescript +*.js +*.d.ts + +# misc +.DS_Store + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + diff --git a/packages/create-serverless-stack/templates/resources/typescript/README.template.md b/packages/create-serverless-stack/templates/resources/typescript/README.template.md new file mode 100644 index 0000000000..16bea40876 --- /dev/null +++ b/packages/create-serverless-stack/templates/resources/typescript/README.template.md @@ -0,0 +1,3 @@ +# Getting Started with Serverless Stack Resources + +This project was bootstrapped with [Create Serverless Stack](https://github.com/serverless-stack/serverless-stack). diff --git a/packages/create-serverless-stack/templates/resources/typescript/lib/%name.PascalCased%Stack.template.ts b/packages/create-serverless-stack/templates/resources/typescript/lib/%name.PascalCased%Stack.template.ts new file mode 100644 index 0000000000..c3793ba95d --- /dev/null +++ b/packages/create-serverless-stack/templates/resources/typescript/lib/%name.PascalCased%Stack.template.ts @@ -0,0 +1,9 @@ +import * as sst from "@serverless-stack/resources"; + +export default class %name.PascalCased%Stack extends sst.Stack { + constructor(scope: sst.App, id: string, props?: sst.StackProps) { + super(scope, id, props); + + // The code that defines your stack goes here + } +} diff --git a/packages/create-serverless-stack/templates/resources/typescript/lib/index.template.ts b/packages/create-serverless-stack/templates/resources/typescript/lib/index.template.ts new file mode 100644 index 0000000000..bf3e156b6b --- /dev/null +++ b/packages/create-serverless-stack/templates/resources/typescript/lib/index.template.ts @@ -0,0 +1,8 @@ +import %name.PascalCased%Stack from "./%name.PascalCased%Stack"; +import * as sst from "@serverless-stack/resources"; + +export default function main(app: sst.App): void { + new %name.PascalCased%Stack(app, "%name.PascalCased%Stack"); + + // Add more stacks +} diff --git a/packages/create-serverless-stack/templates/resources/typescript/package.template.json b/packages/create-serverless-stack/templates/resources/typescript/package.template.json new file mode 100644 index 0000000000..87d87ffb34 --- /dev/null +++ b/packages/create-serverless-stack/templates/resources/typescript/package.template.json @@ -0,0 +1,18 @@ +{ + "name": "%name%", + "version": "0.1.0", + "scripts": { + "test": "sst test", + "build": "sst build", + "deploy": "sst deploy", + "remove": "sst remove" + }, + "devDependencies": { + "@aws-cdk/assert": "%cdk-version%" + }, + "dependencies": { + "@serverless-stack/cli": "%sst-version%", + "@serverless-stack/resources": "%sst-version%", + "@aws-cdk/core": "%cdk-version%" + } +} diff --git a/packages/create-serverless-stack/templates/resources/typescript/test/%name.PascalCased%Stack.test.template.ts b/packages/create-serverless-stack/templates/resources/typescript/test/%name.PascalCased%Stack.test.template.ts new file mode 100644 index 0000000000..32945893d2 --- /dev/null +++ b/packages/create-serverless-stack/templates/resources/typescript/test/%name.PascalCased%Stack.test.template.ts @@ -0,0 +1,13 @@ +import { expect, matchTemplate, MatchStyle } from "@aws-cdk/assert"; +import * as sst from "@serverless-stack/resources"; +import %name.PascalCased%Stack from "../lib/%name.PascalCased%Stack"; + +test('Empty Stack', () => { + const app = new sst.App(); + // WHEN + const stack = new %name.PascalCased%Stack(app, 'MyTestStack'); + // THEN + expect(stack).to(matchTemplate({ + "Resources": {} + }, MatchStyle.EXACT)) +}); diff --git a/packages/create-serverless-stack/templates/resources/typescript/tsconfig.json b/packages/create-serverless-stack/templates/resources/typescript/tsconfig.json new file mode 100644 index 0000000000..7d659db8a8 --- /dev/null +++ b/packages/create-serverless-stack/templates/resources/typescript/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ES2018", + "module": "commonjs", + "lib": ["es2018"], + "declaration": true, + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "noImplicitThis": true, + "alwaysStrict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": false, + "inlineSourceMap": true, + "inlineSources": true, + "experimentalDecorators": true, + "strictPropertyInitialization": false, + "typeRoots": ["./node_modules/@types"] + }, + "include": ["lib"] +} diff --git a/packages/resources/package.json b/packages/resources/package.json index cb5872c9bb..0a366152e8 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -14,6 +14,11 @@ "name": "Anomaly Innovations", "url": "https://anoma.ly" }, + "repository": { + "type": "git", + "url": "https://github.com/serverless-stack/serverless-stack.git", + "directory": "packages/resources" + }, "license": "MIT", "publishConfig": { "access": "public" From 7019a3b954be589328224162108865479bdfe5b3 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 6 Aug 2020 20:26:32 -0400 Subject: [PATCH 021/481] Loading aws-cdk version from npm --- packages/create-serverless-stack/bin/index.js | 193 +++++++++++------- 1 file changed, 122 insertions(+), 71 deletions(-) diff --git a/packages/create-serverless-stack/bin/index.js b/packages/create-serverless-stack/bin/index.js index c048eeebd4..0ce7e2e2a9 100755 --- a/packages/create-serverless-stack/bin/index.js +++ b/packages/create-serverless-stack/bin/index.js @@ -11,6 +11,7 @@ process.on("unhandledRejection", (err) => { const fs = require("fs"); const path = require("path"); +const https = require("https"); const yargs = require("yargs"); const chalk = require("chalk"); const spawn = require("cross-spawn"); @@ -24,6 +25,125 @@ const cmd = { r: "resources", }; +function shouldUseYarn() { + try { + execSync("yarnpkg --version", { stdio: "ignore" }); + return true; + } catch (e) { + return false; + } +} + +function processString(str) { + const sstVersion = require("../package.json").version; + return str + .replace(/%name%/g, appName) + .replace(/%cdk-version%/g, cdkVersion) + .replace(/%sst-version%/g, sstVersion) + .replace(/%name\.camelCased%/g, camelCase(appName)) + .replace(/%name\.PascalCased%/g, camelCase(appName, { pascalCase: true })); +} + +function processFile(templatePath, toFile) { + const template = fs.readFileSync(templatePath, { encoding: "utf-8" }); + fs.writeFileSync(toFile, processString(template)); +} + +function copyFiles(sourceDirectory, targetDirectory) { + const files = fs.readdirSync(sourceDirectory); + + for (var i = 0, l = files.length; i < l; i++) { + const file = files[i]; + + const fromFile = path.join(sourceDirectory, file); + const toFile = path.join(targetDirectory, processString(file)); + + if (fs.statSync(fromFile).isDirectory()) { + fs.mkdirSync(toFile); + copyFiles(fromFile, toFile); + continue; + } else if (file.match(/^.*\.template\.[^.]+$/)) { + processFile(fromFile, toFile.replace(/\.template(\.[^.]+)$/, "$1")); + continue; + } else if (file.match(/\.(swp|swo|DS_FILE)$/i)) { + continue; + } else { + fs.copyFileSync(fromFile, toFile); + } + } +} + +// Adopted from https://github.com/facebook/create-react-app/blob/master/packages/create-react-app/createReactApp.js +// +// We first check the registry directly via the API, and if that fails, we try +// the slower `npm view [package] version` command. +// +// This is important for users in environments where direct access to npm is +// blocked by a firewall, and packages are provided exclusively via a private +// registry. +async function getLatestCdkVersion() { + function tryNpmCmd(resolve, reject) { + try { + resolve(execSync("npm view aws-cdk version").toString().trim()); + } catch (e) { + reject(); + } + } + + return new Promise((resolve, reject) => { + https + .get("https://registry.npmjs.org/-/package/aws-cdk/dist-tags", (res) => { + if (res.statusCode === 200) { + let body = ""; + res.on("data", (data) => (body += data)); + res.on("end", () => { + resolve(JSON.parse(body).latest); + }); + } else { + tryNpmCmd(resolve, reject); + } + }) + .on("error", () => { + tryNpmCmd(resolve, reject); + }); + }); +} + +async function main() { + try { + cdkVersion = await getLatestCdkVersion(); + } catch (e) { + console.log( + chalk.red("There was a problem connecting to the npm registry.") + ); + process.exit(1); + } + + // Create app directory + if (!fs.existsSync(appPath)) { + fs.mkdirSync(appPath); + } else { + console.log(chalk.red(`A directory called ${appName} already exists.`)); + process.exit(1); + } + + // Copy template files to app directory + copyFiles(templatePath, appPath); + + // Install dependencies + if (useYarn) { + spawn.sync("yarn", [], { + stdio: "inherit", + cwd: appPath, + }); + } else { + spawn.sync("npm", ["install"], { + stdio: "inherit", + cwd: appPath, + }); + } +} + const argv = yargs .usage(`${cmd.i} `) .demandCommand(1) @@ -72,56 +192,9 @@ const argv = yargs }) .parse(); -function shouldUseYarn() { - try { - execSync("yarnpkg --version", { stdio: "ignore" }); - return true; - } catch (e) { - return false; - } -} - -function processString(str) { - const sstVersion = require("../package.json").version; - return str - .replace(/%name%/g, appName) - .replace(/%cdk-version%/g, cdkVersion) - .replace(/%sst-version%/g, sstVersion) - .replace(/%name\.camelCased%/g, camelCase(appName)) - .replace(/%name\.PascalCased%/g, camelCase(appName, { pascalCase: true })); -} - -function processFile(templatePath, toFile) { - const template = fs.readFileSync(templatePath, { encoding: "utf-8" }); - fs.writeFileSync(toFile, processString(template)); -} - -function copyFiles(sourceDirectory, targetDirectory) { - const files = fs.readdirSync(sourceDirectory); - - for (var i = 0, l = files.length; i < l; i++) { - const file = files[i]; - - const fromFile = path.join(sourceDirectory, file); - const toFile = path.join(targetDirectory, processString(file)); - - if (fs.statSync(fromFile).isDirectory()) { - fs.mkdirSync(toFile); - copyFiles(fromFile, toFile); - continue; - } else if (file.match(/^.*\.template\.[^.]+$/)) { - processFile(fromFile, toFile.replace(/\.template(\.[^.]+)$/, "$1")); - continue; - } else if (file.match(/\.(swp|swo|DS_FILE)$/i)) { - continue; - } else { - fs.copyFileSync(fromFile, toFile); - } - } -} +let cdkVersion; const appName = argv.name; -const cdkVersion = "1.56.0"; const templateType = argv._[0]; const templateLanguage = argv.language; const useYarn = argv.useNpm ? false : shouldUseYarn(); @@ -133,26 +206,4 @@ const templatePath = path.join( templateLanguage ); -// Create app directory -if (!fs.existsSync(appPath)) { - fs.mkdirSync(appPath); -} else { - console.log(chalk.red(`A directory called ${appName} already exists.`)); - process.exit(1); -} - -// Copy template files to app directory -copyFiles(templatePath, appPath); - -// Install dependencies -if (useYarn) { - spawn.sync("yarn", [], { - stdio: "inherit", - cwd: appPath, - }); -} else { - spawn.sync("npm", ["install"], { - stdio: "inherit", - cwd: appPath, - }); -} +main(); From ab06410225062a1b78cf0bf3e042bed35e268790 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 6 Aug 2020 20:28:25 -0400 Subject: [PATCH 022/481] v0.0.5 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index 15be074a23..2917f354d1 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.4" + "version": "0.0.5" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 2d79ebe0c2..4ddb0f506e 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.0.4", + "version": "0.0.5", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "build": "webpack --config webpack.config.js", @@ -41,7 +41,7 @@ "@babel/core": "^7.10.5", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/resources": "^0.0.4", + "@serverless-stack/resources": "^0.0.5", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "aws-cdk": "^1.54.0", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 4d97ca5482..09d545d91a 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.0.4", + "version": "0.0.5", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 0a366152e8..0ecf60f07f 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.4", + "version": "0.0.5", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 0d0289fad20b979e651c58ee20362558ae4a4979 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 6 Aug 2020 20:51:37 -0400 Subject: [PATCH 023/481] v0.0.6 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/.npmignore | 6 ++++++ packages/create-serverless-stack/README.md | 1 + packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 6 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 packages/create-serverless-stack/.npmignore create mode 100644 packages/create-serverless-stack/README.md diff --git a/lerna.json b/lerna.json index 2917f354d1..8d677f39d4 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.5" + "version": "0.0.6" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 4ddb0f506e..9827617e3f 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.0.5", + "version": "0.0.6", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "build": "webpack --config webpack.config.js", @@ -41,7 +41,7 @@ "@babel/core": "^7.10.5", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/resources": "^0.0.5", + "@serverless-stack/resources": "^0.0.6", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "aws-cdk": "^1.54.0", diff --git a/packages/create-serverless-stack/.npmignore b/packages/create-serverless-stack/.npmignore new file mode 100644 index 0000000000..f5b2fd56b1 --- /dev/null +++ b/packages/create-serverless-stack/.npmignore @@ -0,0 +1,6 @@ +node_modules +tests +*.test.js +yarn.lock +yarn-error.log +.travis.yml diff --git a/packages/create-serverless-stack/README.md b/packages/create-serverless-stack/README.md new file mode 100644 index 0000000000..071c1e54e1 --- /dev/null +++ b/packages/create-serverless-stack/README.md @@ -0,0 +1 @@ +# create-serverless-stack [![npm](https://img.shields.io/npm/v/create-serverless-stack.svg)](https://www.npmjs.com/package/create-serverless-stack) diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 09d545d91a..74bc9dec39 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.0.5", + "version": "0.0.6", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 0ecf60f07f..705cc8635b 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.5", + "version": "0.0.6", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 8b29070734333d274b5061fd3c7be514fb3779b7 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 7 Aug 2020 20:13:39 -0400 Subject: [PATCH 024/481] Integrating with @serverless-stack/aws-cdk --- packages/cli/bin/scripts.js | 16 +- packages/cli/package.json | 7 +- packages/cli/scripts/build.js | 37 +-- packages/cli/scripts/cdk.js | 2 +- .../cli/scripts/config/cacheCdkContext.js | 13 - .../config/{prepareCdk.js => cdkHelpers.js} | 41 +++- packages/cli/scripts/deploy.js | 74 +++--- packages/cli/scripts/remove.js | 18 +- packages/cli/scripts/wrapper/run.js | 20 +- packages/cli/test/base-ts/yarn.lock | 19 +- packages/cli/test/base/yarn.lock | 19 +- packages/cli/test/config/package.json | 6 +- packages/cli/test/config/yarn.lock | 19 +- packages/cli/test/context/yarn.lock | 19 +- packages/cli/test/helpers/index.js | 2 +- packages/cli/test/jest-ts/yarn.lock | 140 ++++------- packages/cli/test/jest/yarn.lock | 19 +- packages/resources/package.json | 3 +- packages/resources/src/App.ts | 6 +- yarn.lock | 228 ++++++++++-------- 20 files changed, 385 insertions(+), 323 deletions(-) delete mode 100644 packages/cli/scripts/config/cacheCdkContext.js rename packages/cli/scripts/config/{prepareCdk.js => cdkHelpers.js} (64%) diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index d4e75f58ec..e7e3dc4cab 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -13,6 +13,9 @@ const yargs = require("yargs"); const chalk = require("chalk"); const spawn = require("cross-spawn"); +const paths = require("../scripts/config/paths"); +const { prepareCdk } = require("../scripts/config/cdkHelpers"); + const args = process.argv.slice(2); const cmd = { @@ -46,11 +49,10 @@ function addOptions(currentCmd) { if (currentCmd === cmd.deploy || currentCmd === cmd.remove) { yargs.positional("stack", { + type: "string", describe: "Specify a stack, if you have multiple stacks", }); } - - return yargs; }; } @@ -109,9 +111,15 @@ const argv = yargs switch (script) { case cmd.build: case cmd.deploy: - case cmd.remove: - internals[script](argv); + case cmd.remove: { + // Prepare app + const config = prepareCdk(argv); + + process.chdir(paths.appBuildPath); + + Promise.resolve(internals[script](argv, config)); break; + } case cmd.cdk: case cmd.test: { const result = spawn.sync( diff --git a/packages/cli/package.json b/packages/cli/package.json index 9827617e3f..4e3e21a75e 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -36,15 +36,14 @@ }, "homepage": "https://serverless-stack.com", "dependencies": { - "@aws-cdk/core": "^1.54.0", + "@aws-cdk/core": "^1.55.0", "@babel/cli": "^7.10.5", "@babel/core": "^7.10.5", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/resources": "^0.0.6", + "@serverless-stack/aws-cdk": "1.55.0-rc.1", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", - "aws-cdk": "^1.54.0", "chalk": "^4.1.0", "core-js": "^3.6.5", "cross-spawn": "^7.0.3", @@ -54,7 +53,7 @@ "yargs": "^15.4.1" }, "devDependencies": { - "@serverless-stack/resources": "^0.0.0", + "@serverless-stack/resources": "^0.0.6", "webpack": "^4.44.0", "webpack-cli": "^3.3.12" } diff --git a/packages/cli/scripts/build.js b/packages/cli/scripts/build.js index faec6abd4d..1505c58f3d 100644 --- a/packages/cli/scripts/build.js +++ b/packages/cli/scripts/build.js @@ -1,21 +1,26 @@ "use strict"; -const path = require("path"); -const spawn = require("cross-spawn"); - -const paths = require("./config/paths"); -const prepareCdk = require("./config/prepareCdk"); -const cacheCdkContext = require("./config/cacheCdkContext"); - -module.exports = function (argv) { - // Prepare app - prepareCdk(argv); - - // CDK synth - spawn.sync(path.join(paths.ownNodeModules, ".bin/cdk"), ["synth"], { - stdio: "inherit", - cwd: paths.appBuildPath, - }); +const { sstSynth } = require("@serverless-stack/aws-cdk"); + +const { cacheCdkContext } = require("./config/cdkHelpers"); + +function printResults(results) { + const stacks = results.stacks; + const l = stacks.length; + const stacksCopy = l === 1 ? "stack" : "stacks"; + + console.log(`Successfully compiled ${l} ${stacksCopy}:`); + + for (var i = 0; i < l; i++) { + const stack = stacks[i]; + console.log(` - ${stack.id}`); + } +} + +module.exports = async function () { + const results = await sstSynth(); + + printResults(results); // Cache cdk.context.json cacheCdkContext(); diff --git a/packages/cli/scripts/cdk.js b/packages/cli/scripts/cdk.js index 1e93fd7e63..7d62bbf23b 100644 --- a/packages/cli/scripts/cdk.js +++ b/packages/cli/scripts/cdk.js @@ -13,7 +13,7 @@ const path = require("path"); const spawn = require("cross-spawn"); const paths = require("./config/paths"); -const prepareCdk = require("./config/prepareCdk"); +const { prepareCdk } = require("./config/cdkHelpers"); // Prepare app prepareCdk(); diff --git a/packages/cli/scripts/config/cacheCdkContext.js b/packages/cli/scripts/config/cacheCdkContext.js deleted file mode 100644 index aa68aecf01..0000000000 --- a/packages/cli/scripts/config/cacheCdkContext.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -const fs = require("fs"); -const path = require("path"); - -const paths = require("./paths"); - -module.exports = function () { - const contextPath = path.join(paths.appBuildPath, "cdk.context.json"); - if (fs.existsSync(contextPath)) { - fs.copyFileSync(contextPath, path.join(paths.appPath, "cdk.context.json")); - } -}; diff --git a/packages/cli/scripts/config/prepareCdk.js b/packages/cli/scripts/config/cdkHelpers.js similarity index 64% rename from packages/cli/scripts/config/prepareCdk.js rename to packages/cli/scripts/config/cdkHelpers.js index 4f4ef378eb..f7cbac7a83 100644 --- a/packages/cli/scripts/config/prepareCdk.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -6,6 +6,10 @@ const spawn = require("cross-spawn"); const paths = require("./paths"); +const DEFAULT_NAME = ""; +const DEFAULT_STAGE = "dev"; +const DEFAULT_REGION = "us-east-1"; + function transpile() { const tsconfigPath = path.join(paths.appPath, "tsconfig.json"); if (fs.existsSync(tsconfigPath)) { @@ -56,26 +60,37 @@ function copyCdkConfig() { } } -function setOptions(argv) { - const options = {}; - - if (argv.stage) { - options.stage = argv.stage; - } +function applyConfig(argv) { + const configPath = path.join(paths.appPath, "sst.json"); + const config = fs.existsSync(configPath) ? require(configPath) : {}; - if (argv.region) { - options.region = argv.region; - } + config.name = config.name || DEFAULT_NAME; + config.stage = argv.stage || config.stage || DEFAULT_STAGE; + config.region = argv.region || config.region || DEFAULT_REGION; fs.writeFileSync( - path.join(paths.appBuildPath, "options.json"), - JSON.stringify(options) + path.join(paths.appBuildPath, "sst-merged.json"), + JSON.stringify(config) ); + + return config; } -module.exports = function (argv) { +function prepareCdk(argv) { transpile(); copyWrapperFiles(); copyCdkConfig(); - setOptions(argv); + return applyConfig(argv); +} + +function cacheCdkContext() { + const contextPath = path.join(paths.appBuildPath, "cdk.context.json"); + if (fs.existsSync(contextPath)) { + fs.copyFileSync(contextPath, path.join(paths.appPath, "cdk.context.json")); + } +} + +module.exports = { + prepareCdk, + cacheCdkContext, }; diff --git a/packages/cli/scripts/deploy.js b/packages/cli/scripts/deploy.js index ec662420d4..bd90255186 100644 --- a/packages/cli/scripts/deploy.js +++ b/packages/cli/scripts/deploy.js @@ -2,58 +2,66 @@ const fs = require("fs"); const path = require("path"); -const spawn = require("cross-spawn"); +const { + sstEnv, + sstDeploy, + sstBootstrap, +} = require("@serverless-stack/aws-cdk"); const paths = require("./config/paths"); -const prepareCdk = require("./config/prepareCdk"); -const cacheCdkContext = require("./config/cacheCdkContext"); +const { cacheCdkContext } = require("./config/cdkHelpers"); -function cacheBootstrap(call) { - if (call.status !== 0) { - return; - } - - const matches = call.stderr - .toString("utf8") - .match(/Environment (aws:\/\/\d+\/[a-z0-9-]+) bootstrapped/); +function envObjectToString(envObj) { + return `aws://${envObj.account}/${envObj.region}`; +} - if (matches === null) { - return; - } +function hasBootstrappedEnv(env) { + const contextPath = path.join(paths.appBuildPath, "cdk.context.json"); + const context = fs.existsSync(contextPath) ? require(contextPath) : {}; - const environment = matches[1]; + return context.bootstrappedEnvs + ? context.bootstrappedEnvs[env] === true + : false; +} +function cacheBootstrap(env) { const contextPath = path.join(paths.appBuildPath, "cdk.context.json"); const context = fs.existsSync(contextPath) ? require(contextPath) : {}; context.bootstrappedEnvs = context.bootstrappedEnvs || {}; - context.bootstrappedEnvs[environment] = true; + context.bootstrappedEnvs[env] = true; fs.writeFileSync(contextPath, JSON.stringify(context, null, 2)); } -module.exports = function (argv) { - // Prepare app - prepareCdk(argv); +async function checkAndRunBootstrap(config) { + const envResults = await sstEnv(); - // CDK bootstrap - const bsCall = spawn.sync( - path.join(paths.ownNodeModules, ".bin/cdk"), - ["bootstrap", "--no-colors"], - { cwd: paths.appBuildPath } - ); + if (!envResults.environment.account) { + throw "AWS profile could not be detected. Please make sure you have it configured locally."; + } + + // Apply region from config + envResults.environment.region = config.region; + + // Run bootstrap if not previously run + const env = envObjectToString(envResults.environment); + + if (hasBootstrappedEnv(env)) { + return; + } + console.log("New environment detected..."); + + const bsCall = await sstBootstrap(); // Cache Bootstrap results - cacheBootstrap(bsCall); + cacheBootstrap(bsCall.environment.name); +} - const stackArgs = argv.stack ? [argv.stack] : []; +module.exports = async function (argv, config) { + await checkAndRunBootstrap(config); - // CDK deploy - spawn.sync( - path.join(paths.ownNodeModules, ".bin/cdk"), - ["deploy"].concat(stackArgs), - { stdio: "inherit", cwd: paths.appBuildPath } - ); + sstDeploy(argv.stack); // Cache cdk.context.json cacheCdkContext(); diff --git a/packages/cli/scripts/remove.js b/packages/cli/scripts/remove.js index e29efa11d8..56360dfce2 100644 --- a/packages/cli/scripts/remove.js +++ b/packages/cli/scripts/remove.js @@ -1,21 +1,7 @@ "use strict"; -const path = require("path"); -const spawn = require("cross-spawn"); - -const paths = require("./config/paths"); -const prepareCdk = require("./config/prepareCdk"); +const { sstDestroy } = require("@serverless-stack/aws-cdk"); module.exports = function (argv) { - // Prepare app - prepareCdk(argv); - - const stackArgs = argv.stack ? [argv.stack] : []; - - // CDK destroy - spawn.sync( - path.join(paths.ownNodeModules, ".bin/cdk"), - ["destroy"].concat(stackArgs), - { stdio: "inherit", cwd: paths.appBuildPath } - ); + sstDestroy(argv.stack); }; diff --git a/packages/cli/scripts/wrapper/run.js b/packages/cli/scripts/wrapper/run.js index dddf168df0..c28412a159 100644 --- a/packages/cli/scripts/wrapper/run.js +++ b/packages/cli/scripts/wrapper/run.js @@ -2,26 +2,14 @@ "use strict"; -const fs = require("fs"); - +const config = require("./sst-merged.json"); const App = require("./include"); const main = require("./"); -const configPath = "../sst.json"; -const config = fs.existsSync(configPath) ? require(configPath) : {}; - -const optionsPath = "./options.json"; -const options = fs.existsSync(optionsPath) ? require(optionsPath) : {}; - -const name = config.name; -const stage = options.stage || config.stage; -const region = - options.region || config.region || process.env.CDK_DEFAULT_REGION; - main.default( new App.default({ - name, - stage, - region, + name: config.name, + stage: config.stage, + region: config.region, }) ); diff --git a/packages/cli/test/base-ts/yarn.lock b/packages/cli/test/base-ts/yarn.lock index 6d399a1486..dc7bee22bd 100644 --- a/packages/cli/test/base-ts/yarn.lock +++ b/packages/cli/test/base-ts/yarn.lock @@ -48,6 +48,14 @@ jsonschema "^1.2.5" semver "^7.2.2" +"@aws-cdk/cloud-assembly-schema@1.57.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.57.0.tgz#bf9c63cf3ca8cbf0f37886b43b12f5fab5c7c989" + integrity sha512-IJyV3pgMvpbaIVYpUkBGsxIWh+VK7TxuTbEyHfBra5+VgXLoFdSG2UO80b4v6ou+occRqUGbqAnc/VfYr1uuvw== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + "@aws-cdk/core@1.55.0", "@aws-cdk/core@^1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" @@ -67,15 +75,24 @@ "@aws-cdk/cloud-assembly-schema" "1.55.0" semver "^7.2.2" +"@aws-cdk/cx-api@^1.55.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.57.0.tgz#e6ad6936e1781b821317be60978fb20111cb4d16" + integrity sha512-h2qTTofE8cE1rSZB9ny+7AjjmxEdKoxhq+GsQebQ5NZkrN/Rbc+DL77S/GG53koPG4u/ZoA4UcdLz/JqiGgdPA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.57.0" + semver "^7.2.2" + "@aws-cdk/region-info@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== "@serverless-stack/resources@../../../resources": - version "0.0.1" + version "0.0.6" dependencies: "@aws-cdk/core" "^1.55.0" + "@aws-cdk/cx-api" "^1.55.0" at-least-node@^1.0.0: version "1.0.0" diff --git a/packages/cli/test/base/yarn.lock b/packages/cli/test/base/yarn.lock index a5ffef9112..dfdf6f5b46 100644 --- a/packages/cli/test/base/yarn.lock +++ b/packages/cli/test/base/yarn.lock @@ -261,6 +261,14 @@ jsonschema "^1.2.5" semver "^7.2.2" +"@aws-cdk/cloud-assembly-schema@1.57.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.57.0.tgz#bf9c63cf3ca8cbf0f37886b43b12f5fab5c7c989" + integrity sha512-IJyV3pgMvpbaIVYpUkBGsxIWh+VK7TxuTbEyHfBra5+VgXLoFdSG2UO80b4v6ou+occRqUGbqAnc/VfYr1uuvw== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + "@aws-cdk/core@1.55.0", "@aws-cdk/core@^1.54.0", "@aws-cdk/core@^1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" @@ -293,15 +301,24 @@ "@aws-cdk/cloud-assembly-schema" "1.55.0" semver "^7.2.2" +"@aws-cdk/cx-api@^1.55.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.57.0.tgz#e6ad6936e1781b821317be60978fb20111cb4d16" + integrity sha512-h2qTTofE8cE1rSZB9ny+7AjjmxEdKoxhq+GsQebQ5NZkrN/Rbc+DL77S/GG53koPG4u/ZoA4UcdLz/JqiGgdPA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.57.0" + semver "^7.2.2" + "@aws-cdk/region-info@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== "@serverless-stack/resources@../../../resources": - version "0.0.1" + version "0.0.6" dependencies: "@aws-cdk/core" "^1.55.0" + "@aws-cdk/cx-api" "^1.55.0" at-least-node@^1.0.0: version "1.0.0" diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index 84bf7bbaa4..6f7bfb6787 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -1,10 +1,12 @@ { - "name": "config", + "name": "config-test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { - "build": "../../bin/scripts.js build" + "build": "../../bin/scripts.js build", + "deploy": "../../bin/scripts.js deploy", + "remove": "../../bin/scripts.js remove" }, "keywords": [], "author": "", diff --git a/packages/cli/test/config/yarn.lock b/packages/cli/test/config/yarn.lock index 682ecfd2bb..0ce71d9135 100644 --- a/packages/cli/test/config/yarn.lock +++ b/packages/cli/test/config/yarn.lock @@ -227,6 +227,14 @@ jsonschema "^1.2.5" semver "^7.2.2" +"@aws-cdk/cloud-assembly-schema@1.57.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.57.0.tgz#bf9c63cf3ca8cbf0f37886b43b12f5fab5c7c989" + integrity sha512-IJyV3pgMvpbaIVYpUkBGsxIWh+VK7TxuTbEyHfBra5+VgXLoFdSG2UO80b4v6ou+occRqUGbqAnc/VfYr1uuvw== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + "@aws-cdk/core@1.55.0", "@aws-cdk/core@^1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" @@ -259,15 +267,24 @@ "@aws-cdk/cloud-assembly-schema" "1.55.0" semver "^7.2.2" +"@aws-cdk/cx-api@^1.55.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.57.0.tgz#e6ad6936e1781b821317be60978fb20111cb4d16" + integrity sha512-h2qTTofE8cE1rSZB9ny+7AjjmxEdKoxhq+GsQebQ5NZkrN/Rbc+DL77S/GG53koPG4u/ZoA4UcdLz/JqiGgdPA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.57.0" + semver "^7.2.2" + "@aws-cdk/region-info@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== "@serverless-stack/resources@../../../resources": - version "0.0.0" + version "0.0.6" dependencies: "@aws-cdk/core" "^1.55.0" + "@aws-cdk/cx-api" "^1.55.0" at-least-node@^1.0.0: version "1.0.0" diff --git a/packages/cli/test/context/yarn.lock b/packages/cli/test/context/yarn.lock index a268053f2d..0ce71d9135 100644 --- a/packages/cli/test/context/yarn.lock +++ b/packages/cli/test/context/yarn.lock @@ -227,6 +227,14 @@ jsonschema "^1.2.5" semver "^7.2.2" +"@aws-cdk/cloud-assembly-schema@1.57.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.57.0.tgz#bf9c63cf3ca8cbf0f37886b43b12f5fab5c7c989" + integrity sha512-IJyV3pgMvpbaIVYpUkBGsxIWh+VK7TxuTbEyHfBra5+VgXLoFdSG2UO80b4v6ou+occRqUGbqAnc/VfYr1uuvw== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + "@aws-cdk/core@1.55.0", "@aws-cdk/core@^1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" @@ -259,15 +267,24 @@ "@aws-cdk/cloud-assembly-schema" "1.55.0" semver "^7.2.2" +"@aws-cdk/cx-api@^1.55.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.57.0.tgz#e6ad6936e1781b821317be60978fb20111cb4d16" + integrity sha512-h2qTTofE8cE1rSZB9ny+7AjjmxEdKoxhq+GsQebQ5NZkrN/Rbc+DL77S/GG53koPG4u/ZoA4UcdLz/JqiGgdPA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.57.0" + semver "^7.2.2" + "@aws-cdk/region-info@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== "@serverless-stack/resources@../../../resources": - version "0.0.1" + version "0.0.6" dependencies: "@aws-cdk/core" "^1.55.0" + "@aws-cdk/cx-api" "^1.55.0" at-least-node@^1.0.0: version "1.0.0" diff --git a/packages/cli/test/helpers/index.js b/packages/cli/test/helpers/index.js index 38ab48c64d..522256c472 100644 --- a/packages/cli/test/helpers/index.js +++ b/packages/cli/test/helpers/index.js @@ -5,7 +5,7 @@ const clearBuildOutput = require("./clear-build-output"); const removeNodeModules = require("./remove-node-modules"); const errorRegex = /(Error|Exception) ---/; -const successRegex = /Successfully synthesized to /; +const successRegex = /Successfully compiled \d+ stacks/; module.exports = { yarnInstall, diff --git a/packages/cli/test/jest-ts/yarn.lock b/packages/cli/test/jest-ts/yarn.lock index 3c7f67a265..68efbfa4e6 100644 --- a/packages/cli/test/jest-ts/yarn.lock +++ b/packages/cli/test/jest-ts/yarn.lock @@ -249,13 +249,6 @@ dependencies: md5 "^2.2.1" -"@aws-cdk/cfnspec@1.56.0": - version "1.56.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.56.0.tgz#54d29eee2fcb33c1432ca7287f90f89c4aa73b9a" - integrity sha512-6bzVJX+RzcOoAAiPI1oE7lW1mLtm486QhkpEnyQefq136KqEINjYDCjH82KZJ5EbyJW7vYaxSqlH7u/Twp20bQ== - dependencies: - md5 "^2.2.1" - "@aws-cdk/cloud-assembly-schema@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" @@ -264,10 +257,10 @@ jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/cloud-assembly-schema@1.56.0": - version "1.56.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.56.0.tgz#b2b3cb687ead39ab8cecfaac6a4bee14666d6abc" - integrity sha512-QLuUOoEzrTyiBbPue1QzMmMLjh6FjuD6dIPJ1O81jPpBuIYiAN7MXzXQ9+4gqM0UrnMpSzB8DW2joENDPtJgFg== +"@aws-cdk/cloud-assembly-schema@1.57.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.57.0.tgz#bf9c63cf3ca8cbf0f37886b43b12f5fab5c7c989" + integrity sha512-IJyV3pgMvpbaIVYpUkBGsxIWh+VK7TxuTbEyHfBra5+VgXLoFdSG2UO80b4v6ou+occRqUGbqAnc/VfYr1uuvw== dependencies: jsonschema "^1.2.5" semver "^7.2.2" @@ -284,18 +277,6 @@ string-width "^4.2.0" table "^5.4.6" -"@aws-cdk/cloudformation-diff@1.56.0": - version "1.56.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.56.0.tgz#7af2e2d7c757ad7f69a7536ae6ccf89bd18ba26a" - integrity sha512-JVLL3e6uhHknu9WW8TtYMmX/OGxU9Cee3Sfzh1K10rND6VYsrteSuCpkiVJOnSuNgNXAABw7/5oNRBNgKotgNw== - dependencies: - "@aws-cdk/cfnspec" "1.56.0" - colors "^1.4.0" - diff "^4.0.2" - fast-deep-equal "^3.1.3" - string-width "^4.2.0" - table "^5.4.6" - "@aws-cdk/core@1.55.0", "@aws-cdk/core@^1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" @@ -307,17 +288,6 @@ fs-extra "^9.0.1" minimatch "^3.0.4" -"@aws-cdk/core@^1.54.0": - version "1.56.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.56.0.tgz#499bf691a9937f5f5dfb2b83330fc3f9d9294662" - integrity sha512-MeImBUTbU8ipZAC6gYQHfJRXH+63XD1VBv9g1AO5GpERKHOZ58qiBroQOkVWD5/u+iasXJ7JSC9JKUBC/+2PlQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.56.0" - "@aws-cdk/cx-api" "1.56.0" - constructs "^3.0.2" - fs-extra "^9.0.1" - minimatch "^3.0.4" - "@aws-cdk/custom-resources@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.55.0.tgz#af33b6dc28a9431d60cd6e7774a166919a7622be" @@ -339,12 +309,12 @@ "@aws-cdk/cloud-assembly-schema" "1.55.0" semver "^7.2.2" -"@aws-cdk/cx-api@1.56.0": - version "1.56.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.56.0.tgz#36bf05de73d26ecc69054855f238beaf0bf2a482" - integrity sha512-IuBmbz025AnuYAKv+ZOvnRV7Wwa/wdCiqiJ3BlVEqPsdvE4ZUMJTqLTY25ho5VT07o8Z/iQg7M6dRs9ccVC9Dw== +"@aws-cdk/cx-api@^1.55.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.57.0.tgz#e6ad6936e1781b821317be60978fb20111cb4d16" + integrity sha512-h2qTTofE8cE1rSZB9ny+7AjjmxEdKoxhq+GsQebQ5NZkrN/Rbc+DL77S/GG53koPG4u/ZoA4UcdLz/JqiGgdPA== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.56.0" + "@aws-cdk/cloud-assembly-schema" "1.57.0" semver "^7.2.2" "@aws-cdk/region-info@1.55.0": @@ -352,11 +322,6 @@ resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== -"@aws-cdk/region-info@1.56.0": - version "1.56.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.56.0.tgz#2ae5ba607d23f42ba0343304a941a430ba333c98" - integrity sha512-EIX4RQeUGkyIc2leWqtL1Lpjl/jg2p30ngDXyFfW7j1myS+9rtDFpry6wf/vL8e4v/lluuGIJKHTWbNBaUl/hA== - "@babel/cli@^7.10.5": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.5.tgz#57df2987c8cf89d0fc7d4b157ec59d7619f1b77a" @@ -1425,18 +1390,46 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@serverless-stack/aws-cdk@1.55.0-rc.1": + version "1.55.0-rc.1" + resolved "https://registry.yarnpkg.com/@serverless-stack/aws-cdk/-/aws-cdk-1.55.0-rc.1.tgz#127e996425e08d6b3823237ee5d2f221f26445a6" + integrity sha512-OvtSB05Thi4wILSITeUdFflkGBBxZOQzqM71BnmzohXnhUDCgH38LEhIyIXZ2Fh8ueZOBJGaUjPjBLr2EL+jWw== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cloudformation-diff" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + "@aws-cdk/region-info" "1.55.0" + archiver "^4.0.2" + aws-sdk "^2.715.0" + camelcase "^6.0.0" + cdk-assets "1.55.0" + colors "^1.4.0" + decamelize "^4.0.0" + fs-extra "^9.0.1" + glob "^7.1.6" + json-diff "^0.5.4" + minimatch ">=3.0" + promptly "^3.0.3" + proxy-agent "^3.1.1" + semver "^7.2.2" + source-map-support "^0.5.19" + table "^5.4.6" + uuid "^8.2.0" + wrap-ansi "^7.0.0" + yaml "^1.10.0" + yargs "^15.3.1" + "@serverless-stack/cli@../../../cli": - version "0.0.4" + version "0.0.6" dependencies: - "@aws-cdk/core" "^1.54.0" + "@aws-cdk/core" "^1.55.0" "@babel/cli" "^7.10.5" "@babel/core" "^7.10.5" "@babel/plugin-proposal-class-properties" "^7.10.4" "@babel/preset-env" "^7.10.4" - "@serverless-stack/resources" "^0.0.4" + "@serverless-stack/aws-cdk" "1.55.0-rc.1" "@types/jest" "^26.0.7" "@types/node" "^14.0.27" - aws-cdk "^1.54.0" chalk "^4.1.0" core-js "^3.6.5" cross-spawn "^7.0.3" @@ -1446,16 +1439,10 @@ yargs "^15.4.1" "@serverless-stack/resources@../../../resources": - version "0.0.4" - dependencies: - "@aws-cdk/core" "^1.55.0" - -"@serverless-stack/resources@^0.0.4": - version "0.0.4" - resolved "https://registry.yarnpkg.com/@serverless-stack/resources/-/resources-0.0.4.tgz#88985ad596b407507bbf623a72f49793611f697c" - integrity sha512-9QDTvvl4m+KVT4MtgCDYAONfDuxPLsmm0+3Vg9WM6YKEgKwYfZ6hLoewa/88WluFzC81XCC0s0mGEsM8Q9W/pw== + version "0.0.6" dependencies: "@aws-cdk/core" "^1.55.0" + "@aws-cdk/cx-api" "^1.55.0" "@sinonjs/commons@^1.7.0": version "1.8.1" @@ -1779,35 +1766,6 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -aws-cdk@^1.54.0: - version "1.56.0" - resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-1.56.0.tgz#7947f2bb9258b976669e36f6cd82953c76e54ee3" - integrity sha512-3ZzPrS5vQEIlusmw5YW8SGPUUqhHF34aaoPY2QyFGd9+wnZYDK7xu1/JGfhMtiFVzwh1A3jBRQL372s0hXWhyA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.56.0" - "@aws-cdk/cloudformation-diff" "1.56.0" - "@aws-cdk/cx-api" "1.56.0" - "@aws-cdk/region-info" "1.56.0" - archiver "^4.0.2" - aws-sdk "^2.715.0" - camelcase "^6.0.0" - cdk-assets "1.56.0" - colors "^1.4.0" - decamelize "^4.0.0" - fs-extra "^9.0.1" - glob "^7.1.6" - json-diff "^0.5.4" - minimatch ">=3.0" - promptly "^3.0.3" - proxy-agent "^3.1.1" - semver "^7.2.2" - source-map-support "^0.5.19" - table "^5.4.6" - uuid "^8.2.0" - wrap-ansi "^7.0.0" - yaml "^1.10.0" - yargs "^15.3.1" - aws-sdk@^2.715.0: version "2.728.0" resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.728.0.tgz#381805dcac7835b5686694e9468d104595bfce42" @@ -2090,13 +2048,13 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -cdk-assets@1.56.0: - version "1.56.0" - resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.56.0.tgz#7a9805ec4f9eb380da50054bf6958aa1f5f86fd5" - integrity sha512-YlZGTCFrnqSSSCBtgAC2u/MjJamJLerCxwf5smMezOwM2Oo83BswqhAQ+ZQLxQdUifqwN2HNqN0juKeS9X5e5g== +cdk-assets@1.55.0: + version "1.55.0" + resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.55.0.tgz#e1b5c2b409623a50ef05e3c9617be291f59f5522" + integrity sha512-ShWqxAOFEYY4GFLQlECgZbSVyHdKqUo6bD72sIoWp+j4iQNpEFiZVSAxIehx1CIrElNaOJO5H/TUzCLOMpaKxw== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.56.0" - "@aws-cdk/cx-api" "1.56.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" archiver "^4.0.2" aws-sdk "^2.715.0" glob "^7.1.6" diff --git a/packages/cli/test/jest/yarn.lock b/packages/cli/test/jest/yarn.lock index b470065c72..61497448d7 100644 --- a/packages/cli/test/jest/yarn.lock +++ b/packages/cli/test/jest/yarn.lock @@ -245,6 +245,14 @@ jsonschema "^1.2.5" semver "^7.2.2" +"@aws-cdk/cloud-assembly-schema@1.57.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.57.0.tgz#bf9c63cf3ca8cbf0f37886b43b12f5fab5c7c989" + integrity sha512-IJyV3pgMvpbaIVYpUkBGsxIWh+VK7TxuTbEyHfBra5+VgXLoFdSG2UO80b4v6ou+occRqUGbqAnc/VfYr1uuvw== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + "@aws-cdk/cloudformation-diff@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.55.0.tgz#f39fb63bd6388c2401373bf200575efe513a5045" @@ -289,15 +297,24 @@ "@aws-cdk/cloud-assembly-schema" "1.55.0" semver "^7.2.2" +"@aws-cdk/cx-api@^1.55.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.57.0.tgz#e6ad6936e1781b821317be60978fb20111cb4d16" + integrity sha512-h2qTTofE8cE1rSZB9ny+7AjjmxEdKoxhq+GsQebQ5NZkrN/Rbc+DL77S/GG53koPG4u/ZoA4UcdLz/JqiGgdPA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.57.0" + semver "^7.2.2" + "@aws-cdk/region-info@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== "@serverless-stack/resources@../../../resources": - version "0.0.1" + version "0.0.6" dependencies: "@aws-cdk/core" "^1.55.0" + "@aws-cdk/cx-api" "^1.55.0" ajv@^6.10.2: version "6.12.3" diff --git a/packages/resources/package.json b/packages/resources/package.json index 705cc8635b..79524b1294 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -24,7 +24,8 @@ "access": "public" }, "dependencies": { - "@aws-cdk/core": "^1.55.0" + "@aws-cdk/core": "^1.55.0", + "@aws-cdk/cx-api": "^1.55.0" }, "devDependencies": { "@types/node": "^14.0.27", diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 900e5bee68..c3e111aac8 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -1,4 +1,5 @@ import * as cdk from "@aws-cdk/core"; +import * as cxapi from "@aws-cdk/cx-api"; /** * Deploy props for apps. @@ -55,8 +56,11 @@ export class App extends cdk.App { return `${this.stage}-${namePrefix}${logicalName}`; } + // Need to ignore this because the types for this and the user's app come from + // two different sources. This causes a TypeScript error since the same type + // imported from two different sources are treated as different. // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types - synth(options: cdk.StageSynthesisOptions = {}) { + synth(options: cdk.StageSynthesisOptions = {}): cxapi.CloudAssembly { for (const child of this.node.children) { if ( child instanceof cdk.Stack && diff --git a/yarn.lock b/yarn.lock index 5c5a4e8810..6bb9262d85 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,56 +2,72 @@ # yarn lockfile v1 -"@aws-cdk/cfnspec@1.56.0": - version "1.56.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.56.0.tgz#54d29eee2fcb33c1432ca7287f90f89c4aa73b9a" - integrity sha512-6bzVJX+RzcOoAAiPI1oE7lW1mLtm486QhkpEnyQefq136KqEINjYDCjH82KZJ5EbyJW7vYaxSqlH7u/Twp20bQ== +"@aws-cdk/cfnspec@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.55.0.tgz#6a6f78b0269ff8dae55fc2e986cca7469937e3fb" + integrity sha512-Bg4tTgtKMjBKWtyP2/V0atb3TmqshIW+j61gRigEhom1aS49QzvA6YpTjv6vzylQIH0+hdLYiCX6brBiYEXhTg== dependencies: md5 "^2.2.1" -"@aws-cdk/cloud-assembly-schema@1.56.0": - version "1.56.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.56.0.tgz#b2b3cb687ead39ab8cecfaac6a4bee14666d6abc" - integrity sha512-QLuUOoEzrTyiBbPue1QzMmMLjh6FjuD6dIPJ1O81jPpBuIYiAN7MXzXQ9+4gqM0UrnMpSzB8DW2joENDPtJgFg== +"@aws-cdk/cloud-assembly-schema@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" + integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== dependencies: jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/cloudformation-diff@1.56.0": - version "1.56.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.56.0.tgz#7af2e2d7c757ad7f69a7536ae6ccf89bd18ba26a" - integrity sha512-JVLL3e6uhHknu9WW8TtYMmX/OGxU9Cee3Sfzh1K10rND6VYsrteSuCpkiVJOnSuNgNXAABw7/5oNRBNgKotgNw== +"@aws-cdk/cloud-assembly-schema@1.57.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.57.0.tgz#bf9c63cf3ca8cbf0f37886b43b12f5fab5c7c989" + integrity sha512-IJyV3pgMvpbaIVYpUkBGsxIWh+VK7TxuTbEyHfBra5+VgXLoFdSG2UO80b4v6ou+occRqUGbqAnc/VfYr1uuvw== dependencies: - "@aws-cdk/cfnspec" "1.56.0" + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/cloudformation-diff@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.55.0.tgz#f39fb63bd6388c2401373bf200575efe513a5045" + integrity sha512-lBFiLQXaJmf4hR+RzSXwAGun/NgANzK5p/Qm5ETgqTLVPRksJJruaFgFO/Pr0qIRpDbtxrkigoeFZxCgFkFqAQ== + dependencies: + "@aws-cdk/cfnspec" "1.55.0" colors "^1.4.0" diff "^4.0.2" fast-deep-equal "^3.1.3" string-width "^4.2.0" table "^5.4.6" -"@aws-cdk/core@^1.54.0", "@aws-cdk/core@^1.55.0": - version "1.56.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.56.0.tgz#499bf691a9937f5f5dfb2b83330fc3f9d9294662" - integrity sha512-MeImBUTbU8ipZAC6gYQHfJRXH+63XD1VBv9g1AO5GpERKHOZ58qiBroQOkVWD5/u+iasXJ7JSC9JKUBC/+2PlQ== +"@aws-cdk/core@^1.55.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.57.0.tgz#44e19a18f05d0b0742e5d406474000ef2f6f5db9" + integrity sha512-NOE9u2tVwEF+EN5CYaoC34csBgKLA9rjCWCB6R64RPQ2MlhBFCvQxdG2ZO26nOOvH+yv/3zlylM7F546mfQMHg== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.56.0" - "@aws-cdk/cx-api" "1.56.0" + "@aws-cdk/cloud-assembly-schema" "1.57.0" + "@aws-cdk/cx-api" "1.57.0" constructs "^3.0.2" fs-extra "^9.0.1" minimatch "^3.0.4" -"@aws-cdk/cx-api@1.56.0": - version "1.56.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.56.0.tgz#36bf05de73d26ecc69054855f238beaf0bf2a482" - integrity sha512-IuBmbz025AnuYAKv+ZOvnRV7Wwa/wdCiqiJ3BlVEqPsdvE4ZUMJTqLTY25ho5VT07o8Z/iQg7M6dRs9ccVC9Dw== +"@aws-cdk/cx-api@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" + integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + semver "^7.2.2" + +"@aws-cdk/cx-api@1.57.0", "@aws-cdk/cx-api@^1.55.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.57.0.tgz#e6ad6936e1781b821317be60978fb20111cb4d16" + integrity sha512-h2qTTofE8cE1rSZB9ny+7AjjmxEdKoxhq+GsQebQ5NZkrN/Rbc+DL77S/GG53koPG4u/ZoA4UcdLz/JqiGgdPA== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.56.0" + "@aws-cdk/cloud-assembly-schema" "1.57.0" semver "^7.2.2" -"@aws-cdk/region-info@1.56.0": - version "1.56.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.56.0.tgz#2ae5ba607d23f42ba0343304a941a430ba333c98" - integrity sha512-EIX4RQeUGkyIc2leWqtL1Lpjl/jg2p30ngDXyFfW7j1myS+9rtDFpry6wf/vL8e4v/lluuGIJKHTWbNBaUl/hA== +"@aws-cdk/region-info@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" + integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== "@babel/cli@^7.10.5": version "7.10.5" @@ -86,15 +102,15 @@ semver "^5.5.0" "@babel/core@^7.1.0", "@babel/core@^7.10.5", "@babel/core@^7.7.5": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.0.tgz#73b9c33f1658506887f767c26dae07798b30df76" - integrity sha512-mkLq8nwaXmDtFmRkQ8ED/eA2CnVw4zr7dCztKalZXBvdK5EeNUAesrrwUqjQEzFgomJssayzB0aqlOsP1vGLqg== + version "7.11.1" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.1.tgz#2c55b604e73a40dc21b0e52650b11c65cf276643" + integrity sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ== dependencies: "@babel/code-frame" "^7.10.4" "@babel/generator" "^7.11.0" "@babel/helper-module-transforms" "^7.11.0" "@babel/helpers" "^7.10.4" - "@babel/parser" "^7.11.0" + "@babel/parser" "^7.11.1" "@babel/template" "^7.10.4" "@babel/traverse" "^7.11.0" "@babel/types" "^7.11.0" @@ -325,10 +341,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.0.tgz#a9d7e11aead25d3b422d17b2c6502c8dddef6a5d" - integrity sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw== +"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.0", "@babel/parser@^7.11.1": + version "7.11.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.2.tgz#0882ab8a455df3065ea2dcb4c753b2460a24bead" + integrity sha512-Vuj/+7vLo6l1Vi7uuO+1ngCDNeVmNbTngcJFKCR/oEtz8tKz0CJxZEGmPt9KcIloZhOZ3Zit6xbpXT2MDlS9Vw== "@babel/plugin-proposal-async-generator-functions@^7.10.4": version "7.10.5" @@ -559,9 +575,9 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-block-scoping@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz#b81b8aafefbfe68f0f65f7ef397b9ece68a6037d" - integrity sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg== + version "7.11.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" + integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -872,9 +888,9 @@ esutils "^2.0.2" "@babel/runtime@^7.8.4": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.0.tgz#f10245877042a815e07f7e693faff0ae9d3a2aac" - integrity sha512-qArkXsjJq7H+T86WrIFV0Fnu/tNOkZ4cgXmjkzAu3b/58D5mFIO8JH/y77t7C9q0OdDRdh9s7Ue5GasYssxtXw== + version "7.11.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" + integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== dependencies: regenerator-runtime "^0.13.4" @@ -2002,6 +2018,35 @@ dependencies: "@types/node" ">= 8" +"@serverless-stack/aws-cdk@1.55.0-rc.1": + version "1.55.0-rc.1" + resolved "https://registry.yarnpkg.com/@serverless-stack/aws-cdk/-/aws-cdk-1.55.0-rc.1.tgz#127e996425e08d6b3823237ee5d2f221f26445a6" + integrity sha512-OvtSB05Thi4wILSITeUdFflkGBBxZOQzqM71BnmzohXnhUDCgH38LEhIyIXZ2Fh8ueZOBJGaUjPjBLr2EL+jWw== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cloudformation-diff" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + "@aws-cdk/region-info" "1.55.0" + archiver "^4.0.2" + aws-sdk "^2.715.0" + camelcase "^6.0.0" + cdk-assets "1.55.0" + colors "^1.4.0" + decamelize "^4.0.0" + fs-extra "^9.0.1" + glob "^7.1.6" + json-diff "^0.5.4" + minimatch ">=3.0" + promptly "^3.0.3" + proxy-agent "^3.1.1" + semver "^7.2.2" + source-map-support "^0.5.19" + table "^5.4.6" + uuid "^8.2.0" + wrap-ansi "^7.0.0" + yaml "^1.10.0" + yargs "^15.3.1" + "@sinonjs/commons@^1.7.0": version "1.8.1" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" @@ -2095,9 +2140,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@^26.0.7": - version "26.0.8" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.8.tgz#f5c5559cf25911ce227f7ce30f1f160f24966369" - integrity sha512-eo3VX9jGASSuv680D4VQ89UmuLZneNxv2MCZjfwlInav05zXVJTzfc//lavdV0GPwSxsXJTy2jALscB7Acqg0g== + version "26.0.9" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.9.tgz#0543b57da5f0cd949c5f423a00c56c492289c989" + integrity sha512-k4qFfJ5AUKrWok5KYXp2EPm89b0P/KZpl7Vg4XuOTVVQEhLDBDBU3iBFrjjdgd8fLw96aAtmnwhXHl63bWeBQQ== dependencies: jest-diff "^25.2.1" pretty-format "^25.2.1" @@ -2741,39 +2786,10 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -aws-cdk@^1.54.0: - version "1.56.0" - resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-1.56.0.tgz#7947f2bb9258b976669e36f6cd82953c76e54ee3" - integrity sha512-3ZzPrS5vQEIlusmw5YW8SGPUUqhHF34aaoPY2QyFGd9+wnZYDK7xu1/JGfhMtiFVzwh1A3jBRQL372s0hXWhyA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.56.0" - "@aws-cdk/cloudformation-diff" "1.56.0" - "@aws-cdk/cx-api" "1.56.0" - "@aws-cdk/region-info" "1.56.0" - archiver "^4.0.2" - aws-sdk "^2.715.0" - camelcase "^6.0.0" - cdk-assets "1.56.0" - colors "^1.4.0" - decamelize "^4.0.0" - fs-extra "^9.0.1" - glob "^7.1.6" - json-diff "^0.5.4" - minimatch ">=3.0" - promptly "^3.0.3" - proxy-agent "^3.1.1" - semver "^7.2.2" - source-map-support "^0.5.19" - table "^5.4.6" - uuid "^8.2.0" - wrap-ansi "^7.0.0" - yaml "^1.10.0" - yargs "^15.3.1" - aws-sdk@^2.715.0: - version "2.726.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.726.0.tgz#075aae1922e67e21285abae1bb081252cff4fec3" - integrity sha512-QRQ7MaW5dprdr/T3vCTC+J8TeUfpM45yWsBuATPcCV/oO8afFHVySwygvGLY4oJuo5Mf4mJn3+JYTquo6CqiaA== + version "2.729.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.729.0.tgz#3d850f7825b94b5d8b2aca58ec096973bc4c7e34" + integrity sha512-x5q/+9wM37tBYCmYNGMj+aU9qeXqhbUH0Dz3wlSpAW55+N4NwlBbpqhyCV3oF9bePEJtEnxLGWNXpb9BNWNhew== dependencies: buffer "4.9.2" events "1.1.1" @@ -3046,14 +3062,14 @@ browserify-zlib@^0.2.0: pako "~1.0.5" browserslist@^4.12.0, browserslist@^4.8.5: - version "4.13.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.13.0.tgz#42556cba011e1b0a2775b611cba6a8eca18e940d" - integrity sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ== + version "4.14.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.0.tgz#2908951abfe4ec98737b72f34c3bcedc8d43b000" + integrity sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ== dependencies: - caniuse-lite "^1.0.30001093" - electron-to-chromium "^1.3.488" - escalade "^3.0.1" - node-releases "^1.1.58" + caniuse-lite "^1.0.30001111" + electron-to-chromium "^1.3.523" + escalade "^3.0.2" + node-releases "^1.1.60" bs-logger@0.x: version "0.2.6" @@ -3242,10 +3258,10 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== -caniuse-lite@^1.0.30001093: - version "1.0.30001110" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001110.tgz#9003e3c7f5a43ea6f1193d4d5acba0bfb152c71a" - integrity sha512-KqJWeat4rhSHF0ito4yz9q/JuZHkvn71SsBnxge4azjPDbowIjOUnS8i1xpKGxZxU6BFiPqO2hSV2eiCpFQVRw== +caniuse-lite@^1.0.30001111: + version "1.0.30001112" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001112.tgz#0fffc3b934ff56ff0548c37bc9dad7d882bcf672" + integrity sha512-J05RTQlqsatidif/38aN3PGULCLrg8OYQOlJUKbeYVzC2mGZkZLIztwRlB3MtrfLmawUmjFlNJvy/uhwniIe1Q== capture-exit@^2.0.0: version "2.0.0" @@ -3259,13 +3275,13 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -cdk-assets@1.56.0: - version "1.56.0" - resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.56.0.tgz#7a9805ec4f9eb380da50054bf6958aa1f5f86fd5" - integrity sha512-YlZGTCFrnqSSSCBtgAC2u/MjJamJLerCxwf5smMezOwM2Oo83BswqhAQ+ZQLxQdUifqwN2HNqN0juKeS9X5e5g== +cdk-assets@1.55.0: + version "1.55.0" + resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.55.0.tgz#e1b5c2b409623a50ef05e3c9617be291f59f5522" + integrity sha512-ShWqxAOFEYY4GFLQlECgZbSVyHdKqUo6bD72sIoWp+j4iQNpEFiZVSAxIehx1CIrElNaOJO5H/TUzCLOMpaKxw== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.56.0" - "@aws-cdk/cx-api" "1.56.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" archiver "^4.0.2" aws-sdk "^2.715.0" glob "^7.1.6" @@ -3331,9 +3347,9 @@ chokidar@^2.1.8: fsevents "^1.2.7" chokidar@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" - integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== + version "3.4.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" + integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -4188,10 +4204,10 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron-to-chromium@^1.3.488: - version "1.3.518" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.518.tgz#c54ee9cf1a7bafd6e482a1a6cceac86448d941e8" - integrity sha512-IspiwXYDKZMxo+qc3Vof4WtwbG9BMDbJfati8PYj7uS4DJmJ67pwjCKZxlTBSAuCZSMcbRnj2Xz2H14uiKT7bQ== +electron-to-chromium@^1.3.523: + version "1.3.525" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.525.tgz#bc74080a3fd651b54627ee1fd94972e7c4d38fa8" + integrity sha512-Cni4AhdgdPOH4ZOY0tqgdF+7tF378o4qVRJFq8wxY/asLIVICMAHxfXPfdlivnf6B3Hdg1CI8yuFJ9Wo5kNeSg== elliptic@^6.5.3: version "6.5.3" @@ -4328,7 +4344,7 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -escalade@^3.0.1: +escalade@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== @@ -4464,9 +4480,9 @@ estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" - integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== esutils@^2.0.2: version "2.0.3" @@ -7257,7 +7273,7 @@ node-notifier@^7.0.0: uuid "^8.2.0" which "^2.0.2" -node-releases@^1.1.58: +node-releases@^1.1.60: version "1.1.60" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084" integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA== From d05fcfabb7489849a057d6545211eea96480a348 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 7 Aug 2020 20:14:34 -0400 Subject: [PATCH 025/481] v0.0.7 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index 8d677f39d4..13e0fced9b 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.6" + "version": "0.0.7" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 4e3e21a75e..6486d5559c 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.0.6", + "version": "0.0.7", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "build": "webpack --config webpack.config.js", @@ -53,7 +53,7 @@ "yargs": "^15.4.1" }, "devDependencies": { - "@serverless-stack/resources": "^0.0.6", + "@serverless-stack/resources": "^0.0.7", "webpack": "^4.44.0", "webpack-cli": "^3.3.12" } diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 74bc9dec39..3dd3148398 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.0.6", + "version": "0.0.7", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 79524b1294..7264488485 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.6", + "version": "0.0.7", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 02109d89d750f52a81bb8b4c78148a5059d2e9e3 Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 8 Aug 2020 22:39:14 -0400 Subject: [PATCH 026/481] Fixing CDK versions --- packages/cli/package.json | 1 - packages/cli/test/base-ts/package.json | 4 +- packages/cli/test/base-ts/tsconfig.json | 20 ++--- packages/cli/test/base-ts/yarn.lock | 25 +----- packages/cli/test/base/package.json | 10 +-- packages/cli/test/base/yarn.lock | 31 ++----- packages/cli/test/config/package.json | 2 +- packages/cli/test/config/yarn.lock | 25 +----- packages/cli/test/context/package.json | 2 +- packages/cli/test/context/yarn.lock | 25 +----- packages/cli/test/jest-ts/package.json | 12 +-- packages/cli/test/jest-ts/yarn.lock | 106 ++++++++++-------------- packages/cli/test/jest/package.json | 6 +- packages/cli/test/jest/yarn.lock | 45 ++++------ packages/resources/package.json | 3 +- packages/resources/src/App.ts | 4 - packages/resources/tsconfig.json | 21 ++--- yarn.lock | 97 ++++++++++------------ 18 files changed, 150 insertions(+), 289 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index 6486d5559c..7d70d7e846 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -36,7 +36,6 @@ }, "homepage": "https://serverless-stack.com", "dependencies": { - "@aws-cdk/core": "^1.55.0", "@babel/cli": "^7.10.5", "@babel/core": "^7.10.5", "@babel/plugin-proposal-class-properties": "^7.10.4", diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index d03b94ee08..ed2acf97b2 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -10,8 +10,8 @@ "author": "", "dependencies": { "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-s3": "^1.55.0", - "@aws-cdk/core": "^1.55.0" + "@aws-cdk/aws-s3": "1.55.0", + "@aws-cdk/core": "1.55.0" }, "license": "ISC" } diff --git a/packages/cli/test/base-ts/tsconfig.json b/packages/cli/test/base-ts/tsconfig.json index 7d659db8a8..4cbab2cfc9 100644 --- a/packages/cli/test/base-ts/tsconfig.json +++ b/packages/cli/test/base-ts/tsconfig.json @@ -1,23 +1,13 @@ { "compilerOptions": { - "target": "ES2018", + "target": "ES2015", "module": "commonjs", - "lib": ["es2018"], - "declaration": true, "strict": true, - "noImplicitAny": true, - "strictNullChecks": true, - "noImplicitThis": true, - "alwaysStrict": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": false, - "inlineSourceMap": true, + "skipLibCheck": true, "inlineSources": true, - "experimentalDecorators": true, - "strictPropertyInitialization": false, - "typeRoots": ["./node_modules/@types"] + "inlineSourceMap": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true }, "include": ["lib"] } diff --git a/packages/cli/test/base-ts/yarn.lock b/packages/cli/test/base-ts/yarn.lock index dc7bee22bd..4f525ac259 100644 --- a/packages/cli/test/base-ts/yarn.lock +++ b/packages/cli/test/base-ts/yarn.lock @@ -29,7 +29,7 @@ "@aws-cdk/core" "1.55.0" constructs "^3.0.2" -"@aws-cdk/aws-s3@^1.55.0": +"@aws-cdk/aws-s3@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.55.0.tgz#41a0f134608fa068d0ea2b451a5ec039da4ca372" integrity sha512-VNBTw+ADXcNuIi+ziGpEiGN0kxE/32MGUK6esePMxRr+zv9JqE4q0YwiSSjp0FWnM1g3mufkergXfNcGCCPMrw== @@ -48,15 +48,7 @@ jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/cloud-assembly-schema@1.57.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.57.0.tgz#bf9c63cf3ca8cbf0f37886b43b12f5fab5c7c989" - integrity sha512-IJyV3pgMvpbaIVYpUkBGsxIWh+VK7TxuTbEyHfBra5+VgXLoFdSG2UO80b4v6ou+occRqUGbqAnc/VfYr1uuvw== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/core@1.55.0", "@aws-cdk/core@^1.55.0": +"@aws-cdk/core@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== @@ -75,24 +67,15 @@ "@aws-cdk/cloud-assembly-schema" "1.55.0" semver "^7.2.2" -"@aws-cdk/cx-api@^1.55.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.57.0.tgz#e6ad6936e1781b821317be60978fb20111cb4d16" - integrity sha512-h2qTTofE8cE1rSZB9ny+7AjjmxEdKoxhq+GsQebQ5NZkrN/Rbc+DL77S/GG53koPG4u/ZoA4UcdLz/JqiGgdPA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.57.0" - semver "^7.2.2" - "@aws-cdk/region-info@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== "@serverless-stack/resources@../../../resources": - version "0.0.6" + version "0.0.7" dependencies: - "@aws-cdk/core" "^1.55.0" - "@aws-cdk/cx-api" "^1.55.0" + "@aws-cdk/core" "1.55.0" at-least-node@^1.0.0: version "1.0.0" diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index c3fb9bcb94..d5d386d0bd 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -13,11 +13,11 @@ "author": "", "dependencies": { "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-cognito": "^1.54.0", - "@aws-cdk/aws-dynamodb": "^1.54.0", - "@aws-cdk/aws-iam": "^1.54.0", - "@aws-cdk/aws-s3": "^1.54.0", - "@aws-cdk/core": "^1.54.0" + "@aws-cdk/aws-cognito": "1.55.0", + "@aws-cdk/aws-dynamodb": "1.55.0", + "@aws-cdk/aws-iam": "1.55.0", + "@aws-cdk/aws-s3": "1.55.0", + "@aws-cdk/core": "1.55.0" }, "license": "ISC" } diff --git a/packages/cli/test/base/yarn.lock b/packages/cli/test/base/yarn.lock index dfdf6f5b46..b020e78de7 100644 --- a/packages/cli/test/base/yarn.lock +++ b/packages/cli/test/base/yarn.lock @@ -72,7 +72,7 @@ "@aws-cdk/aws-iam" "1.55.0" "@aws-cdk/core" "1.55.0" -"@aws-cdk/aws-cognito@^1.54.0": +"@aws-cdk/aws-cognito@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.55.0.tgz#a8891bc6f023c88cce8c919be509751a424e7f0b" integrity sha512-necM/Ef7HYgExaSqRh5ximMW6AbDhtj0ARZv3jLN1VTCc7VHgUp+8kkBQ7XUwJVzAhD1D1yumpq51ymyy5vREA== @@ -84,7 +84,7 @@ "@aws-cdk/custom-resources" "1.55.0" constructs "^3.0.2" -"@aws-cdk/aws-dynamodb@^1.54.0": +"@aws-cdk/aws-dynamodb@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.55.0.tgz#da2da006d03933385cd9aebf2404e175cc730cda" integrity sha512-MqiTSZ2B1XFoQ28Y9GCtSPRyQGtTwxJxOiECXQZ3axnCz/3x3HFilvvBL31QsBmGkkRuiCNZ67u6+VUCn3J+LQ== @@ -136,7 +136,7 @@ "@aws-cdk/core" "1.55.0" constructs "^3.0.2" -"@aws-cdk/aws-iam@1.55.0", "@aws-cdk/aws-iam@^1.54.0": +"@aws-cdk/aws-iam@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.55.0.tgz#fedac6b83a9a7ee48e4cda6d877f684f1dac0056" integrity sha512-cAKQN1sEdDXZ2xFOOoWQskDh/GuQS81m6Qd/o6KQeFli8ftXSlD5dq5+UIs+oHBwhE8xwYJLbHDx79L3lQcMug== @@ -207,7 +207,7 @@ "@aws-cdk/cx-api" "1.55.0" constructs "^3.0.2" -"@aws-cdk/aws-s3@1.55.0", "@aws-cdk/aws-s3@^1.54.0": +"@aws-cdk/aws-s3@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.55.0.tgz#41a0f134608fa068d0ea2b451a5ec039da4ca372" integrity sha512-VNBTw+ADXcNuIi+ziGpEiGN0kxE/32MGUK6esePMxRr+zv9JqE4q0YwiSSjp0FWnM1g3mufkergXfNcGCCPMrw== @@ -261,15 +261,7 @@ jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/cloud-assembly-schema@1.57.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.57.0.tgz#bf9c63cf3ca8cbf0f37886b43b12f5fab5c7c989" - integrity sha512-IJyV3pgMvpbaIVYpUkBGsxIWh+VK7TxuTbEyHfBra5+VgXLoFdSG2UO80b4v6ou+occRqUGbqAnc/VfYr1uuvw== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/core@1.55.0", "@aws-cdk/core@^1.54.0", "@aws-cdk/core@^1.55.0": +"@aws-cdk/core@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== @@ -301,24 +293,15 @@ "@aws-cdk/cloud-assembly-schema" "1.55.0" semver "^7.2.2" -"@aws-cdk/cx-api@^1.55.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.57.0.tgz#e6ad6936e1781b821317be60978fb20111cb4d16" - integrity sha512-h2qTTofE8cE1rSZB9ny+7AjjmxEdKoxhq+GsQebQ5NZkrN/Rbc+DL77S/GG53koPG4u/ZoA4UcdLz/JqiGgdPA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.57.0" - semver "^7.2.2" - "@aws-cdk/region-info@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== "@serverless-stack/resources@../../../resources": - version "0.0.6" + version "0.0.7" dependencies: - "@aws-cdk/core" "^1.55.0" - "@aws-cdk/cx-api" "^1.55.0" + "@aws-cdk/core" "1.55.0" at-least-node@^1.0.0: version "1.0.0" diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index 6f7bfb6787..5a527f49c4 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -12,7 +12,7 @@ "author": "", "dependencies": { "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-dynamodb": "^1.55.0" + "@aws-cdk/aws-dynamodb": "1.55.0" }, "license": "ISC" } diff --git a/packages/cli/test/config/yarn.lock b/packages/cli/test/config/yarn.lock index 0ce71d9135..1ccc313014 100644 --- a/packages/cli/test/config/yarn.lock +++ b/packages/cli/test/config/yarn.lock @@ -61,7 +61,7 @@ "@aws-cdk/aws-iam" "1.55.0" "@aws-cdk/core" "1.55.0" -"@aws-cdk/aws-dynamodb@^1.55.0": +"@aws-cdk/aws-dynamodb@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.55.0.tgz#da2da006d03933385cd9aebf2404e175cc730cda" integrity sha512-MqiTSZ2B1XFoQ28Y9GCtSPRyQGtTwxJxOiECXQZ3axnCz/3x3HFilvvBL31QsBmGkkRuiCNZ67u6+VUCn3J+LQ== @@ -227,15 +227,7 @@ jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/cloud-assembly-schema@1.57.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.57.0.tgz#bf9c63cf3ca8cbf0f37886b43b12f5fab5c7c989" - integrity sha512-IJyV3pgMvpbaIVYpUkBGsxIWh+VK7TxuTbEyHfBra5+VgXLoFdSG2UO80b4v6ou+occRqUGbqAnc/VfYr1uuvw== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/core@1.55.0", "@aws-cdk/core@^1.55.0": +"@aws-cdk/core@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== @@ -267,24 +259,15 @@ "@aws-cdk/cloud-assembly-schema" "1.55.0" semver "^7.2.2" -"@aws-cdk/cx-api@^1.55.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.57.0.tgz#e6ad6936e1781b821317be60978fb20111cb4d16" - integrity sha512-h2qTTofE8cE1rSZB9ny+7AjjmxEdKoxhq+GsQebQ5NZkrN/Rbc+DL77S/GG53koPG4u/ZoA4UcdLz/JqiGgdPA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.57.0" - semver "^7.2.2" - "@aws-cdk/region-info@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== "@serverless-stack/resources@../../../resources": - version "0.0.6" + version "0.0.7" dependencies: - "@aws-cdk/core" "^1.55.0" - "@aws-cdk/cx-api" "^1.55.0" + "@aws-cdk/core" "1.55.0" at-least-node@^1.0.0: version "1.0.0" diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index bfcf3131e9..bb67488c3c 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -10,7 +10,7 @@ "author": "", "dependencies": { "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-dynamodb": "^1.55.0" + "@aws-cdk/aws-dynamodb": "1.55.0" }, "license": "ISC" } diff --git a/packages/cli/test/context/yarn.lock b/packages/cli/test/context/yarn.lock index 0ce71d9135..1ccc313014 100644 --- a/packages/cli/test/context/yarn.lock +++ b/packages/cli/test/context/yarn.lock @@ -61,7 +61,7 @@ "@aws-cdk/aws-iam" "1.55.0" "@aws-cdk/core" "1.55.0" -"@aws-cdk/aws-dynamodb@^1.55.0": +"@aws-cdk/aws-dynamodb@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.55.0.tgz#da2da006d03933385cd9aebf2404e175cc730cda" integrity sha512-MqiTSZ2B1XFoQ28Y9GCtSPRyQGtTwxJxOiECXQZ3axnCz/3x3HFilvvBL31QsBmGkkRuiCNZ67u6+VUCn3J+LQ== @@ -227,15 +227,7 @@ jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/cloud-assembly-schema@1.57.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.57.0.tgz#bf9c63cf3ca8cbf0f37886b43b12f5fab5c7c989" - integrity sha512-IJyV3pgMvpbaIVYpUkBGsxIWh+VK7TxuTbEyHfBra5+VgXLoFdSG2UO80b4v6ou+occRqUGbqAnc/VfYr1uuvw== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/core@1.55.0", "@aws-cdk/core@^1.55.0": +"@aws-cdk/core@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== @@ -267,24 +259,15 @@ "@aws-cdk/cloud-assembly-schema" "1.55.0" semver "^7.2.2" -"@aws-cdk/cx-api@^1.55.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.57.0.tgz#e6ad6936e1781b821317be60978fb20111cb4d16" - integrity sha512-h2qTTofE8cE1rSZB9ny+7AjjmxEdKoxhq+GsQebQ5NZkrN/Rbc+DL77S/GG53koPG4u/ZoA4UcdLz/JqiGgdPA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.57.0" - semver "^7.2.2" - "@aws-cdk/region-info@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== "@serverless-stack/resources@../../../resources": - version "0.0.6" + version "0.0.7" dependencies: - "@aws-cdk/core" "^1.55.0" - "@aws-cdk/cx-api" "^1.55.0" + "@aws-cdk/core" "1.55.0" at-least-node@^1.0.0: version "1.0.0" diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index 7270fb7028..095f062f03 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -12,14 +12,14 @@ "dependencies": { "@serverless-stack/cli": "../../../cli", "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-dynamodb": "^1.55.0", - "@aws-cdk/aws-sns": "^1.55.0", - "@aws-cdk/aws-sns-subscriptions": "^1.55.0", - "@aws-cdk/aws-sqs": "^1.55.0", - "@aws-cdk/core": "^1.55.0" + "@aws-cdk/aws-dynamodb": "1.55.0", + "@aws-cdk/aws-sns": "1.55.0", + "@aws-cdk/aws-sns-subscriptions": "1.55.0", + "@aws-cdk/aws-sqs": "1.55.0", + "@aws-cdk/core": "1.55.0" }, "license": "ISC", "devDependencies": { - "@aws-cdk/assert": "^1.55.0" + "@aws-cdk/assert": "1.55.0" } } diff --git a/packages/cli/test/jest-ts/yarn.lock b/packages/cli/test/jest-ts/yarn.lock index 68efbfa4e6..15507b739c 100644 --- a/packages/cli/test/jest-ts/yarn.lock +++ b/packages/cli/test/jest-ts/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@aws-cdk/assert@^1.55.0": +"@aws-cdk/assert@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.55.0.tgz#04114356c911afae0c26b99f6cd91823c2676e9b" integrity sha512-f+EXzBpFPl305EnGXH3DJLY/X51cU/u4enCE9BdCq4AnyR3/eqGpKuhav3lxZ0Yu704j9wZKd2M+3Hn2PPjWvA== @@ -72,7 +72,7 @@ "@aws-cdk/aws-iam" "1.55.0" "@aws-cdk/core" "1.55.0" -"@aws-cdk/aws-dynamodb@^1.55.0": +"@aws-cdk/aws-dynamodb@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.55.0.tgz#da2da006d03933385cd9aebf2404e175cc730cda" integrity sha512-MqiTSZ2B1XFoQ28Y9GCtSPRyQGtTwxJxOiECXQZ3axnCz/3x3HFilvvBL31QsBmGkkRuiCNZ67u6+VUCn3J+LQ== @@ -195,7 +195,7 @@ "@aws-cdk/core" "1.55.0" constructs "^3.0.2" -"@aws-cdk/aws-sns-subscriptions@^1.55.0": +"@aws-cdk/aws-sns-subscriptions@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.55.0.tgz#480081c3d8abf0bb1bb7067cefecf0ca29bce433" integrity sha512-Mk5oKUIlXnw+Uoox88IY4Jlzi09DhiDnJqtZ7p2avyofzZ99ZZihncXwm6XxFe1yCo+c+jdEK0qWklyFWaKfOg== @@ -207,7 +207,7 @@ "@aws-cdk/core" "1.55.0" constructs "^3.0.2" -"@aws-cdk/aws-sns@1.55.0", "@aws-cdk/aws-sns@^1.55.0": +"@aws-cdk/aws-sns@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.55.0.tgz#e3a6ef9b7235e39dba8a3f172da31d63e0d961b1" integrity sha512-WR2ogCi6ngMsZAxq1O71WTxYz1GC9oSxK/K1sj7lboDW712OJXgaz5Giat073TYosyuiZD0uUvSPRvBfxbfEIg== @@ -220,7 +220,7 @@ "@aws-cdk/core" "1.55.0" constructs "^3.0.2" -"@aws-cdk/aws-sqs@1.55.0", "@aws-cdk/aws-sqs@^1.55.0": +"@aws-cdk/aws-sqs@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.55.0.tgz#b70e100e941aad369557ae6ed991a40972b4e20b" integrity sha512-CpXi33lBg8PgMJvxwRpPOQmD+DLUaUHxRpjjjLP6tfUDwk5cIGwRG+QSTd4FmNcDm3Cvb1x0WI8PSdwfgaOSiw== @@ -257,14 +257,6 @@ jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/cloud-assembly-schema@1.57.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.57.0.tgz#bf9c63cf3ca8cbf0f37886b43b12f5fab5c7c989" - integrity sha512-IJyV3pgMvpbaIVYpUkBGsxIWh+VK7TxuTbEyHfBra5+VgXLoFdSG2UO80b4v6ou+occRqUGbqAnc/VfYr1uuvw== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - "@aws-cdk/cloudformation-diff@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.55.0.tgz#f39fb63bd6388c2401373bf200575efe513a5045" @@ -277,7 +269,7 @@ string-width "^4.2.0" table "^5.4.6" -"@aws-cdk/core@1.55.0", "@aws-cdk/core@^1.55.0": +"@aws-cdk/core@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== @@ -309,14 +301,6 @@ "@aws-cdk/cloud-assembly-schema" "1.55.0" semver "^7.2.2" -"@aws-cdk/cx-api@^1.55.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.57.0.tgz#e6ad6936e1781b821317be60978fb20111cb4d16" - integrity sha512-h2qTTofE8cE1rSZB9ny+7AjjmxEdKoxhq+GsQebQ5NZkrN/Rbc+DL77S/GG53koPG4u/ZoA4UcdLz/JqiGgdPA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.57.0" - semver "^7.2.2" - "@aws-cdk/region-info@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" @@ -595,9 +579,9 @@ js-tokens "^4.0.0" "@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.0", "@babel/parser@^7.11.1": - version "7.11.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.2.tgz#0882ab8a455df3065ea2dcb4c753b2460a24bead" - integrity sha512-Vuj/+7vLo6l1Vi7uuO+1ngCDNeVmNbTngcJFKCR/oEtz8tKz0CJxZEGmPt9KcIloZhOZ3Zit6xbpXT2MDlS9Vw== + version "7.11.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.3.tgz#9e1eae46738bcd08e23e867bab43e7b95299a8f9" + integrity sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA== "@babel/plugin-proposal-async-generator-functions@^7.10.4": version "7.10.5" @@ -1420,9 +1404,8 @@ yargs "^15.3.1" "@serverless-stack/cli@../../../cli": - version "0.0.6" + version "0.0.7" dependencies: - "@aws-cdk/core" "^1.55.0" "@babel/cli" "^7.10.5" "@babel/core" "^7.10.5" "@babel/plugin-proposal-class-properties" "^7.10.4" @@ -1439,10 +1422,9 @@ yargs "^15.4.1" "@serverless-stack/resources@../../../resources": - version "0.0.6" + version "0.0.7" dependencies: - "@aws-cdk/core" "^1.55.0" - "@aws-cdk/cx-api" "^1.55.0" + "@aws-cdk/core" "1.55.0" "@sinonjs/commons@^1.7.0": version "1.8.1" @@ -1767,9 +1749,9 @@ atob@^2.1.2: integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== aws-sdk@^2.715.0: - version "2.728.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.728.0.tgz#381805dcac7835b5686694e9468d104595bfce42" - integrity sha512-pUVSxb+04urr6BMHg32Op+kT1IWGmwbelrQKMdLnvgcgysmBu1P4XbGBg8/SmAXWfuqqWjz8YnmFNY46VJE43A== + version "2.729.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.729.0.tgz#3d850f7825b94b5d8b2aca58ec096973bc4c7e34" + integrity sha512-x5q/+9wM37tBYCmYNGMj+aU9qeXqhbUH0Dz3wlSpAW55+N4NwlBbpqhyCV3oF9bePEJtEnxLGWNXpb9BNWNhew== dependencies: buffer "4.9.2" events "1.1.1" @@ -1946,14 +1928,14 @@ browser-process-hrtime@^1.0.0: integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browserslist@^4.12.0, browserslist@^4.8.5: - version "4.13.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.13.0.tgz#42556cba011e1b0a2775b611cba6a8eca18e940d" - integrity sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ== + version "4.14.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.0.tgz#2908951abfe4ec98737b72f34c3bcedc8d43b000" + integrity sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ== dependencies: - caniuse-lite "^1.0.30001093" - electron-to-chromium "^1.3.488" - escalade "^3.0.1" - node-releases "^1.1.58" + caniuse-lite "^1.0.30001111" + electron-to-chromium "^1.3.523" + escalade "^3.0.2" + node-releases "^1.1.60" bs-logger@0.x: version "0.2.6" @@ -2031,10 +2013,10 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== -caniuse-lite@^1.0.30001093: - version "1.0.30001111" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001111.tgz#dd0ce822c70eb6c7c068e4a55c22e19ec1501298" - integrity sha512-xnDje2wchd/8mlJu8sXvWxOGvMgv+uT3iZ3bkIAynKOzToCssWCmkz/ZIkQBs/2pUB4uwnJKVORWQ31UkbVjOg== +caniuse-lite@^1.0.30001111: + version "1.0.30001112" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001112.tgz#0fffc3b934ff56ff0548c37bc9dad7d882bcf672" + integrity sha512-J05RTQlqsatidif/38aN3PGULCLrg8OYQOlJUKbeYVzC2mGZkZLIztwRlB3MtrfLmawUmjFlNJvy/uhwniIe1Q== capture-exit@^2.0.0: version "2.0.0" @@ -2090,7 +2072,7 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -charenc@~0.0.1: +charenc@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= @@ -2294,7 +2276,7 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -crypt@~0.0.1: +crypt@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= @@ -2492,10 +2474,10 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron-to-chromium@^1.3.488: - version "1.3.523" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.523.tgz#494080b318ba929614eebd04405b94c359ea9333" - integrity sha512-D4/3l5DpciddD92IDRtpLearQSGzly8FwBJv+nITvLH8YJrFabpDFe4yuiOJh2MS4/EsXqyQTXyw1toeYPtshQ== +electron-to-chromium@^1.3.523: + version "1.3.526" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.526.tgz#0e004899edf75afc172cce1b8189aac5dca646aa" + integrity sha512-HiroW5ZbGwgT8kCnoEO8qnGjoTPzJxduvV/Vv/wH63eo2N6Zj3xT5fmmaSPAPUM05iN9/5fIEkIg3owTtV6QZg== emittery@^0.7.1: version "0.7.1" @@ -2543,7 +2525,7 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -escalade@^3.0.1: +escalade@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== @@ -3122,7 +3104,7 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -is-buffer@^1.1.5, is-buffer@~1.1.1: +is-buffer@^1.1.5, is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== @@ -3750,9 +3732,9 @@ jsbn@~0.1.0: integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= jsdom@^16.2.2: - version "16.3.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.3.0.tgz#75690b7dac36c67be49c336dcd7219bbbed0810c" - integrity sha512-zggeX5UuEknpdZzv15+MS1dPYG0J/TftiiNunOeNxSl3qr8Z6cIlQpN0IdJa44z9aFxZRIVqRncvEhQ7X5DtZg== + version "16.4.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" + integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== dependencies: abab "^2.0.3" acorn "^7.1.1" @@ -4013,13 +3995,13 @@ map-visit@^1.0.0: object-visit "^1.0.0" md5@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" - integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk= + version "2.3.0" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" + integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== dependencies: - charenc "~0.0.1" - crypt "~0.0.1" - is-buffer "~1.1.1" + charenc "0.0.2" + crypt "0.0.2" + is-buffer "~1.1.6" merge-stream@^2.0.0: version "2.0.0" @@ -4169,7 +4151,7 @@ node-notifier@^7.0.0: uuid "^8.2.0" which "^2.0.2" -node-releases@^1.1.58: +node-releases@^1.1.60: version "1.1.60" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084" integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA== diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index 53ef39a9fb..da3df1a261 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -10,11 +10,11 @@ "author": "", "dependencies": { "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-dynamodb": "^1.54.0", - "@aws-cdk/core": "^1.54.0" + "@aws-cdk/aws-dynamodb": "1.55.0", + "@aws-cdk/core": "1.55.0" }, "license": "ISC", "devDependencies": { - "@aws-cdk/assert": "^1.55.0" + "@aws-cdk/assert": "1.55.0" } } diff --git a/packages/cli/test/jest/yarn.lock b/packages/cli/test/jest/yarn.lock index 61497448d7..4cee59d999 100644 --- a/packages/cli/test/jest/yarn.lock +++ b/packages/cli/test/jest/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@aws-cdk/assert@^1.55.0": +"@aws-cdk/assert@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.55.0.tgz#04114356c911afae0c26b99f6cd91823c2676e9b" integrity sha512-f+EXzBpFPl305EnGXH3DJLY/X51cU/u4enCE9BdCq4AnyR3/eqGpKuhav3lxZ0Yu704j9wZKd2M+3Hn2PPjWvA== @@ -72,7 +72,7 @@ "@aws-cdk/aws-iam" "1.55.0" "@aws-cdk/core" "1.55.0" -"@aws-cdk/aws-dynamodb@^1.54.0": +"@aws-cdk/aws-dynamodb@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.55.0.tgz#da2da006d03933385cd9aebf2404e175cc730cda" integrity sha512-MqiTSZ2B1XFoQ28Y9GCtSPRyQGtTwxJxOiECXQZ3axnCz/3x3HFilvvBL31QsBmGkkRuiCNZ67u6+VUCn3J+LQ== @@ -245,14 +245,6 @@ jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/cloud-assembly-schema@1.57.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.57.0.tgz#bf9c63cf3ca8cbf0f37886b43b12f5fab5c7c989" - integrity sha512-IJyV3pgMvpbaIVYpUkBGsxIWh+VK7TxuTbEyHfBra5+VgXLoFdSG2UO80b4v6ou+occRqUGbqAnc/VfYr1uuvw== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - "@aws-cdk/cloudformation-diff@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.55.0.tgz#f39fb63bd6388c2401373bf200575efe513a5045" @@ -265,7 +257,7 @@ string-width "^4.2.0" table "^5.4.6" -"@aws-cdk/core@1.55.0", "@aws-cdk/core@^1.54.0", "@aws-cdk/core@^1.55.0": +"@aws-cdk/core@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== @@ -297,24 +289,15 @@ "@aws-cdk/cloud-assembly-schema" "1.55.0" semver "^7.2.2" -"@aws-cdk/cx-api@^1.55.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.57.0.tgz#e6ad6936e1781b821317be60978fb20111cb4d16" - integrity sha512-h2qTTofE8cE1rSZB9ny+7AjjmxEdKoxhq+GsQebQ5NZkrN/Rbc+DL77S/GG53koPG4u/ZoA4UcdLz/JqiGgdPA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.57.0" - semver "^7.2.2" - "@aws-cdk/region-info@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== "@serverless-stack/resources@../../../resources": - version "0.0.6" + version "0.0.7" dependencies: - "@aws-cdk/core" "^1.55.0" - "@aws-cdk/cx-api" "^1.55.0" + "@aws-cdk/core" "1.55.0" ajv@^6.10.2: version "6.12.3" @@ -366,7 +349,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -charenc@~0.0.1: +charenc@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= @@ -398,7 +381,7 @@ constructs@^3.0.2: resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== -crypt@~0.0.1: +crypt@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= @@ -443,7 +426,7 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== -is-buffer@~1.1.1: +is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== @@ -483,13 +466,13 @@ lodash@^4.17.14: integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== md5@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" - integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk= + version "2.3.0" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" + integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== dependencies: - charenc "~0.0.1" - crypt "~0.0.1" - is-buffer "~1.1.1" + charenc "0.0.2" + crypt "0.0.2" + is-buffer "~1.1.6" minimatch@^3.0.4: version "3.0.4" diff --git a/packages/resources/package.json b/packages/resources/package.json index 7264488485..c407775aef 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -24,8 +24,7 @@ "access": "public" }, "dependencies": { - "@aws-cdk/core": "^1.55.0", - "@aws-cdk/cx-api": "^1.55.0" + "@aws-cdk/core": "1.55.0" }, "devDependencies": { "@types/node": "^14.0.27", diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index c3e111aac8..94406541ed 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -56,10 +56,6 @@ export class App extends cdk.App { return `${this.stage}-${namePrefix}${logicalName}`; } - // Need to ignore this because the types for this and the user's app come from - // two different sources. This causes a TypeScript error since the same type - // imported from two different sources are treated as different. - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types synth(options: cdk.StageSynthesisOptions = {}): cxapi.CloudAssembly { for (const child of this.node.children) { if ( diff --git a/packages/resources/tsconfig.json b/packages/resources/tsconfig.json index d81be158f9..7f2f18fb48 100644 --- a/packages/resources/tsconfig.json +++ b/packages/resources/tsconfig.json @@ -1,22 +1,13 @@ { "compilerOptions": { - "target": "ES2018", + "target": "ES2015", "module": "commonjs", - "lib": ["es2018"], - "declaration": true, "strict": true, - "noImplicitAny": true, - "strictNullChecks": true, - "noImplicitThis": true, - "alwaysStrict": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": false, - "inlineSourceMap": true, + "skipLibCheck": true, "inlineSources": true, - "experimentalDecorators": true, - "strictPropertyInitialization": false + "inlineSourceMap": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true }, - "exclude": ["node_modules", "dist"] + "include": ["src"] } diff --git a/yarn.lock b/yarn.lock index 6bb9262d85..18614eb3f5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17,14 +17,6 @@ jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/cloud-assembly-schema@1.57.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.57.0.tgz#bf9c63cf3ca8cbf0f37886b43b12f5fab5c7c989" - integrity sha512-IJyV3pgMvpbaIVYpUkBGsxIWh+VK7TxuTbEyHfBra5+VgXLoFdSG2UO80b4v6ou+occRqUGbqAnc/VfYr1uuvw== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - "@aws-cdk/cloudformation-diff@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.55.0.tgz#f39fb63bd6388c2401373bf200575efe513a5045" @@ -37,13 +29,13 @@ string-width "^4.2.0" table "^5.4.6" -"@aws-cdk/core@^1.55.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.57.0.tgz#44e19a18f05d0b0742e5d406474000ef2f6f5db9" - integrity sha512-NOE9u2tVwEF+EN5CYaoC34csBgKLA9rjCWCB6R64RPQ2MlhBFCvQxdG2ZO26nOOvH+yv/3zlylM7F546mfQMHg== +"@aws-cdk/core@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" + integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.57.0" - "@aws-cdk/cx-api" "1.57.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" constructs "^3.0.2" fs-extra "^9.0.1" minimatch "^3.0.4" @@ -56,14 +48,6 @@ "@aws-cdk/cloud-assembly-schema" "1.55.0" semver "^7.2.2" -"@aws-cdk/cx-api@1.57.0", "@aws-cdk/cx-api@^1.55.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.57.0.tgz#e6ad6936e1781b821317be60978fb20111cb4d16" - integrity sha512-h2qTTofE8cE1rSZB9ny+7AjjmxEdKoxhq+GsQebQ5NZkrN/Rbc+DL77S/GG53koPG4u/ZoA4UcdLz/JqiGgdPA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.57.0" - semver "^7.2.2" - "@aws-cdk/region-info@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" @@ -342,9 +326,9 @@ js-tokens "^4.0.0" "@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.0", "@babel/parser@^7.11.1": - version "7.11.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.2.tgz#0882ab8a455df3065ea2dcb4c753b2460a24bead" - integrity sha512-Vuj/+7vLo6l1Vi7uuO+1ngCDNeVmNbTngcJFKCR/oEtz8tKz0CJxZEGmPt9KcIloZhOZ3Zit6xbpXT2MDlS9Vw== + version "7.11.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.3.tgz#9e1eae46738bcd08e23e867bab43e7b95299a8f9" + integrity sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA== "@babel/plugin-proposal-async-generator-functions@^7.10.4": version "7.10.5" @@ -2012,9 +1996,9 @@ "@types/node" ">= 8" "@octokit/types@^5.0.0", "@octokit/types@^5.0.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-5.2.1.tgz#c212f03b0492faf215fa2ae506d5ec18038c2a36" - integrity sha512-PugtgEw8u++zAyBpDpSkR8K1OsT2l8QWp3ECL6bZHFoq9PfHDoKeGFWSuX2Z+Ghy93k1fkKf8tsmqNBv+8dEfQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-5.3.0.tgz#f0d11e73887fdd06f34587d1fed1c2f597b1f752" + integrity sha512-qu6+YHQUl2IJkUBHzal68TNHTjQAgJG2l8C62f1lJ0FLsXhxuT2fe29Bwnl8UXSBof3TqBd92p+YYujzrkvWHQ== dependencies: "@types/node" ">= 8" @@ -3554,13 +3538,13 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -compare-func@^1.3.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.4.tgz#6b07c4c5e8341119baf44578085bda0f4a823516" - integrity sha512-sq2sWtrqKPkEXAC8tEJA1+BqAH9GbFkGBtUOqrUX57VSfwp8xyktctk+uLoRy5eccTdxzDcVIztlYDpKs3Jv1Q== +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== dependencies: array-ify "^1.0.0" - dot-prop "^3.0.0" + dot-prop "^5.1.0" compare-versions@^3.6.0: version "3.6.0" @@ -3636,11 +3620,11 @@ constructs@^3.0.2: integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== conventional-changelog-angular@^5.0.3: - version "5.0.10" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.10.tgz#5cf7b00dd315b6a6a558223c80d5ef24ddb34205" - integrity sha512-k7RPPRs0vp8+BtPsM9uDxRl6KcgqtCJmzRD1wRtgqmhQ96g8ifBGo9O/TZBG23jqlXS/rg8BKRDELxfnQQGiaA== + version "5.0.11" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.11.tgz#99a3ca16e4a5305e0c2c2fae3ef74fd7631fc3fb" + integrity sha512-nSLypht/1yEflhuTogC03i7DX7sOrXGsRn14g131Potqi6cbGbGEE9PSDEHKldabB6N76HiSyw9Ph+kLmC04Qw== dependencies: - compare-func "^1.3.1" + compare-func "^2.0.0" q "^1.5.1" conventional-changelog-core@^3.1.6: @@ -3668,11 +3652,11 @@ conventional-changelog-preset-loader@^2.1.1: integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== conventional-changelog-writer@^4.0.6: - version "4.0.16" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.16.tgz#ca10f2691a8ea6d3c2eb74bd35bcf40aa052dda5" - integrity sha512-jmU1sDJDZpm/dkuFxBeRXvyNcJQeKhGtVcFFkwTphUAzyYWcwz2j36Wcv+Mv2hU3tpvLMkysOPXJTLO55AUrYQ== + version "4.0.17" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.17.tgz#4753aaa138bf5aa59c0b274cb5937efcd2722e21" + integrity sha512-IKQuK3bib/n032KWaSb8YlBFds+aLmzENtnKtxJy3+HqDq5kohu3g/UdNbIHeJWygfnEbZjnCKFxAW0y7ArZAw== dependencies: - compare-func "^1.3.1" + compare-func "^2.0.0" conventional-commits-filter "^2.0.6" dateformat "^3.0.0" handlebars "^4.7.6" @@ -4160,13 +4144,6 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" -dot-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" - integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= - dependencies: - is-obj "^1.0.0" - dot-prop@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" @@ -4174,6 +4151,13 @@ dot-prop@^4.2.0: dependencies: is-obj "^1.0.0" +dot-prop@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" + integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== + dependencies: + is-obj "^2.0.0" + dreamopt@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/dreamopt/-/dreamopt-0.6.0.tgz#d813ccdac8d39d8ad526775514a13dda664d6b4b" @@ -4205,9 +4189,9 @@ ecc-jsbn@~0.1.1: safer-buffer "^2.1.0" electron-to-chromium@^1.3.523: - version "1.3.525" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.525.tgz#bc74080a3fd651b54627ee1fd94972e7c4d38fa8" - integrity sha512-Cni4AhdgdPOH4ZOY0tqgdF+7tF378o4qVRJFq8wxY/asLIVICMAHxfXPfdlivnf6B3Hdg1CI8yuFJ9Wo5kNeSg== + version "1.3.526" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.526.tgz#0e004899edf75afc172cce1b8189aac5dca646aa" + integrity sha512-HiroW5ZbGwgT8kCnoEO8qnGjoTPzJxduvV/Vv/wH63eo2N6Zj3xT5fmmaSPAPUM05iN9/5fIEkIg3owTtV6QZg== elliptic@^6.5.3: version "6.5.3" @@ -5737,6 +5721,11 @@ is-obj@^1.0.0, is-obj@^1.0.1: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -6311,9 +6300,9 @@ jsbn@~0.1.0: integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= jsdom@^16.2.2: - version "16.3.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.3.0.tgz#75690b7dac36c67be49c336dcd7219bbbed0810c" - integrity sha512-zggeX5UuEknpdZzv15+MS1dPYG0J/TftiiNunOeNxSl3qr8Z6cIlQpN0IdJa44z9aFxZRIVqRncvEhQ7X5DtZg== + version "16.4.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" + integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== dependencies: abab "^2.0.3" acorn "^7.1.1" From 53ab9dcf88cbd10441865232a566c41fa5eb0bdb Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 8 Aug 2020 22:39:45 -0400 Subject: [PATCH 027/481] v0.0.8 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index 13e0fced9b..b2c5156974 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.7" + "version": "0.0.8" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 7d70d7e846..5d54224b2f 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.0.7", + "version": "0.0.8", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "build": "webpack --config webpack.config.js", @@ -52,7 +52,7 @@ "yargs": "^15.4.1" }, "devDependencies": { - "@serverless-stack/resources": "^0.0.7", + "@serverless-stack/resources": "^0.0.8", "webpack": "^4.44.0", "webpack-cli": "^3.3.12" } diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 3dd3148398..4e47a425b5 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.0.7", + "version": "0.0.8", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index c407775aef..931767742e 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.7", + "version": "0.0.8", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From e936803b79cb7f7a00e0c2defa8bb5368a30fe83 Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 8 Aug 2020 23:35:58 -0400 Subject: [PATCH 028/481] Adding types in package.json --- packages/cli/test/base-ts/yarn.lock | 2 +- packages/resources/package.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/cli/test/base-ts/yarn.lock b/packages/cli/test/base-ts/yarn.lock index 4f525ac259..3f030441cf 100644 --- a/packages/cli/test/base-ts/yarn.lock +++ b/packages/cli/test/base-ts/yarn.lock @@ -73,7 +73,7 @@ integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== "@serverless-stack/resources@../../../resources": - version "0.0.7" + version "0.0.8" dependencies: "@aws-cdk/core" "1.55.0" diff --git a/packages/resources/package.json b/packages/resources/package.json index 931767742e..9836427ff6 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -4,6 +4,7 @@ "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", + "types": "dist/index.d.ts", "scripts": { "watch": "tsc --watch --rootDir src --outDir dist", "build": "tsc --rootDir src --outDir dist", From 7393817728b1ba91928e2d5c154df2e7118538ed Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 8 Aug 2020 23:47:02 -0400 Subject: [PATCH 029/481] Updating tests --- packages/cli/test/jest-ts/yarn.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/cli/test/jest-ts/yarn.lock b/packages/cli/test/jest-ts/yarn.lock index 15507b739c..3da859d530 100644 --- a/packages/cli/test/jest-ts/yarn.lock +++ b/packages/cli/test/jest-ts/yarn.lock @@ -1404,7 +1404,7 @@ yargs "^15.3.1" "@serverless-stack/cli@../../../cli": - version "0.0.7" + version "0.0.8" dependencies: "@babel/cli" "^7.10.5" "@babel/core" "^7.10.5" @@ -1422,7 +1422,7 @@ yargs "^15.4.1" "@serverless-stack/resources@../../../resources": - version "0.0.7" + version "0.0.8" dependencies: "@aws-cdk/core" "1.55.0" From 02a00e7896c0e45ae2481531cdf449c2cdceb3a7 Mon Sep 17 00:00:00 2001 From: Jay Date: Sun, 9 Aug 2020 13:06:44 -0400 Subject: [PATCH 030/481] Adding npmrc --- .npmrc | 1 + 1 file changed, 1 insertion(+) create mode 100644 .npmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000000..5fca0d518b --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true From e77745ea509281c20d35cbe9d3ab6b51aa5f5133 Mon Sep 17 00:00:00 2001 From: Jay Date: Sun, 9 Aug 2020 13:15:05 -0400 Subject: [PATCH 031/481] Fixing tsconfig --- packages/cli/test/base-ts/tsconfig.json | 1 + packages/resources/tsconfig.json | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/cli/test/base-ts/tsconfig.json b/packages/cli/test/base-ts/tsconfig.json index 4cbab2cfc9..9e25e67454 100644 --- a/packages/cli/test/base-ts/tsconfig.json +++ b/packages/cli/test/base-ts/tsconfig.json @@ -3,6 +3,7 @@ "target": "ES2015", "module": "commonjs", "strict": true, + "declaration": true, "skipLibCheck": true, "inlineSources": true, "inlineSourceMap": true, diff --git a/packages/resources/tsconfig.json b/packages/resources/tsconfig.json index 7f2f18fb48..20e6e22342 100644 --- a/packages/resources/tsconfig.json +++ b/packages/resources/tsconfig.json @@ -3,6 +3,7 @@ "target": "ES2015", "module": "commonjs", "strict": true, + "declaration": true, "skipLibCheck": true, "inlineSources": true, "inlineSourceMap": true, From da41e4f83c3cbf533175ace03e28c9757a1125da Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 10 Aug 2020 14:04:59 -0400 Subject: [PATCH 032/481] Adding source maps and changing build process --- packages/cli/package.json | 3 +- packages/cli/scripts/config/.babelrc.json | 1 - packages/cli/scripts/config/cdkHelpers.js | 2 + packages/cli/scripts/wrapper/run.js | 8 +- packages/cli/test/base/yarn.lock | 374 ---------- yarn.lock | 805 +++++++++++----------- 6 files changed, 416 insertions(+), 777 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index 5d54224b2f..6ee43a687c 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -36,6 +36,7 @@ }, "homepage": "https://serverless-stack.com", "dependencies": { + "@serverless-stack/resources": "^0.0.8", "@babel/cli": "^7.10.5", "@babel/core": "^7.10.5", "@babel/plugin-proposal-class-properties": "^7.10.4", @@ -47,12 +48,12 @@ "core-js": "^3.6.5", "cross-spawn": "^7.0.3", "jest": "^26.1.0", + "source-map-support": "^0.5.19", "ts-jest": "^26.1.4", "typescript": "^3.9.7", "yargs": "^15.4.1" }, "devDependencies": { - "@serverless-stack/resources": "^0.0.8", "webpack": "^4.44.0", "webpack-cli": "^3.3.12" } diff --git a/packages/cli/scripts/config/.babelrc.json b/packages/cli/scripts/config/.babelrc.json index 203e1f1b68..c459dc19c9 100644 --- a/packages/cli/scripts/config/.babelrc.json +++ b/packages/cli/scripts/config/.babelrc.json @@ -1,5 +1,4 @@ { - "sourceMaps": "inline", "presets": [ [ "@babel/preset-env", diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index f7cbac7a83..d3e267783c 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -24,6 +24,8 @@ function transpile() { [ "--config-file", path.join(paths.ownPath, "scripts/config/.babelrc.json"), + "--source-maps", + "inline", paths.appLibPath, "--out-dir", paths.appBuildPath, diff --git a/packages/cli/scripts/wrapper/run.js b/packages/cli/scripts/wrapper/run.js index c28412a159..7335431774 100644 --- a/packages/cli/scripts/wrapper/run.js +++ b/packages/cli/scripts/wrapper/run.js @@ -2,12 +2,16 @@ "use strict"; +require("source-map-support").install(); + +const sst = require("@serverless-stack/resources"); + const config = require("./sst-merged.json"); -const App = require("./include"); +//const App = require("./include"); const main = require("./"); main.default( - new App.default({ + new sst.App({ name: config.name, stage: config.stage, region: config.region, diff --git a/packages/cli/test/base/yarn.lock b/packages/cli/test/base/yarn.lock index b020e78de7..fb57ccd13a 100644 --- a/packages/cli/test/base/yarn.lock +++ b/packages/cli/test/base/yarn.lock @@ -2,377 +2,3 @@ # yarn lockfile v1 -"@aws-cdk/assets@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.55.0.tgz#02442aea514d08b8f1fb744a3e3f944ab9a5e389" - integrity sha512-fOdk2eW8GEgS9vwgpt/BljV1IvCZ/Et7zYcL331+3XAxZpptOYDjNvV/tfhadX9fe1DhwZnsdqQqDO7eAY2+ig== - dependencies: - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-applicationautoscaling@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.55.0.tgz#ba0a1ee4b8bbe5f565c8d76d32408fcfdd8ba046" - integrity sha512-6BCvybrCYqhmtIckpAdDmNvn6B85+D1tL0ZJofiF8/0DOvuV5noZyzJwvwMO4q/WLzqavxoMSxBd7OswVX3trw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.55.0" - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-autoscaling-common@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.55.0.tgz#dc0f64351b2d388d9a195f4316a76ec349cee3f5" - integrity sha512-uQTjJmez/2QOYjmwLhQ/nQg4ywsoWvciS/y55nIlp409Ttuw/RapsrRhVAj3q58/3uTERuIUha4vpNe5C2gUKA== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-certificatemanager@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.55.0.tgz#3b7d34e63ca47310778ed3354411bfa0c1f032af" - integrity sha512-nSJNpm1sPKhde1tvZoKiNxdK7jMrh3YSIGL8XsGE0MkNUIFJFu9NQA8JysCs1Fl+WUM2F18KX3OpmXUuzMbrug== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/aws-route53" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-cloudformation@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.55.0.tgz#bf902768eb09623ae8e9439e1cde03619e3cd62c" - integrity sha512-Jd8ArtzRv6gKKrGlwMXnn5Gsg3xv8V0esRn3P9jfoNR7qMkH/u2O9mGJ8C2UXMdeAeDPJld0Xk5DxFYtHFrx2Q== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-sns" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-cloudwatch@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.55.0.tgz#3e58110d008b9dc0c0cd8a8973b4f0b1ca385fc3" - integrity sha512-WxJyDnrYHH7ox/1gWe4v+TfFR6LC7Q/bQS5jfdG1Wm3ZHzlSjOegcIw7jrkOXY5QI6N4jHM5bVwpQgX9cS8/dQ== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-codeguruprofiler@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.55.0.tgz#9e1504db79fe469dbd1678b9ed1e020f30b816c8" - integrity sha512-MeXlEPAQjhCOs7+u1Q+Stva97E/QkE37E5EgoNRWVMoel8TPlfg3/ogYlsvJzfh2/7N11Z2jsU2kPaFw0czdfw== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - -"@aws-cdk/aws-cognito@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.55.0.tgz#a8891bc6f023c88cce8c919be509751a424e7f0b" - integrity sha512-necM/Ef7HYgExaSqRh5ximMW6AbDhtj0ARZv3jLN1VTCc7VHgUp+8kkBQ7XUwJVzAhD1D1yumpq51ymyy5vREA== - dependencies: - "@aws-cdk/aws-certificatemanager" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/custom-resources" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-dynamodb@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.55.0.tgz#da2da006d03933385cd9aebf2404e175cc730cda" - integrity sha512-MqiTSZ2B1XFoQ28Y9GCtSPRyQGtTwxJxOiECXQZ3axnCz/3x3HFilvvBL31QsBmGkkRuiCNZ67u6+VUCn3J+LQ== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.55.0" - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/custom-resources" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-ec2@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.55.0.tgz#a6c2ab965bd75dd3f255027c11314775289e53a8" - integrity sha512-3FQ6X7BALEFMScsYUNCf+wAY4Zw6FE8V42S6i/OVZhZXY3/iZqiJh/BAJruj/VM1QO9nPRYdF5lnTwFssp17PQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-ssm" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - "@aws-cdk/region-info" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-efs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.55.0.tgz#dfff8ceb245d2cc9f03b158c9d55b64d6a57c0cf" - integrity sha512-BGbF9vby78BNAPwyqzdsErrPgkC0ZCmhIekiTpMdlmhNFuMf6GJMOXY2rr81N7mW6HaAMe6Lqd6w+Te/G0IzHA== - dependencies: - "@aws-cdk/aws-ec2" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-events@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.55.0.tgz#3d784b0bf7ac2a2ebe6e52a9b89365d30bdd9398" - integrity sha512-jL9bygowe/6kYoAIApBcYi92zSjSxyn43CfOOILkplEsxdg3nNKfgnkQ4JgS1WwCuBNOhPAY6Zzc6bLKDi4Igw== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-iam@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.55.0.tgz#fedac6b83a9a7ee48e4cda6d877f684f1dac0056" - integrity sha512-cAKQN1sEdDXZ2xFOOoWQskDh/GuQS81m6Qd/o6KQeFli8ftXSlD5dq5+UIs+oHBwhE8xwYJLbHDx79L3lQcMug== - dependencies: - "@aws-cdk/core" "1.55.0" - "@aws-cdk/region-info" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-kms@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.55.0.tgz#eaaa9b2ea9b7f65d3bdcab8109104477b2ff2baf" - integrity sha512-GSNKEn2w5QwKF+vwlz0N9TPnRh/p/tOFHb+AuNmNq4y2f3c3rTmW/anJu+ISE5qIVzTnev6bLQ+y7Iidt8aXKQ== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-lambda@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.55.0.tgz#751c89a64797bc4ae1ea0801fb39083752455ff9" - integrity sha512-/5df6QR3vbJr/G5/HFmxG/QvxPIjSdzSgaXjK7a/7tzxRISWPaYLN4sVZQHVDYHPe+WZ291uulYE+juiyGrvqQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-codeguruprofiler" "1.55.0" - "@aws-cdk/aws-ec2" "1.55.0" - "@aws-cdk/aws-efs" "1.55.0" - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-s3-assets" "1.55.0" - "@aws-cdk/aws-sqs" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-logs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.55.0.tgz#267aa66bff737e47be5dc3d326ea936cf73c62e6" - integrity sha512-sUflJ+MuB69MwHhtWZUY8jf2JLxXXbmGzs/T3VHnscULAsQoo6Tu5v/kXvtXU04CC8YxUG6+hQkO6bl3bF6M1Q== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-route53@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.55.0.tgz#b6de1cb4ece3897e506ded8caefad6c14c53a033" - integrity sha512-HI0UJLa73iLUv+mnZjOPQmcfhESvqNoUCPN3PwEBAwGECVk/gKBomNV7g/dYNE1MfRHdi/4nIM3T7yC6Br+zNw== - dependencies: - "@aws-cdk/aws-ec2" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-s3-assets@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.55.0.tgz#7243ee94f767d6686b6b9c0caaf9af3aa38a656d" - integrity sha512-zyYFRw1xFmuONiuj9ym9HsnYyAeE2a1L1q2/vpvlXARLIsk7JDG37nnnh40ccm2/YQAoVLXqKZb+VTS5cUKhgA== - dependencies: - "@aws-cdk/assets" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-s3@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.55.0.tgz#41a0f134608fa068d0ea2b451a5ec039da4ca372" - integrity sha512-VNBTw+ADXcNuIi+ziGpEiGN0kxE/32MGUK6esePMxRr+zv9JqE4q0YwiSSjp0FWnM1g3mufkergXfNcGCCPMrw== - dependencies: - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-sns@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.55.0.tgz#e3a6ef9b7235e39dba8a3f172da31d63e0d961b1" - integrity sha512-WR2ogCi6ngMsZAxq1O71WTxYz1GC9oSxK/K1sj7lboDW712OJXgaz5Giat073TYosyuiZD0uUvSPRvBfxbfEIg== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-sqs" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-sqs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.55.0.tgz#b70e100e941aad369557ae6ed991a40972b4e20b" - integrity sha512-CpXi33lBg8PgMJvxwRpPOQmD+DLUaUHxRpjjjLP6tfUDwk5cIGwRG+QSTd4FmNcDm3Cvb1x0WI8PSdwfgaOSiw== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-ssm@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.55.0.tgz#5b51cc6875956829df499b3c9ed34b41e47c63ce" - integrity sha512-lTJj0rDZS5qVapV4WI/yfm3B235hJtMgDHMRMoOAZTNQSgHFvp2/5l1gSKOfqlanS90aeLUIfEXWlXALnwveLg== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/cloud-assembly-schema@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" - integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/core@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" - integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - fs-extra "^9.0.1" - minimatch "^3.0.4" - -"@aws-cdk/custom-resources@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.55.0.tgz#af33b6dc28a9431d60cd6e7774a166919a7622be" - integrity sha512-AKc9y8RYAU4J2b6rB902jq66vwOzshsgNYl5dTS8cFxdCjR4YthuaAyatxXMBJz4SepL+X6kwjxF1ed6/DFFFQ== - dependencies: - "@aws-cdk/aws-cloudformation" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-sns" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/cx-api@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" - integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - semver "^7.2.2" - -"@aws-cdk/region-info@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" - integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== - -"@serverless-stack/resources@../../../resources": - version "0.0.7" - dependencies: - "@aws-cdk/core" "1.55.0" - -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== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -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" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -constructs@^3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== - -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -semver@^7.2.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/yarn.lock b/yarn.lock index 18614eb3f5..e972a5629c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1014,93 +1014,93 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@jest/console@^26.2.0": - version "26.2.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.2.0.tgz#d18f2659b90930e7ec3925fb7209f1ba2cf463f0" - integrity sha512-mXQfx3nSLwiHm1i7jbu+uvi+vvpVjNGzIQYLCfsat9rapC+MJkS4zBseNrgJE0vU921b3P67bQzhduphjY3Tig== +"@jest/console@^26.3.0": + version "26.3.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.3.0.tgz#ed04063efb280c88ba87388b6f16427c0a85c856" + integrity sha512-/5Pn6sJev0nPUcAdpJHMVIsA8sKizL2ZkcKPE5+dJrCccks7tcM7c9wbgHudBJbxXLoTbqsHkG1Dofoem4F09w== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.3.0" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^26.2.0" - jest-util "^26.2.0" + jest-message-util "^26.3.0" + jest-util "^26.3.0" slash "^3.0.0" -"@jest/core@^26.2.2": - version "26.2.2" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.2.2.tgz#63de01ffce967618003dd7a0164b05c8041b81a9" - integrity sha512-UwA8gNI8aeV4FHGfGAUfO/DHjrFVvlBravF1Tm9Kt6qFE+6YHR47kFhgdepOFpADEKstyO+MVdPvkV6/dyt9sA== +"@jest/core@^26.3.0": + version "26.3.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.3.0.tgz#da496913ce7385b5e597b527078bf4ca12d2b627" + integrity sha512-WAAqGMpc+U+GS0oSr/ikI1JdRyPQyTZSVOr1xjnVcfvfUTZCK+wGoN0Cb7dm7HVdpbMQr/NvtM6vBVChctmzHA== dependencies: - "@jest/console" "^26.2.0" - "@jest/reporters" "^26.2.2" - "@jest/test-result" "^26.2.0" - "@jest/transform" "^26.2.2" - "@jest/types" "^26.2.0" + "@jest/console" "^26.3.0" + "@jest/reporters" "^26.3.0" + "@jest/test-result" "^26.3.0" + "@jest/transform" "^26.3.0" + "@jest/types" "^26.3.0" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" - jest-changed-files "^26.2.0" - jest-config "^26.2.2" - jest-haste-map "^26.2.2" - jest-message-util "^26.2.0" + jest-changed-files "^26.3.0" + jest-config "^26.3.0" + jest-haste-map "^26.3.0" + jest-message-util "^26.3.0" jest-regex-util "^26.0.0" - jest-resolve "^26.2.2" - jest-resolve-dependencies "^26.2.2" - jest-runner "^26.2.2" - jest-runtime "^26.2.2" - jest-snapshot "^26.2.2" - jest-util "^26.2.0" - jest-validate "^26.2.0" - jest-watcher "^26.2.0" + jest-resolve "^26.3.0" + jest-resolve-dependencies "^26.3.0" + jest-runner "^26.3.0" + jest-runtime "^26.3.0" + jest-snapshot "^26.3.0" + jest-util "^26.3.0" + jest-validate "^26.3.0" + jest-watcher "^26.3.0" micromatch "^4.0.2" p-each-series "^2.1.0" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^26.2.0": - version "26.2.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.2.0.tgz#f6faee1630fcc2fad208953164bccb31dbe0e45f" - integrity sha512-oCgp9NmEiJ5rbq9VI/v/yYLDpladAAVvFxZgNsnJxOETuzPZ0ZcKKHYjKYwCtPOP1WCrM5nmyuOhMStXFGHn+g== +"@jest/environment@^26.3.0": + version "26.3.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.3.0.tgz#e6953ab711ae3e44754a025f838bde1a7fd236a0" + integrity sha512-EW+MFEo0DGHahf83RAaiqQx688qpXgl99wdb8Fy67ybyzHwR1a58LHcO376xQJHfmoXTu89M09dH3J509cx2AA== dependencies: - "@jest/fake-timers" "^26.2.0" - "@jest/types" "^26.2.0" + "@jest/fake-timers" "^26.3.0" + "@jest/types" "^26.3.0" "@types/node" "*" - jest-mock "^26.2.0" + jest-mock "^26.3.0" -"@jest/fake-timers@^26.2.0": - version "26.2.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.2.0.tgz#b485c57dc4c74d61406a339807a9af4bac74b75a" - integrity sha512-45Gfe7YzYTKqTayBrEdAF0qYyAsNRBzfkV0IyVUm3cx7AsCWlnjilBM4T40w7IXT5VspOgMPikQlV0M6gHwy/g== +"@jest/fake-timers@^26.3.0": + version "26.3.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.3.0.tgz#f515d4667a6770f60ae06ae050f4e001126c666a" + integrity sha512-ZL9ytUiRwVP8ujfRepffokBvD2KbxbqMhrXSBhSdAhISCw3gOkuntisiSFv+A6HN0n0fF4cxzICEKZENLmW+1A== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.3.0" "@sinonjs/fake-timers" "^6.0.1" "@types/node" "*" - jest-message-util "^26.2.0" - jest-mock "^26.2.0" - jest-util "^26.2.0" + jest-message-util "^26.3.0" + jest-mock "^26.3.0" + jest-util "^26.3.0" -"@jest/globals@^26.2.0": - version "26.2.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.2.0.tgz#ad78f1104f250c1a4bf5184a2ba51facc59b23f6" - integrity sha512-Hoc6ScEIPaym7RNytIL2ILSUWIGKlwEv+JNFof9dGYOdvPjb2evEURSslvCMkNuNg1ECEClTE8PH7ULlMJntYA== +"@jest/globals@^26.3.0": + version "26.3.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.3.0.tgz#41a931c5bce4572b437dffab7146850044c7d359" + integrity sha512-oPe30VG9zor2U3Ev7khCM2LkjO3D+mgAv6s5D3Ed0sxfELxoRZwR8d1VgYWVQljcpumMwe9tDrKNuzgVjbEt7g== dependencies: - "@jest/environment" "^26.2.0" - "@jest/types" "^26.2.0" - expect "^26.2.0" + "@jest/environment" "^26.3.0" + "@jest/types" "^26.3.0" + expect "^26.3.0" -"@jest/reporters@^26.2.2": - version "26.2.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.2.2.tgz#5a8632ab410f4fc57782bc05dcf115e91818e869" - integrity sha512-7854GPbdFTAorWVh+RNHyPO9waRIN6TcvCezKVxI1khvFq9YjINTW7J3WU+tbR038Ynn6WjYred6vtT0YmIWVQ== +"@jest/reporters@^26.3.0": + version "26.3.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.3.0.tgz#12112cc0a073a92e7205d7ceee4de7cfac232105" + integrity sha512-MfLJOUPxhGb3sRT/wFjHXd6gyVQ1Fb1XxbEwY+gqdDBpg3pq5qAB5eiBUvcTheFRHmhu3gOv3UZ/gtxmqGBA+Q== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.2.0" - "@jest/test-result" "^26.2.0" - "@jest/transform" "^26.2.2" - "@jest/types" "^26.2.0" + "@jest/console" "^26.3.0" + "@jest/test-result" "^26.3.0" + "@jest/transform" "^26.3.0" + "@jest/types" "^26.3.0" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" @@ -1111,63 +1111,63 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.0.2" - jest-haste-map "^26.2.2" - jest-resolve "^26.2.2" - jest-util "^26.2.0" - jest-worker "^26.2.1" + jest-haste-map "^26.3.0" + jest-resolve "^26.3.0" + jest-util "^26.3.0" + jest-worker "^26.3.0" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" terminal-link "^2.0.0" - v8-to-istanbul "^4.1.3" + v8-to-istanbul "^5.0.1" optionalDependencies: node-notifier "^7.0.0" -"@jest/source-map@^26.1.0": - version "26.1.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.1.0.tgz#a6a020d00e7d9478f4b690167c5e8b77e63adb26" - integrity sha512-XYRPYx4eEVX15cMT9mstnO7hkHP3krNtKfxUYd8L7gbtia8JvZZ6bMzSwa6IQJENbudTwKMw5R1BePRD+bkEmA== +"@jest/source-map@^26.3.0": + version "26.3.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.3.0.tgz#0e646e519883c14c551f7b5ae4ff5f1bfe4fc3d9" + integrity sha512-hWX5IHmMDWe1kyrKl7IhFwqOuAreIwHhbe44+XH2ZRHjrKIh0LO5eLQ/vxHFeAfRwJapmxuqlGAEYLadDq6ZGQ== dependencies: callsites "^3.0.0" graceful-fs "^4.2.4" source-map "^0.6.0" -"@jest/test-result@^26.2.0": - version "26.2.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.2.0.tgz#51c9b165c8851cfcf7a3466019114785e154f76b" - integrity sha512-kgPlmcVafpmfyQEu36HClK+CWI6wIaAWDHNxfQtGuKsgoa2uQAYdlxjMDBEa3CvI40+2U3v36gQF6oZBkoKatw== +"@jest/test-result@^26.3.0": + version "26.3.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.3.0.tgz#46cde01fa10c0aaeb7431bf71e4a20d885bc7fdb" + integrity sha512-a8rbLqzW/q7HWheFVMtghXV79Xk+GWwOK1FrtimpI5n1la2SY0qHri3/b0/1F0Ve0/yJmV8pEhxDfVwiUBGtgg== dependencies: - "@jest/console" "^26.2.0" - "@jest/types" "^26.2.0" + "@jest/console" "^26.3.0" + "@jest/types" "^26.3.0" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^26.2.2": - version "26.2.2" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.2.2.tgz#5e8091f2e6c61fdf242af566cb820a4eadc6c4af" - integrity sha512-SliZWon5LNqV/lVXkeowSU6L8++FGOu3f43T01L1Gv6wnFDP00ER0utV9jyK9dVNdXqfMNCN66sfcyar/o7BNw== +"@jest/test-sequencer@^26.3.0": + version "26.3.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.3.0.tgz#f22b4927f8eef391ebaba6205d6aba328af9fda9" + integrity sha512-G7TA0Z85uj5l1m9UKZ/nXbArn0y+MeLKbojNLDHgjb1PpNNFDAOO6FJhk9We34m/hadcciMcJFnxV94dV2TX+w== dependencies: - "@jest/test-result" "^26.2.0" + "@jest/test-result" "^26.3.0" graceful-fs "^4.2.4" - jest-haste-map "^26.2.2" - jest-runner "^26.2.2" - jest-runtime "^26.2.2" + jest-haste-map "^26.3.0" + jest-runner "^26.3.0" + jest-runtime "^26.3.0" -"@jest/transform@^26.2.2": - version "26.2.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.2.2.tgz#86c005c8d5d749ac54d8df53ea58675fffe7a97e" - integrity sha512-c1snhvi5wRVre1XyoO3Eef5SEWpuBCH/cEbntBUd9tI5sNYiBDmO0My/lc5IuuGYKp/HFIHV1eZpSx5yjdkhKw== +"@jest/transform@^26.3.0": + version "26.3.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.3.0.tgz#c393e0e01459da8a8bfc6d2a7c2ece1a13e8ba55" + integrity sha512-Isj6NB68QorGoFWvcOjlUhpkT56PqNIsXKR7XfvoDlCANn/IANlh8DrKAA2l2JKC3yWSMH5wS0GwuQM20w3b2A== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^26.2.0" + "@jest/types" "^26.3.0" babel-plugin-istanbul "^6.0.0" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.2.4" - jest-haste-map "^26.2.2" + jest-haste-map "^26.3.0" jest-regex-util "^26.0.0" - jest-util "^26.2.0" + jest-util "^26.3.0" micromatch "^4.0.2" pirates "^4.0.1" slash "^3.0.0" @@ -1184,13 +1184,13 @@ "@types/yargs" "^15.0.0" chalk "^3.0.0" -"@jest/types@^26.2.0": - version "26.2.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.2.0.tgz#b28ca1fb517a4eb48c0addea7fcd9edc4ab45721" - integrity sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA== +"@jest/types@^26.3.0": + version "26.3.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.3.0.tgz#97627bf4bdb72c55346eef98e3b3f7ddc4941f71" + integrity sha512-BDPG23U0qDeAvU4f99haztXwdAg3hz4El95LkAM+tHAqqhiVzRpEGHHU8EDxT/AnxOrA65YjLBwDahdJ9pTLJQ== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" + "@types/istanbul-reports" "^3.0.0" "@types/node" "*" "@types/yargs" "^15.0.0" chalk "^4.0.0" @@ -1996,9 +1996,9 @@ "@types/node" ">= 8" "@octokit/types@^5.0.0", "@octokit/types@^5.0.1": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-5.3.0.tgz#f0d11e73887fdd06f34587d1fed1c2f597b1f752" - integrity sha512-qu6+YHQUl2IJkUBHzal68TNHTjQAgJG2l8C62f1lJ0FLsXhxuT2fe29Bwnl8UXSBof3TqBd92p+YYujzrkvWHQ== + version "5.4.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-5.4.0.tgz#25f2f8e24fec09214553168c41c06383c9d0f529" + integrity sha512-D/uotqF69M50OIlwMqgyIg9PuLT2daOiBAYF0P40I2ekFA2ESwwBY5dxZe/UhXdPvIbNKDzuZmQrO7rMpuFbcg== dependencies: "@types/node" ">= 8" @@ -2123,6 +2123,13 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" +"@types/istanbul-reports@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" + integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== + dependencies: + "@types/istanbul-lib-report" "*" + "@types/jest@^26.0.7": version "26.0.9" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.9.tgz#0543b57da5f0cd949c5f423a00c56c492289c989" @@ -2184,51 +2191,51 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.8.0.tgz#f82947bcdd9a4e42be7ad80dfd61f1dc411dd1df" - integrity sha512-lFb4VCDleFSR+eo4Ew+HvrJ37ZH1Y9ZyE+qyP7EiwBpcCVxwmUc5PAqhShCQ8N8U5vqYydm74nss+a0wrrCErw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.9.0.tgz#0fe529b33d63c9a94f7503ca2bb12c84b9477ff3" + integrity sha512-UD6b4p0/hSe1xdTvRCENSx7iQ+KR6ourlZFfYuPC7FlXEzdHuLPrEmuxZ23b2zW96KJX9Z3w05GE/wNOiEzrVg== dependencies: - "@typescript-eslint/experimental-utils" "3.8.0" + "@typescript-eslint/experimental-utils" "3.9.0" debug "^4.1.1" functional-red-black-tree "^1.0.1" regexpp "^3.0.0" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.8.0.tgz#ac1f7c88322dcfb7635ece6f0441516dd951099a" - integrity sha512-o8T1blo1lAJE0QDsW7nSyvZHbiDzQDjINJKyB44Z3sSL39qBy5L10ScI/XwDtaiunoyKGLiY9bzRk4YjsUZl8w== +"@typescript-eslint/experimental-utils@3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.9.0.tgz#3171d8ddba0bf02a8c2034188593630914fcf5ee" + integrity sha512-/vSHUDYizSOhrOJdjYxPNGfb4a3ibO8zd4nUKo/QBFOmxosT3cVUV7KIg8Dwi6TXlr667G7YPqFK9+VSZOorNA== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/types" "3.8.0" - "@typescript-eslint/typescript-estree" "3.8.0" + "@typescript-eslint/types" "3.9.0" + "@typescript-eslint/typescript-estree" "3.9.0" eslint-scope "^5.0.0" eslint-utils "^2.0.0" "@typescript-eslint/parser@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.8.0.tgz#8e1dcd404299bf79492409c81c415fa95a7c622b" - integrity sha512-u5vjOBaCsnMVQOvkKCXAmmOhyyMmFFf5dbkM3TIbg3MZ2pyv5peE4gj81UAbTHwTOXEwf7eCQTUMKrDl/+qGnA== + version "3.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.9.0.tgz#344978a265d9a5c7c8f13e62c78172a4374dabea" + integrity sha512-rDHOKb6uW2jZkHQniUQVZkixQrfsZGUCNWWbKWep4A5hGhN5dLHMUCNAWnC4tXRlHedXkTDptIpxs6e4Pz8UfA== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "3.8.0" - "@typescript-eslint/types" "3.8.0" - "@typescript-eslint/typescript-estree" "3.8.0" + "@typescript-eslint/experimental-utils" "3.9.0" + "@typescript-eslint/types" "3.9.0" + "@typescript-eslint/typescript-estree" "3.9.0" eslint-visitor-keys "^1.1.0" -"@typescript-eslint/types@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.8.0.tgz#58581dd863f86e0cd23353d94362bb90b4bea796" - integrity sha512-8kROmEQkv6ss9kdQ44vCN1dTrgu4Qxrd2kXr10kz2NP5T8/7JnEfYNxCpPkArbLIhhkGLZV3aVMplH1RXQRF7Q== +"@typescript-eslint/types@3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.9.0.tgz#be9d0aa451e1bf3ce99f2e6920659e5b2e6bfe18" + integrity sha512-rb6LDr+dk9RVVXO/NJE8dT1pGlso3voNdEIN8ugm4CWM5w5GimbThCMiMl4da1t5u3YwPWEwOnKAULCZgBtBHg== -"@typescript-eslint/typescript-estree@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.8.0.tgz#0606d19f629f813dbdd5a34c7a1e895d6191cac6" - integrity sha512-MTv9nPDhlKfclwnplRNDL44mP2SY96YmPGxmMbMy6x12I+pERcxpIUht7DXZaj4mOKKtet53wYYXU0ABaiXrLw== +"@typescript-eslint/typescript-estree@3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.9.0.tgz#c6abbb50fa0d715cab46fef67ca6378bf2eaca13" + integrity sha512-N+158NKgN4rOmWVfvKOMoMFV5n8XxAliaKkArm/sOypzQ0bUL8MSnOEBW3VFIeffb/K5ce/cAV0yYhR7U4ALAA== dependencies: - "@typescript-eslint/types" "3.8.0" - "@typescript-eslint/visitor-keys" "3.8.0" + "@typescript-eslint/types" "3.9.0" + "@typescript-eslint/visitor-keys" "3.9.0" debug "^4.1.1" glob "^7.1.6" is-glob "^4.0.1" @@ -2236,10 +2243,10 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.8.0.tgz#ad35110249fb3fc30a36bfcbfeea93e710cfaab1" - integrity sha512-gfqQWyVPpT9NpLREXNR820AYwgz+Kr1GuF3nf1wxpHD6hdxI62tq03ToomFnDxY0m3pUB39IF7sil7D5TQexLA== +"@typescript-eslint/visitor-keys@3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.9.0.tgz#44de8e1b1df67adaf3b94d6b60b80f8faebc8dd3" + integrity sha512-O1qeoGqDbu0EZUC/MZ6F1WHTIzcBVhGqDj3LhTnj65WUA548RXVxUHbYhAW9bZWfb2rnX9QsbbP5nmeJ5Z4+ng== dependencies: eslint-visitor-keys "^1.1.0" @@ -2795,16 +2802,16 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== -babel-jest@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.2.2.tgz#70f618f2d7016ed71b232241199308985462f812" - integrity sha512-JmLuePHgA+DSOdOL8lPxCgD2LhPPm+rdw1vnxR73PpIrnmKCS2/aBhtkAcxQWuUcW2hBrH8MJ3LKXE7aWpNZyA== +babel-jest@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.3.0.tgz#10d0ca4b529ca3e7d1417855ef7d7bd6fc0c3463" + integrity sha512-sxPnQGEyHAOPF8NcUsD0g7hDCnvLL2XyblRBcgrzTWBB/mAIpWow3n1bEL+VghnnZfreLhFSBsFluRoK2tRK4g== dependencies: - "@jest/transform" "^26.2.2" - "@jest/types" "^26.2.0" + "@jest/transform" "^26.3.0" + "@jest/types" "^26.3.0" "@types/babel__core" "^7.1.7" babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.2.0" + babel-preset-jest "^26.3.0" chalk "^4.0.0" graceful-fs "^4.2.4" slash "^3.0.0" @@ -2837,7 +2844,7 @@ babel-plugin-jest-hoist@^26.2.0: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-preset-current-node-syntax@^0.1.2: +babel-preset-current-node-syntax@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.3.tgz#b4b547acddbf963cba555ba9f9cbbb70bfd044da" integrity sha512-uyexu1sVwcdFnyq9o8UQYsXwXflIh8LvrF5+cKrYam93ned1CStffB3+BEcsxGSgagoA3GEyjDqO4a/58hyPYQ== @@ -2854,13 +2861,13 @@ babel-preset-current-node-syntax@^0.1.2: "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -babel-preset-jest@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.2.0.tgz#f198201a4e543a43eb40bc481e19736e095fd3e0" - integrity sha512-R1k8kdP3R9phYQugXeNnK/nvCGlBzG4m3EoIIukC80GXb6wCv2XiwPhK6K9MAkQcMszWBYvl2Wm+yigyXFQqXg== +babel-preset-jest@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.3.0.tgz#ed6344506225c065fd8a0b53e191986f74890776" + integrity sha512-5WPdf7nyYi2/eRxCbVrE1kKCWxgWY4RsPEbdJWFm7QsesFGqjdkyLeu1zRkwM1cxK6EPIlNd6d2AxLk7J+t4pw== dependencies: babel-plugin-jest-hoist "^26.2.0" - babel-preset-current-node-syntax "^0.1.2" + babel-preset-current-node-syntax "^0.1.3" balanced-match@^1.0.0: version "1.0.0" @@ -4092,10 +4099,10 @@ diff-sequences@^25.2.6: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== -diff-sequences@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.0.0.tgz#0760059a5c287637b842bd7085311db7060e88a6" - integrity sha512-JC/eHYEC3aSS0vZGjuoc4vHA0yAQTzhQQldXMeMF+JlxLGJlCO38Gma82NV9gk1jGFz8mDzUMeaKXvjRRdJ2dg== +diff-sequences@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.3.0.tgz#62a59b1b29ab7fd27cef2a33ae52abe73042d0a2" + integrity sha512-5j5vdRcw3CNctePNYN0Wy2e/JbWT6cAYnXv5OuqPhDpyCGc0uLu2TK0zOCJWNB9kOIfYMSpIulRaDgIi4HJ6Ig== diff@^4.0.2: version "4.0.2" @@ -4554,16 +4561,16 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.2.0.tgz#0140dd9cc7376d7833852e9cda88c05414f1efba" - integrity sha512-8AMBQ9UVcoUXt0B7v+5/U5H6yiUR87L6eKCfjE3spx7Ya5lF+ebUo37MCFBML2OiLfkX1sxmQOZhIDonyVTkcw== +expect@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.3.0.tgz#6145b4999a2c9bd64a644360d0c781c44d369c54" + integrity sha512-3tC0dpPgkTGkycM9H+mMjzIhm8I3ZAOV+y1Cj3xmF9iKxDeHBCAB64hf1OY//bMzQ/AftfodNy2pQWMKpTIV8Q== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.3.0" ansi-styles "^4.0.0" - jest-get-type "^26.0.0" - jest-matcher-utils "^26.2.0" - jest-message-util "^26.2.0" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.3.0" + jest-message-util "^26.3.0" jest-regex-util "^26.0.0" extend-shallow@^2.0.1: @@ -4963,9 +4970,9 @@ get-stream@^4.0.0, get-stream@^4.1.0: pump "^3.0.0" get-stream@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" - integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + 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" @@ -5021,17 +5028,17 @@ git-semver-tags@^2.0.3: semver "^6.0.0" git-up@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.1.tgz#cb2ef086653640e721d2042fe3104857d89007c0" - integrity sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw== + version "4.0.2" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.2.tgz#10c3d731051b366dc19d3df454bfca3f77913a7c" + integrity sha512-kbuvus1dWQB2sSW4cbfTeGpCMd8ge9jx9RKnhXhuJ7tnvT+NIrTVfYZxjtflZddQYcmdOTlkAcjmx7bor+15AQ== dependencies: is-ssh "^1.3.0" parse-url "^5.0.0" git-url-parse@^11.1.2: - version "11.1.2" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.1.2.tgz#aff1a897c36cc93699270587bea3dbcbbb95de67" - integrity sha512-gZeLVGY8QVKMIkckncX+iCq2/L8PlwncvDFKiWkBn9EtCfYDbliRTTp6qzyQ1VMdITUfq7293zDzfpjdiGASSQ== + version "11.1.3" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.1.3.tgz#03625b6fc09905e9ad1da7bb2b84be1bf9123143" + integrity sha512-GPsfwticcu52WQ+eHp0IYkAyaOASgYdtsQDIt4rUp6GbiNt1P9ddrh3O0kQB0eD4UJZszVqNT3+9Zwcg40fywA== dependencies: git-up "^4.0.0" @@ -5761,9 +5768,9 @@ is-regexp@^1.0.0: integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= is-ssh@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" - integrity sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg== + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.2.tgz#a4b82ab63d73976fd8263cceee27f99a88bdae2b" + integrity sha512-elEw0/0c2UscLrNG+OAorbP539E3rhliKPg+hDMWN9VwrDXfYK+4PBEykDPfxlYYtQvl84TascnQyobfQLHEhQ== dependencies: protocols "^1.1.0" @@ -5891,57 +5898,57 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.2.0.tgz#b4946201defe0c919a2f3d601e9f98cb21dacc15" - integrity sha512-+RyJb+F1K/XBLIYiL449vo5D+CvlHv29QveJUWNPXuUicyZcq+tf1wNxmmFeRvAU1+TzhwqczSjxnCCFt7+8iA== +jest-changed-files@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.3.0.tgz#68fb2a7eb125f50839dab1f5a17db3607fe195b1" + integrity sha512-1C4R4nijgPltX6fugKxM4oQ18zimS7LqQ+zTTY8lMCMFPrxqBFb7KJH0Z2fRQJvw2Slbaipsqq7s1mgX5Iot+g== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.3.0" execa "^4.0.0" throat "^5.0.0" -jest-cli@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.2.2.tgz#4c273e5474baafac1eb15fd25aaafb4703f5ffbc" - integrity sha512-vVcly0n/ijZvdy6gPQiQt0YANwX2hLTPQZHtW7Vi3gcFdKTtif7YpI85F8R8JYy5DFSWz4x1OW0arnxlziu5Lw== +jest-cli@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.3.0.tgz#046164f0b8194234aaa76bb58e867f5d6e3fcf53" + integrity sha512-vrlDluEjnNTJNpmw+lJ1Dvjhc+2o7QG0dG8n+iDu3NaoQ9OzqNeZsZZ0a9KP7SdtD5BXgvGSpCWTlLH5SqtxcA== dependencies: - "@jest/core" "^26.2.2" - "@jest/test-result" "^26.2.0" - "@jest/types" "^26.2.0" + "@jest/core" "^26.3.0" + "@jest/test-result" "^26.3.0" + "@jest/types" "^26.3.0" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" is-ci "^2.0.0" - jest-config "^26.2.2" - jest-util "^26.2.0" - jest-validate "^26.2.0" + jest-config "^26.3.0" + jest-util "^26.3.0" + jest-validate "^26.3.0" prompts "^2.0.1" yargs "^15.3.1" -jest-config@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.2.2.tgz#f3ebc7e2bc3f49de8ed3f8007152f345bb111917" - integrity sha512-2lhxH0y4YFOijMJ65usuf78m7+9/8+hAb1PZQtdRdgnQpAb4zP6KcVDDktpHEkspBKnc2lmFu+RQdHukUUbiTg== +jest-config@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.3.0.tgz#adb776fa88fc45ea719287cc09e4f0f5d5b3ce00" + integrity sha512-xzvmhKYOXOc/JjGabUUXoi7Nxu6QpY5zJxND85wdqFrdP7raJT5wqlrVJbp6Bv4Sj1e83Z8bkxjsZCpwPASaPw== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.2.2" - "@jest/types" "^26.2.0" - babel-jest "^26.2.2" + "@jest/test-sequencer" "^26.3.0" + "@jest/types" "^26.3.0" + babel-jest "^26.3.0" chalk "^4.0.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" - jest-environment-jsdom "^26.2.0" - jest-environment-node "^26.2.0" - jest-get-type "^26.0.0" - jest-jasmine2 "^26.2.2" + jest-environment-jsdom "^26.3.0" + jest-environment-node "^26.3.0" + jest-get-type "^26.3.0" + jest-jasmine2 "^26.3.0" jest-regex-util "^26.0.0" - jest-resolve "^26.2.2" - jest-util "^26.2.0" - jest-validate "^26.2.0" + jest-resolve "^26.3.0" + jest-util "^26.3.0" + jest-validate "^26.3.0" micromatch "^4.0.2" - pretty-format "^26.2.0" + pretty-format "^26.3.0" jest-diff@^25.2.1: version "25.5.0" @@ -5953,15 +5960,15 @@ jest-diff@^25.2.1: jest-get-type "^25.2.6" pretty-format "^25.5.0" -jest-diff@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.2.0.tgz#dee62c771adbb23ae585f3f1bd289a6e8ef4f298" - integrity sha512-Wu4Aopi2nzCsHWLBlD48TgRy3Z7OsxlwvHNd1YSnHc7q1NJfrmyCPoUXrTIrydQOG5ApaYpsAsdfnMbJqV1/wQ== +jest-diff@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.3.0.tgz#485eea87b7003d34628c960c6c625ffe4de8ab04" + integrity sha512-q5OZAtnr5CbHzrhjANzc3wvROk7+rcjCUI5uqM4cjOjtscNKfbJKBs3YhsWWhsdsIZzI3gc6wOpm49r6S61beg== dependencies: chalk "^4.0.0" - diff-sequences "^26.0.0" - jest-get-type "^26.0.0" - pretty-format "^26.2.0" + diff-sequences "^26.3.0" + jest-get-type "^26.3.0" + pretty-format "^26.3.0" jest-docblock@^26.0.0: version "26.0.0" @@ -5970,122 +5977,122 @@ jest-docblock@^26.0.0: dependencies: detect-newline "^3.0.0" -jest-each@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.2.0.tgz#aec8efa01d072d7982c900e74940863385fa884e" - integrity sha512-gHPCaho1twWHB5bpcfnozlc6mrMi+VAewVPNgmwf81x2Gzr6XO4dl+eOrwPWxbkYlgjgrYjWK2xgKnixbzH3Ew== +jest-each@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.3.0.tgz#f70192d59f6a8d72b4ccfe8e9a39ddf667b1263e" + integrity sha512-OSAnLv0Eo/sDVhV0ifT2u6Q4aYUBoZ97R4k9cQshUFLTco0iRDbViJiW3Y6ySZjW95Tb83/xMYCppBih/7sW/A== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.3.0" chalk "^4.0.0" - jest-get-type "^26.0.0" - jest-util "^26.2.0" - pretty-format "^26.2.0" - -jest-environment-jsdom@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.2.0.tgz#6443a6f3569297dcaa4371dddf93acaf167302dc" - integrity sha512-sDG24+5M4NuIGzkI3rJW8XUlrpkvIdE9Zz4jhD8OBnVxAw+Y1jUk9X+lAOD48nlfUTlnt3lbAI3k2Ox+WF3S0g== - dependencies: - "@jest/environment" "^26.2.0" - "@jest/fake-timers" "^26.2.0" - "@jest/types" "^26.2.0" + jest-get-type "^26.3.0" + jest-util "^26.3.0" + pretty-format "^26.3.0" + +jest-environment-jsdom@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.3.0.tgz#3b749ba0f3a78e92ba2c9ce519e16e5dd515220c" + integrity sha512-zra8He2btIMJkAzvLaiZ9QwEPGEetbxqmjEBQwhH3CA+Hhhu0jSiEJxnJMbX28TGUvPLxBt/zyaTLrOPF4yMJA== + dependencies: + "@jest/environment" "^26.3.0" + "@jest/fake-timers" "^26.3.0" + "@jest/types" "^26.3.0" "@types/node" "*" - jest-mock "^26.2.0" - jest-util "^26.2.0" + jest-mock "^26.3.0" + jest-util "^26.3.0" jsdom "^16.2.2" -jest-environment-node@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.2.0.tgz#fee89e06bdd4bed3f75ee2978d73ede9bb57a681" - integrity sha512-4M5ExTYkJ19efBzkiXtBi74JqKLDciEk4CEsp5tTjWGYMrlKFQFtwIVG3tW1OGE0AlXhZjuHPwubuRYY4j4uOw== +jest-environment-node@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.3.0.tgz#56c6cfb506d1597f94ee8d717072bda7228df849" + integrity sha512-c9BvYoo+FGcMj5FunbBgtBnbR5qk3uky8PKyRVpSfe2/8+LrNQMiXX53z6q2kY+j15SkjQCOSL/6LHnCPLVHNw== dependencies: - "@jest/environment" "^26.2.0" - "@jest/fake-timers" "^26.2.0" - "@jest/types" "^26.2.0" + "@jest/environment" "^26.3.0" + "@jest/fake-timers" "^26.3.0" + "@jest/types" "^26.3.0" "@types/node" "*" - jest-mock "^26.2.0" - jest-util "^26.2.0" + jest-mock "^26.3.0" + jest-util "^26.3.0" jest-get-type@^25.2.6: version "25.2.6" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== -jest-get-type@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.0.0.tgz#381e986a718998dbfafcd5ec05934be538db4039" - integrity sha512-zRc1OAPnnws1EVfykXOj19zo2EMw5Hi6HLbFCSjpuJiXtOWAYIjNsHVSbpQ8bDX7L5BGYGI8m+HmKdjHYFF0kg== +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== -jest-haste-map@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.2.2.tgz#6d4267b1903854bfdf6a871419f35a82f03ae71e" - integrity sha512-3sJlMSt+NHnzCB+0KhJ1Ut4zKJBiJOlbrqEYNdRQGlXTv8kqzZWjUKQRY3pkjmlf+7rYjAV++MQ4D6g4DhAyOg== +jest-haste-map@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.3.0.tgz#c51a3b40100d53ab777bfdad382d2e7a00e5c726" + integrity sha512-DHWBpTJgJhLLGwE5Z1ZaqLTYqeODQIZpby0zMBsCU9iRFHYyhklYqP4EiG73j5dkbaAdSZhgB938mL51Q5LeZA== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.3.0" "@types/graceful-fs" "^4.1.2" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.4" jest-regex-util "^26.0.0" - jest-serializer "^26.2.0" - jest-util "^26.2.0" - jest-worker "^26.2.1" + jest-serializer "^26.3.0" + jest-util "^26.3.0" + jest-worker "^26.3.0" micromatch "^4.0.2" sane "^4.0.3" walker "^1.0.7" optionalDependencies: fsevents "^2.1.2" -jest-jasmine2@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.2.2.tgz#d82b1721fac2b153a4f8b3f0c95e81e702812de2" - integrity sha512-Q8AAHpbiZMVMy4Hz9j1j1bg2yUmPa1W9StBvcHqRaKa9PHaDUMwds8LwaDyzP/2fkybcTQE4+pTMDOG9826tEw== +jest-jasmine2@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.3.0.tgz#5c9d365d3032342801cfd15abd2cdcccc7fb01ff" + integrity sha512-ZPkkA2XfH/fcLOp0SjeR4uDrMoNFilcwxLHORpjfMrcU0BFHNNRaF3DnslCdmewzqaERqtmHpYo8jj34RT+m2g== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.2.0" - "@jest/source-map" "^26.1.0" - "@jest/test-result" "^26.2.0" - "@jest/types" "^26.2.0" + "@jest/environment" "^26.3.0" + "@jest/source-map" "^26.3.0" + "@jest/test-result" "^26.3.0" + "@jest/types" "^26.3.0" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^26.2.0" + expect "^26.3.0" is-generator-fn "^2.0.0" - jest-each "^26.2.0" - jest-matcher-utils "^26.2.0" - jest-message-util "^26.2.0" - jest-runtime "^26.2.2" - jest-snapshot "^26.2.2" - jest-util "^26.2.0" - pretty-format "^26.2.0" + jest-each "^26.3.0" + jest-matcher-utils "^26.3.0" + jest-message-util "^26.3.0" + jest-runtime "^26.3.0" + jest-snapshot "^26.3.0" + jest-util "^26.3.0" + pretty-format "^26.3.0" throat "^5.0.0" -jest-leak-detector@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.2.0.tgz#073ee6d8db7a9af043e7ce99d8eea17a4fb0cc50" - integrity sha512-aQdzTX1YiufkXA1teXZu5xXOJgy7wZQw6OJ0iH5CtQlOETe6gTSocaYKUNui1SzQ91xmqEUZ/WRavg9FD82rtQ== +jest-leak-detector@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.3.0.tgz#74c077a243585cc1d2cfd50d231d373100dd6e6f" + integrity sha512-8C2Bur0S6n2xgW5kx22bDbe+Jjz9sM7/abr7DRQ48ww6q4w7vVzEpDEZiY7KatjTHtUloLTAqwTXEXg+tuETTg== dependencies: - jest-get-type "^26.0.0" - pretty-format "^26.2.0" + jest-get-type "^26.3.0" + pretty-format "^26.3.0" -jest-matcher-utils@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.2.0.tgz#b107af98c2b8c557ffd46c1adf06f794aa52d622" - integrity sha512-2cf/LW2VFb3ayPHrH36ZDjp9+CAeAe/pWBAwsV8t3dKcrINzXPVxq8qMWOxwt5BaeBCx4ZupVGH7VIgB8v66vQ== +jest-matcher-utils@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.3.0.tgz#41dfecac8e7a38e38330c159789711a50edffaed" + integrity sha512-M5ZRSp6qpyzZyrLwXD2Sop7xaxm6qu/mKvqWU+BOSPTa4Y0ZEoKUYBzus/emg6kaVt7Ov9xMDLLZR1SrC8FxCw== dependencies: chalk "^4.0.0" - jest-diff "^26.2.0" - jest-get-type "^26.0.0" - pretty-format "^26.2.0" + jest-diff "^26.3.0" + jest-get-type "^26.3.0" + pretty-format "^26.3.0" -jest-message-util@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.2.0.tgz#757fbc1323992297092bb9016a71a2eb12fd22ea" - integrity sha512-g362RhZaJuqeqG108n1sthz5vNpzTNy926eNDszo4ncRbmmcMRIUAZibnd6s5v2XSBCChAxQtCoN25gnzp7JbQ== +jest-message-util@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.3.0.tgz#3bdb538af27bb417f2d4d16557606fd082d5841a" + integrity sha512-xIavRYqr4/otGOiLxLZGj3ieMmjcNE73Ui+LdSW/Y790j5acqCsAdDiLIbzHCZMpN07JOENRWX5DcU+OQ+TjTA== dependencies: "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.2.0" + "@jest/types" "^26.3.0" "@types/stack-utils" "^1.0.1" chalk "^4.0.0" graceful-fs "^4.2.4" @@ -6093,12 +6100,12 @@ jest-message-util@^26.2.0: slash "^3.0.0" stack-utils "^2.0.2" -jest-mock@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.2.0.tgz#a1b3303ab38c34aa1dbbc16ab57cdc1a59ed50d1" - integrity sha512-XeC7yWtWmWByoyVOHSsE7NYsbXJLtJNgmhD7z4MKumKm6ET0si81bsSLbQ64L5saK3TgsHo2B/UqG5KNZ1Sp/Q== +jest-mock@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.3.0.tgz#ee62207c3c5ebe5f35b760e1267fee19a1cfdeba" + integrity sha512-PeaRrg8Dc6mnS35gOo/CbZovoDPKAeB1FICZiuagAgGvbWdNNyjQjkOaGUa/3N3JtpQ/Mh9P4A2D4Fv51NnP8Q== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.3.0" "@types/node" "*" jest-pnp-resolver@^1.2.2: @@ -6111,170 +6118,170 @@ jest-regex-util@^26.0.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== -jest-resolve-dependencies@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.2.2.tgz#2ad3cd9281730e9a5c487cd846984c5324e47929" - integrity sha512-S5vufDmVbQXnpP7435gr710xeBGUFcKNpNswke7RmFvDQtmqPjPVU/rCeMlEU0p6vfpnjhwMYeaVjKZAy5QYJA== +jest-resolve-dependencies@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.3.0.tgz#98e4a2d17ffa352e6be72a3d180f2260d9d4f473" + integrity sha512-j5rZ2BUh8vVjJZ7bpgCre0t6mbFLm5BWfVhYb1H35A3nbPN3kepzMqkMnKXPhwyLIVwn25uYkv6LHc2/Xa1sGw== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.3.0" jest-regex-util "^26.0.0" - jest-snapshot "^26.2.2" + jest-snapshot "^26.3.0" -jest-resolve@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.2.2.tgz#324a20a516148d61bffa0058ed0c77c510ecfd3e" - integrity sha512-ye9Tj/ILn/0OgFPE/3dGpQPUqt4dHwIocxt5qSBkyzxQD8PbL0bVxBogX2FHxsd3zJA7V2H/cHXnBnNyyT9YoQ== +jest-resolve@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.3.0.tgz#c497cded13714b9ec98848837525323184fb4c95" + integrity sha512-+oKVWDkXjdZ4Xciuxv+M5e5v/Z3RLjrKIzen9tq3IO6HpzsLf9Mk3rET5du1uU8iVUCvz4/1PmjzNF50Uc7l2A== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.3.0" chalk "^4.0.0" graceful-fs "^4.2.4" jest-pnp-resolver "^1.2.2" - jest-util "^26.2.0" + jest-util "^26.3.0" read-pkg-up "^7.0.1" resolve "^1.17.0" slash "^3.0.0" -jest-runner@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.2.2.tgz#6d03d057886e9c782e10b2cf37443f902fe0e39e" - integrity sha512-/qb6ptgX+KQ+aNMohJf1We695kaAfuu3u3ouh66TWfhTpLd9WbqcF6163d/tMoEY8GqPztXPLuyG0rHRVDLxCA== +jest-runner@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.3.0.tgz#30093549b31659e64e987728a6ef601f464916b6" + integrity sha512-eiPKgbhTM4q6A7RBh4qzKf6hwFDJMfqoFJubFvWSrHdZUsvSiBWYDqQI+FUXDFxDAOn/AfZjKURACAH3fUDjwA== dependencies: - "@jest/console" "^26.2.0" - "@jest/environment" "^26.2.0" - "@jest/test-result" "^26.2.0" - "@jest/types" "^26.2.0" + "@jest/console" "^26.3.0" + "@jest/environment" "^26.3.0" + "@jest/test-result" "^26.3.0" + "@jest/types" "^26.3.0" "@types/node" "*" chalk "^4.0.0" emittery "^0.7.1" exit "^0.1.2" graceful-fs "^4.2.4" - jest-config "^26.2.2" + jest-config "^26.3.0" jest-docblock "^26.0.0" - jest-haste-map "^26.2.2" - jest-leak-detector "^26.2.0" - jest-message-util "^26.2.0" - jest-resolve "^26.2.2" - jest-runtime "^26.2.2" - jest-util "^26.2.0" - jest-worker "^26.2.1" + jest-haste-map "^26.3.0" + jest-leak-detector "^26.3.0" + jest-message-util "^26.3.0" + jest-resolve "^26.3.0" + jest-runtime "^26.3.0" + jest-util "^26.3.0" + jest-worker "^26.3.0" source-map-support "^0.5.6" throat "^5.0.0" -jest-runtime@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.2.2.tgz#2480ff79320680a643031dd21998d7c63d83ab68" - integrity sha512-a8VXM3DxCDnCIdl9+QucWFfQ28KdqmyVFqeKLigHdErtsx56O2ZIdQkhFSuP1XtVrG9nTNHbKxjh5XL1UaFDVQ== - dependencies: - "@jest/console" "^26.2.0" - "@jest/environment" "^26.2.0" - "@jest/fake-timers" "^26.2.0" - "@jest/globals" "^26.2.0" - "@jest/source-map" "^26.1.0" - "@jest/test-result" "^26.2.0" - "@jest/transform" "^26.2.2" - "@jest/types" "^26.2.0" +jest-runtime@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.3.0.tgz#2f2d030b8a3d6c7653cb9c40544d687a1a5c09af" + integrity sha512-cqCz+S76qwZcPnddkLCjuNw9O8/lB+i1odjz2hpvpDogXLp0qSMs+Slh1gBjB5V4feUyBHav/550Mr3FeTdmnA== + dependencies: + "@jest/console" "^26.3.0" + "@jest/environment" "^26.3.0" + "@jest/fake-timers" "^26.3.0" + "@jest/globals" "^26.3.0" + "@jest/source-map" "^26.3.0" + "@jest/test-result" "^26.3.0" + "@jest/transform" "^26.3.0" + "@jest/types" "^26.3.0" "@types/yargs" "^15.0.0" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-config "^26.2.2" - jest-haste-map "^26.2.2" - jest-message-util "^26.2.0" - jest-mock "^26.2.0" + jest-config "^26.3.0" + jest-haste-map "^26.3.0" + jest-message-util "^26.3.0" + jest-mock "^26.3.0" jest-regex-util "^26.0.0" - jest-resolve "^26.2.2" - jest-snapshot "^26.2.2" - jest-util "^26.2.0" - jest-validate "^26.2.0" + jest-resolve "^26.3.0" + jest-snapshot "^26.3.0" + jest-util "^26.3.0" + jest-validate "^26.3.0" slash "^3.0.0" strip-bom "^4.0.0" yargs "^15.3.1" -jest-serializer@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.2.0.tgz#92dcae5666322410f4bf50211dd749274959ddac" - integrity sha512-V7snZI9IVmyJEu0Qy0inmuXgnMWDtrsbV2p9CRAcmlmPVwpC2ZM8wXyYpiugDQnwLHx0V4+Pnog9Exb3UO8M6Q== +jest-serializer@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.3.0.tgz#1c9d5e1b74d6e5f7e7f9627080fa205d976c33ef" + integrity sha512-IDRBQBLPlKa4flg77fqg0n/pH87tcRKwe8zxOVTWISxGpPHYkRZ1dXKyh04JOja7gppc60+soKVZ791mruVdow== dependencies: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.2.2.tgz#9d2eda083a4a1017b157e351868749bd63211799" - integrity sha512-NdjD8aJS7ePu268Wy/n/aR1TUisG0BOY+QOW4f6h46UHEKOgYmmkvJhh2BqdVZQ0BHSxTMt04WpCf9njzx8KtA== +jest-snapshot@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.3.0.tgz#8bec08bda1133ad0a7fa0184b1c385f801e3b1df" + integrity sha512-tHVUIeOTN/0SZN2ZjBZHzPG5txs/6uEQx2mwjxIT7QRE7pddPLd8jktXthyIz6bV+3GKetWXSV4YAoPUQwrfMA== dependencies: "@babel/types" "^7.0.0" - "@jest/types" "^26.2.0" + "@jest/types" "^26.3.0" "@types/prettier" "^2.0.0" chalk "^4.0.0" - expect "^26.2.0" + expect "^26.3.0" graceful-fs "^4.2.4" - jest-diff "^26.2.0" - jest-get-type "^26.0.0" - jest-haste-map "^26.2.2" - jest-matcher-utils "^26.2.0" - jest-message-util "^26.2.0" - jest-resolve "^26.2.2" + jest-diff "^26.3.0" + jest-get-type "^26.3.0" + jest-haste-map "^26.3.0" + jest-matcher-utils "^26.3.0" + jest-message-util "^26.3.0" + jest-resolve "^26.3.0" natural-compare "^1.4.0" - pretty-format "^26.2.0" + pretty-format "^26.3.0" semver "^7.3.2" -jest-util@26.x, jest-util@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.2.0.tgz#0597d2a27c559340957609f106c408c17c1d88ac" - integrity sha512-YmDwJxLZ1kFxpxPfhSJ0rIkiZOM0PQbRcfH0TzJOhqCisCAsI1WcmoQqO83My9xeVA2k4n+rzg2UuexVKzPpig== +jest-util@26.x, jest-util@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.3.0.tgz#a8974b191df30e2bf523ebbfdbaeb8efca535b3e" + integrity sha512-4zpn6bwV0+AMFN0IYhH/wnzIQzRaYVrz1A8sYnRnj4UXDXbOVtWmlaZkO9mipFqZ13okIfN87aDoJWB7VH6hcw== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.3.0" "@types/node" "*" chalk "^4.0.0" graceful-fs "^4.2.4" is-ci "^2.0.0" micromatch "^4.0.2" -jest-validate@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.2.0.tgz#97fedf3e7984b7608854cbf925b9ca6ebcbdb78a" - integrity sha512-8XKn3hM6VIVmLNuyzYLCPsRCT83o8jMZYhbieh4dAyKLc4Ypr36rVKC+c8WMpWkfHHpGnEkvWUjjIAyobEIY/Q== +jest-validate@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.3.0.tgz#751c3f8e20a15b9d7ada8d1a361d0975ba793249" + integrity sha512-oIJWqkIdgh1Q1O7ku4kDGkQoFKUOtZyDMbfYs4DsBi6r+FDY37xKTyZ30nM8F6yGZfB72qc7XB+3qKRgokwoXg== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.3.0" camelcase "^6.0.0" chalk "^4.0.0" - jest-get-type "^26.0.0" + jest-get-type "^26.3.0" leven "^3.1.0" - pretty-format "^26.2.0" + pretty-format "^26.3.0" -jest-watcher@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.2.0.tgz#45bdf2fecadd19c0a501f3b071a474dca636825b" - integrity sha512-674Boco4Joe0CzgKPL6K4Z9LgyLx+ZvW2GilbpYb8rFEUkmDGgsZdv1Hv5rxsRpb1HLgKUOL/JfbttRCuFdZXQ== +jest-watcher@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.3.0.tgz#f8ef3068ddb8af160ef868400318dc4a898eed08" + integrity sha512-XnLdKmyCGJ3VoF6G/p5ohbJ04q/vv5aH9ENI+i6BL0uu9WWB6Z7Z2lhQQk0d2AVZcRGp1yW+/TsoToMhBFPRdQ== dependencies: - "@jest/test-result" "^26.2.0" - "@jest/types" "^26.2.0" + "@jest/test-result" "^26.3.0" + "@jest/types" "^26.3.0" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^26.2.0" + jest-util "^26.3.0" string-length "^4.0.1" -jest-worker@^26.2.1: - version "26.2.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.2.1.tgz#5d630ab93f666b53f911615bc13e662b382bd513" - integrity sha512-+XcGMMJDTeEGncRb5M5Zq9P7K4sQ1sirhjdOxsN1462h6lFo9w59bl2LVQmdGEEeU3m+maZCkS2Tcc9SfCHO4A== +jest-worker@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.3.0.tgz#7c8a97e4f4364b4f05ed8bca8ca0c24de091871f" + integrity sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^7.0.0" jest@^26.1.0: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.2.2.tgz#a022303887b145147204c5f66e6a5c832333c7e7" - integrity sha512-EkJNyHiAG1+A8pqSz7cXttoVa34hOEzN/MrnJhYnfp5VHxflVcf2pu3oJSrhiy6LfIutLdWo+n6q63tjcoIeig== + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.3.0.tgz#366e25827831e65743a324bc476de54f41f2e07b" + integrity sha512-LFCry7NS6bTa4BUGUHC+NvZ3B9WG7Jv8F+Lb96dAJFM23LMwSsL5RiJcw9S+nejsh8lS1VxHq+RSH4Xa9tujpA== dependencies: - "@jest/core" "^26.2.2" + "@jest/core" "^26.3.0" import-local "^3.0.2" - jest-cli "^26.2.2" + jest-cli "^26.3.0" jmespath@0.15.0: version "0.15.0" @@ -6540,9 +6547,9 @@ lint-staged@^10.2.11: stringify-object "^3.3.0" listr2@^2.1.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-2.4.1.tgz#006fc94ae77b3195403cbf3a4a563e2d6366224f" - integrity sha512-8pYsCZCztr5+KAjReLyBeGhLV0vaQ2Du/eMe/ux9QAfQl7efiWejM1IWjALh0zHIRYuIbhQ8N2KztZ4ci56pnQ== + version "2.5.0" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-2.5.0.tgz#87d40dae3f0c6676be8995ef2e4449fb3979f408" + integrity sha512-C7GqFmf+C7LglqYJU1feOBw46hvCRO1Ja58TmKZtXP+JyyHE2m1+ZhoBfliIGeUuiT9PuPU1OJ9kbky93+Qziw== dependencies: chalk "^4.1.0" cli-truncate "^2.1.0" @@ -6550,7 +6557,7 @@ listr2@^2.1.0: indent-string "^4.0.0" log-update "^4.0.0" p-map "^4.0.0" - rxjs "^6.6.0" + rxjs "^6.6.2" through "^2.3.8" load-json-file@^1.0.0: @@ -7471,9 +7478,9 @@ onetime@^2.0.0: mimic-fn "^1.0.0" onetime@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.1.tgz#5c8016847b0d67fcedb7eef254751cfcdc7e9418" - integrity sha512-ZpZpjcJeugQfWsfyQlshVoowIIQ1qBGSVll4rfDq6JJVO//fesjoX808hXWfBjY+ROZgpKDI5TRSRBSoJiZ8eg== + 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" @@ -7729,17 +7736,17 @@ parse-passwd@^1.0.0: integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= parse-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.1.tgz#0ec769704949778cb3b8eda5e994c32073a1adff" - integrity sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.2.tgz#ef14f0d3d77bae8dd4bc66563a4c151aac9e65aa" + integrity sha512-HSqVz6iuXSiL8C1ku5Gl1Z5cwDd9Wo0q8CoffdAghP6bz8pJa1tcMC+m4N+z6VAS8QdksnIGq1TB6EgR4vPR6w== dependencies: is-ssh "^1.3.0" protocols "^1.4.0" parse-url@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.1.tgz#99c4084fc11be14141efa41b3d117a96fcb9527f" - integrity sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg== + version "5.0.2" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.2.tgz#856a3be1fcdf78dc93fc8b3791f169072d898b59" + integrity sha512-Czj+GIit4cdWtxo3ISZCvLiUjErSo0iI3wJ+q9Oi3QuMYTI6OZu+7cewMWZ+C1YAnKhYTk6/TLuhIgCypLthPA== dependencies: is-ssh "^1.3.0" normalize-url "^3.3.0" @@ -7930,12 +7937,12 @@ pretty-format@^25.2.1, pretty-format@^25.5.0: ansi-styles "^4.0.0" react-is "^16.12.0" -pretty-format@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.2.0.tgz#83ecc8d7de676ff224225055e72bd64821cec4f1" - integrity sha512-qi/8IuBu2clY9G7qCXgCdD1Bf9w+sXakdHTRToknzMtVy0g7c4MBWaZy7MfB7ndKZovRO6XRwJiAYqq+MC7SDA== +pretty-format@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.3.0.tgz#d9a7b4bb2948cabc646e6a7729b12f686f3fed36" + integrity sha512-24kRw4C2Ok8+SHquydTZZCZPF2fvANI7rChGs8sNu784+1Jkq5jVFMvNAJSLuLy6XUcP3Fnw+SscLIQag/CG8Q== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.3.0" ansi-regex "^5.0.0" ansi-styles "^4.0.0" react-is "^16.12.0" @@ -7997,9 +8004,9 @@ proto-list@~1.2.1: integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= protocols@^1.1.0, protocols@^1.4.0: - version "1.4.7" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" - integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg== + version "1.4.8" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8" + integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg== protoduck@^5.0.1: version "5.0.1" @@ -8575,7 +8582,7 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs@^6.4.0, rxjs@^6.6.0: +rxjs@^6.4.0, rxjs@^6.6.2: version "6.6.2" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.2.tgz#8096a7ac03f2cc4fe5860ef6e572810d9e01c0d2" integrity sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg== @@ -9806,10 +9813,10 @@ v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== -v8-to-istanbul@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6" - integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ== +v8-to-istanbul@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-5.0.1.tgz#0608f5b49a481458625edb058488607f25498ba5" + integrity sha512-mbDNjuDajqYe3TXFk5qxcQy8L1msXNE37WTlLoqqpBfRsimbNcrlhQlDPntmECEcUvdC+AQ8CyMMf6EUx1r74Q== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" From de14240d015658239f286351472743dc477aa88c Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 10 Aug 2020 14:05:46 -0400 Subject: [PATCH 033/481] v0.0.9 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index b2c5156974..10068137b3 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.8" + "version": "0.0.9" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 6ee43a687c..8b6271313f 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.0.8", + "version": "0.0.9", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "build": "webpack --config webpack.config.js", @@ -36,12 +36,12 @@ }, "homepage": "https://serverless-stack.com", "dependencies": { - "@serverless-stack/resources": "^0.0.8", "@babel/cli": "^7.10.5", "@babel/core": "^7.10.5", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", "@serverless-stack/aws-cdk": "1.55.0-rc.1", + "@serverless-stack/resources": "^0.0.9", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "chalk": "^4.1.0", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 4e47a425b5..e2646df28c 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.0.8", + "version": "0.0.9", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 9836427ff6..86d3b46f36 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.8", + "version": "0.0.9", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 43cd7f1fc126f7a97c29923aa6aa8bc94cf8caaa Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 11 Aug 2020 12:43:53 -0400 Subject: [PATCH 034/481] Fixing error handling in resources and removing Webpack --- package.json | 2 +- packages/cli/bin/scripts.js | 2 + packages/cli/package.json | 8 +- packages/cli/scripts/config/cdkHelpers.js | 4 - packages/cli/test/base/package.json | 1 - packages/cli/test/base/yarn.lock | 374 +++++++ packages/cli/test/helpers/setup-tests.js | 6 - packages/cli/test/jest-ts/yarn.lock | 13 +- packages/cli/webpack.config.js | 14 - packages/resources/src/App.ts | 4 +- packages/resources/src/Stack.ts | 2 +- yarn.lock | 1156 ++------------------- 12 files changed, 452 insertions(+), 1134 deletions(-) delete mode 100644 packages/cli/webpack.config.js diff --git a/package.json b/package.json index 7e63b53947..f677b936b7 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "lint": "eslint . --fix --ext .js,.ts", "npm-publish": "lerna publish", "clean": "lerna run clean", - "postinstall": "lerna run prepare", + "postinstall": "lerna run prepare --scope=@serverless-stack/resources", "test": "lerna run test --stream --scope=@serverless-stack/cli" }, "devDependencies": { diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index e7e3dc4cab..b806627162 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -2,6 +2,8 @@ "use strict"; +require("source-map-support").install(); + // Makes the script crash on unhandled rejections instead of silently // ignoring them. In the future, promise rejections that are not handled will // terminate the Node.js process with a non-zero exit code. diff --git a/packages/cli/package.json b/packages/cli/package.json index 8b6271313f..1e0a356e2e 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -3,9 +3,6 @@ "version": "0.0.9", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { - "build": "webpack --config webpack.config.js", - "clean": "rm -rf scripts/wrapper/dist", - "prepare": "npm run build", "test": "jest --no-watchman" }, "bin": { @@ -53,8 +50,5 @@ "typescript": "^3.9.7", "yargs": "^15.4.1" }, - "devDependencies": { - "webpack": "^4.44.0", - "webpack-cli": "^3.3.12" - } + "devDependencies": {} } diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index d3e267783c..a84f0e965a 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -40,10 +40,6 @@ function copyWrapperFiles() { path.join(paths.ownScriptsPath, "wrapper/run.js"), path.join(paths.appBuildPath, "run.js") ); - fs.copyFileSync( - path.join(paths.ownScriptsPath, "wrapper/dist/include.js"), - path.join(paths.appBuildPath, "include.js") - ); } function copyCdkConfig() { diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index d5d386d0bd..e080adaabf 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -4,7 +4,6 @@ "description": "", "main": "index.js", "scripts": { - "compile": "cd ../../../resources && yarn run prepare && cd ../cli && yarn run prepare", "build": "../../bin/scripts.js build", "remove": "../../bin/scripts.js remove", "deploy": "../../bin/scripts.js deploy" diff --git a/packages/cli/test/base/yarn.lock b/packages/cli/test/base/yarn.lock index fb57ccd13a..a29fb2d7d4 100644 --- a/packages/cli/test/base/yarn.lock +++ b/packages/cli/test/base/yarn.lock @@ -2,3 +2,377 @@ # yarn lockfile v1 +"@aws-cdk/assets@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.55.0.tgz#02442aea514d08b8f1fb744a3e3f944ab9a5e389" + integrity sha512-fOdk2eW8GEgS9vwgpt/BljV1IvCZ/Et7zYcL331+3XAxZpptOYDjNvV/tfhadX9fe1DhwZnsdqQqDO7eAY2+ig== + dependencies: + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-applicationautoscaling@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.55.0.tgz#ba0a1ee4b8bbe5f565c8d76d32408fcfdd8ba046" + integrity sha512-6BCvybrCYqhmtIckpAdDmNvn6B85+D1tL0ZJofiF8/0DOvuV5noZyzJwvwMO4q/WLzqavxoMSxBd7OswVX3trw== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.55.0" + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-autoscaling-common@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.55.0.tgz#dc0f64351b2d388d9a195f4316a76ec349cee3f5" + integrity sha512-uQTjJmez/2QOYjmwLhQ/nQg4ywsoWvciS/y55nIlp409Ttuw/RapsrRhVAj3q58/3uTERuIUha4vpNe5C2gUKA== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-certificatemanager@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.55.0.tgz#3b7d34e63ca47310778ed3354411bfa0c1f032af" + integrity sha512-nSJNpm1sPKhde1tvZoKiNxdK7jMrh3YSIGL8XsGE0MkNUIFJFu9NQA8JysCs1Fl+WUM2F18KX3OpmXUuzMbrug== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/aws-route53" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-cloudformation@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.55.0.tgz#bf902768eb09623ae8e9439e1cde03619e3cd62c" + integrity sha512-Jd8ArtzRv6gKKrGlwMXnn5Gsg3xv8V0esRn3P9jfoNR7qMkH/u2O9mGJ8C2UXMdeAeDPJld0Xk5DxFYtHFrx2Q== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-sns" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-cloudwatch@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.55.0.tgz#3e58110d008b9dc0c0cd8a8973b4f0b1ca385fc3" + integrity sha512-WxJyDnrYHH7ox/1gWe4v+TfFR6LC7Q/bQS5jfdG1Wm3ZHzlSjOegcIw7jrkOXY5QI6N4jHM5bVwpQgX9cS8/dQ== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-codeguruprofiler@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.55.0.tgz#9e1504db79fe469dbd1678b9ed1e020f30b816c8" + integrity sha512-MeXlEPAQjhCOs7+u1Q+Stva97E/QkE37E5EgoNRWVMoel8TPlfg3/ogYlsvJzfh2/7N11Z2jsU2kPaFw0czdfw== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + +"@aws-cdk/aws-cognito@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.55.0.tgz#a8891bc6f023c88cce8c919be509751a424e7f0b" + integrity sha512-necM/Ef7HYgExaSqRh5ximMW6AbDhtj0ARZv3jLN1VTCc7VHgUp+8kkBQ7XUwJVzAhD1D1yumpq51ymyy5vREA== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/custom-resources" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-dynamodb@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.55.0.tgz#da2da006d03933385cd9aebf2404e175cc730cda" + integrity sha512-MqiTSZ2B1XFoQ28Y9GCtSPRyQGtTwxJxOiECXQZ3axnCz/3x3HFilvvBL31QsBmGkkRuiCNZ67u6+VUCn3J+LQ== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.55.0" + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/custom-resources" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-ec2@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.55.0.tgz#a6c2ab965bd75dd3f255027c11314775289e53a8" + integrity sha512-3FQ6X7BALEFMScsYUNCf+wAY4Zw6FE8V42S6i/OVZhZXY3/iZqiJh/BAJruj/VM1QO9nPRYdF5lnTwFssp17PQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-ssm" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + "@aws-cdk/region-info" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-efs@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.55.0.tgz#dfff8ceb245d2cc9f03b158c9d55b64d6a57c0cf" + integrity sha512-BGbF9vby78BNAPwyqzdsErrPgkC0ZCmhIekiTpMdlmhNFuMf6GJMOXY2rr81N7mW6HaAMe6Lqd6w+Te/G0IzHA== + dependencies: + "@aws-cdk/aws-ec2" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-events@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.55.0.tgz#3d784b0bf7ac2a2ebe6e52a9b89365d30bdd9398" + integrity sha512-jL9bygowe/6kYoAIApBcYi92zSjSxyn43CfOOILkplEsxdg3nNKfgnkQ4JgS1WwCuBNOhPAY6Zzc6bLKDi4Igw== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-iam@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.55.0.tgz#fedac6b83a9a7ee48e4cda6d877f684f1dac0056" + integrity sha512-cAKQN1sEdDXZ2xFOOoWQskDh/GuQS81m6Qd/o6KQeFli8ftXSlD5dq5+UIs+oHBwhE8xwYJLbHDx79L3lQcMug== + dependencies: + "@aws-cdk/core" "1.55.0" + "@aws-cdk/region-info" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-kms@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.55.0.tgz#eaaa9b2ea9b7f65d3bdcab8109104477b2ff2baf" + integrity sha512-GSNKEn2w5QwKF+vwlz0N9TPnRh/p/tOFHb+AuNmNq4y2f3c3rTmW/anJu+ISE5qIVzTnev6bLQ+y7Iidt8aXKQ== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-lambda@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.55.0.tgz#751c89a64797bc4ae1ea0801fb39083752455ff9" + integrity sha512-/5df6QR3vbJr/G5/HFmxG/QvxPIjSdzSgaXjK7a/7tzxRISWPaYLN4sVZQHVDYHPe+WZ291uulYE+juiyGrvqQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-codeguruprofiler" "1.55.0" + "@aws-cdk/aws-ec2" "1.55.0" + "@aws-cdk/aws-efs" "1.55.0" + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/aws-s3-assets" "1.55.0" + "@aws-cdk/aws-sqs" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-logs@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.55.0.tgz#267aa66bff737e47be5dc3d326ea936cf73c62e6" + integrity sha512-sUflJ+MuB69MwHhtWZUY8jf2JLxXXbmGzs/T3VHnscULAsQoo6Tu5v/kXvtXU04CC8YxUG6+hQkO6bl3bF6M1Q== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-route53@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.55.0.tgz#b6de1cb4ece3897e506ded8caefad6c14c53a033" + integrity sha512-HI0UJLa73iLUv+mnZjOPQmcfhESvqNoUCPN3PwEBAwGECVk/gKBomNV7g/dYNE1MfRHdi/4nIM3T7yC6Br+zNw== + dependencies: + "@aws-cdk/aws-ec2" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-s3-assets@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.55.0.tgz#7243ee94f767d6686b6b9c0caaf9af3aa38a656d" + integrity sha512-zyYFRw1xFmuONiuj9ym9HsnYyAeE2a1L1q2/vpvlXARLIsk7JDG37nnnh40ccm2/YQAoVLXqKZb+VTS5cUKhgA== + dependencies: + "@aws-cdk/assets" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-s3" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-s3@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.55.0.tgz#41a0f134608fa068d0ea2b451a5ec039da4ca372" + integrity sha512-VNBTw+ADXcNuIi+ziGpEiGN0kxE/32MGUK6esePMxRr+zv9JqE4q0YwiSSjp0FWnM1g3mufkergXfNcGCCPMrw== + dependencies: + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-sns@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.55.0.tgz#e3a6ef9b7235e39dba8a3f172da31d63e0d961b1" + integrity sha512-WR2ogCi6ngMsZAxq1O71WTxYz1GC9oSxK/K1sj7lboDW712OJXgaz5Giat073TYosyuiZD0uUvSPRvBfxbfEIg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-events" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/aws-sqs" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-sqs@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.55.0.tgz#b70e100e941aad369557ae6ed991a40972b4e20b" + integrity sha512-CpXi33lBg8PgMJvxwRpPOQmD+DLUaUHxRpjjjLP6tfUDwk5cIGwRG+QSTd4FmNcDm3Cvb1x0WI8PSdwfgaOSiw== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/aws-ssm@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.55.0.tgz#5b51cc6875956829df499b3c9ed34b41e47c63ce" + integrity sha512-lTJj0rDZS5qVapV4WI/yfm3B235hJtMgDHMRMoOAZTNQSgHFvp2/5l1gSKOfqlanS90aeLUIfEXWlXALnwveLg== + dependencies: + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-kms" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/cloud-assembly-schema@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" + integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/core@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" + integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/custom-resources@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.55.0.tgz#af33b6dc28a9431d60cd6e7774a166919a7622be" + integrity sha512-AKc9y8RYAU4J2b6rB902jq66vwOzshsgNYl5dTS8cFxdCjR4YthuaAyatxXMBJz4SepL+X6kwjxF1ed6/DFFFQ== + dependencies: + "@aws-cdk/aws-cloudformation" "1.55.0" + "@aws-cdk/aws-iam" "1.55.0" + "@aws-cdk/aws-lambda" "1.55.0" + "@aws-cdk/aws-logs" "1.55.0" + "@aws-cdk/aws-sns" "1.55.0" + "@aws-cdk/core" "1.55.0" + constructs "^3.0.2" + +"@aws-cdk/cx-api@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" + integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + semver "^7.2.2" + +"@aws-cdk/region-info@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" + integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== + +"@serverless-stack/resources@../../../resources": + version "0.0.9" + dependencies: + "@aws-cdk/core" "1.55.0" + +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== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +constructs@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" + integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" + integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +semver@^7.2.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/test/helpers/setup-tests.js b/packages/cli/test/helpers/setup-tests.js index 02a47d95f0..a6e7e9a7ae 100644 --- a/packages/cli/test/helpers/setup-tests.js +++ b/packages/cli/test/helpers/setup-tests.js @@ -10,12 +10,6 @@ execSync("yarn run prepare", { TIMEOUT, }); -// Prepare CLI -execSync("yarn run prepare", { - cwd: root, - TIMEOUT, -}); - /* The default timeout is 5000ms on async tests. Because we npm install and remove directories, tests can take time to run. diff --git a/packages/cli/test/jest-ts/yarn.lock b/packages/cli/test/jest-ts/yarn.lock index 3da859d530..99afd6cc94 100644 --- a/packages/cli/test/jest-ts/yarn.lock +++ b/packages/cli/test/jest-ts/yarn.lock @@ -1404,25 +1404,34 @@ yargs "^15.3.1" "@serverless-stack/cli@../../../cli": - version "0.0.8" + version "0.0.9" dependencies: "@babel/cli" "^7.10.5" "@babel/core" "^7.10.5" "@babel/plugin-proposal-class-properties" "^7.10.4" "@babel/preset-env" "^7.10.4" "@serverless-stack/aws-cdk" "1.55.0-rc.1" + "@serverless-stack/resources" "^0.0.9" "@types/jest" "^26.0.7" "@types/node" "^14.0.27" chalk "^4.1.0" core-js "^3.6.5" cross-spawn "^7.0.3" jest "^26.1.0" + source-map-support "^0.5.19" ts-jest "^26.1.4" typescript "^3.9.7" yargs "^15.4.1" "@serverless-stack/resources@../../../resources": - version "0.0.8" + version "0.0.9" + dependencies: + "@aws-cdk/core" "1.55.0" + +"@serverless-stack/resources@^0.0.9": + version "0.0.9" + resolved "https://registry.yarnpkg.com/@serverless-stack/resources/-/resources-0.0.9.tgz#83c2fddc8766ff0844355262a5754e80309779bb" + integrity sha512-xierhv0SwVVzxbVtq8dCNKpIDkUU9A6SKxcZKp4PPuA4ec2G320RNpbnQpyuLsH2QrDLpXkFt9GeK1qi6Kbj3w== dependencies: "@aws-cdk/core" "1.55.0" diff --git a/packages/cli/webpack.config.js b/packages/cli/webpack.config.js deleted file mode 100644 index 2b1fc2ba54..0000000000 --- a/packages/cli/webpack.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const path = require("path"); - -module.exports = { - target: "node", - mode: "development", - stats: "errors-only", - devtool: "inline-source-map", - entry: "./scripts/wrapper/include.js", - output: { - filename: "include.js", - libraryTarget: "commonjs2", - path: path.resolve("./scripts/wrapper", "dist"), - }, -}; diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 94406541ed..0d108e4a32 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -62,7 +62,9 @@ export class App extends cdk.App { child instanceof cdk.Stack && child.stackName.indexOf(`${this.stage}-`) !== 0 ) { - throw `Stack ${child.stackName} is not prefixed with the stage`; + throw new Error( + `Stack ${child.stackName} is not prefixed with the stage` + ); } } return super.synth(options); diff --git a/packages/resources/src/Stack.ts b/packages/resources/src/Stack.ts index 68feb51b18..6e1d4dce45 100644 --- a/packages/resources/src/Stack.ts +++ b/packages/resources/src/Stack.ts @@ -22,7 +22,7 @@ export class Stack extends cdk.Stack { // eslint-disable-next-line @typescript-eslint/no-explicit-any private static checkForEnvInProps(props?: any) { if (props && props.env) { - throw "Cannot specify environment for a specific Stack"; + throw new Error("Cannot specify environment for a specific Stack"); } } } diff --git a/yarn.lock b/yarn.lock index e972a5629c..6bf5853a28 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2130,7 +2130,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@^26.0.7": +"@types/jest@26.x", "@types/jest@^26.0.7": version "26.0.9" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.9.tgz#0543b57da5f0cd949c5f423a00c56c492289c989" integrity sha512-k4qFfJ5AUKrWok5KYXp2EPm89b0P/KZpl7Vg4XuOTVVQEhLDBDBU3iBFrjjdgd8fLw96aAtmnwhXHl63bWeBQQ== @@ -2250,161 +2250,6 @@ dependencies: eslint-visitor-keys "^1.1.0" -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== - dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== - -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== - -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== - -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== - dependencies: - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== - -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== - dependencies: - "@webassemblyjs/ast" "1.9.0" - -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== - -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== - -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - "@zkochan/cmd-shim@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" @@ -2450,11 +2295,6 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^6.4.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" - integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== - acorn@^7.1.1, acorn@^7.3.1: version "7.4.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" @@ -2489,17 +2329,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3: +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3: version "6.12.3" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== @@ -2574,7 +2404,7 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.3, anymatch@~3.1.1: +anymatch@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== @@ -2688,25 +2518,11 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= -arrify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - asap@^2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -2719,14 +2535,6 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -2778,9 +2586,9 @@ atob@^2.1.2: integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== aws-sdk@^2.715.0: - version "2.729.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.729.0.tgz#3d850f7825b94b5d8b2aca58ec096973bc4c7e34" - integrity sha512-x5q/+9wM37tBYCmYNGMj+aU9qeXqhbUH0Dz3wlSpAW55+N4NwlBbpqhyCV3oF9bePEJtEnxLGWNXpb9BNWNhew== + version "2.730.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.730.0.tgz#5b2775bb0c3cd7764031a17a9bcac3f1aafc385e" + integrity sha512-hYHplsbgUDP0XuaVJaHx2L/nC0E1i+4dGlkAQpkJz3qQ4NDfLnrbUFsA2g3AyWAsrnjrBNCkexPvwnV82Qng1g== dependencies: buffer "4.9.2" events "1.1.1" @@ -2904,21 +2712,11 @@ before-after-hook@^2.0.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== -binary-extensions@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" - integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== - bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -2940,16 +2738,6 @@ bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: - version "4.11.9" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" - integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== - -bn.js@^5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0" - integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA== - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2974,84 +2762,18 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.1: 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" -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - browser-process-hrtime@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - browserslist@^4.12.0, browserslist@^4.8.5: version "4.14.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.0.tgz#2908951abfe4ec98737b72f34c3bcedc8d43b000" @@ -3091,12 +2813,7 @@ buffer-from@1.x, buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@4.9.2, buffer@^4.3.0: +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== @@ -3113,11 +2830,6 @@ buffer@^5.1.0, buffer@^5.5.0: base64-js "^1.0.2" ieee754 "^1.1.4" -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - builtins@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" @@ -3138,7 +2850,7 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: +cacache@^12.0.0, cacache@^12.0.3: version "12.0.4" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== @@ -3250,9 +2962,9 @@ camelcase@^6.0.0: integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== caniuse-lite@^1.0.30001111: - version "1.0.30001112" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001112.tgz#0fffc3b934ff56ff0548c37bc9dad7d882bcf672" - integrity sha512-J05RTQlqsatidif/38aN3PGULCLrg8OYQOlJUKbeYVzC2mGZkZLIztwRlB3MtrfLmawUmjFlNJvy/uhwniIe1Q== + version "1.0.30001113" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001113.tgz#22016ab55b5a8b04fa00ca342d9ee1b98df48065" + integrity sha512-qMvjHiKH21zzM/VDZr6oosO6Ri3U0V2tC015jRXjOecwQCJtsU5zklTNTk31jQbIOP8gha0h1ccM/g0ECP+4BA== capture-exit@^2.0.0: version "2.0.0" @@ -3337,46 +3049,16 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.4.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" - integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.4.0" - optionalDependencies: - fsevents "~2.1.2" - chownr@^1.1.1, chownr@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== -chrome-trace-event@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" - integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== - dependencies: - tslib "^1.9.0" - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -3525,11 +3207,6 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.20.0: - 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.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" @@ -3540,11 +3217,6 @@ commander@^5.1.0: resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - compare-func@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" @@ -3606,21 +3278,11 @@ config-chain@^1.1.11: ini "^1.3.4" proto-list "~1.2.1" -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - constructs@^3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" @@ -3787,38 +3449,7 @@ crc@^3.4.4: dependencies: buffer "^5.1.0" -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -3843,23 +3474,6 @@ crypt@0.0.2: resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - cssom@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" @@ -4063,19 +3677,6 @@ deprecation@^2.0.0, deprecation@^2.3.1: resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= - detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" @@ -4109,15 +3710,6 @@ diff@^4.0.2: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - difflib@~0.2.1: version "0.2.4" resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" @@ -4139,11 +3731,6 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - domexception@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" @@ -4196,22 +3783,9 @@ ecc-jsbn@~0.1.1: safer-buffer "^2.1.0" electron-to-chromium@^1.3.523: - version "1.3.526" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.526.tgz#0e004899edf75afc172cce1b8189aac5dca646aa" - integrity sha512-HiroW5ZbGwgT8kCnoEO8qnGjoTPzJxduvV/Vv/wH63eo2N6Zj3xT5fmmaSPAPUM05iN9/5fIEkIg3owTtV6QZg== - -elliptic@^6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" - integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" + version "1.3.529" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.529.tgz#a7eed559bc848a7c8d95026be7d8929e3f9af169" + integrity sha512-n3sriLldqNyjBlosbnPftjCY+m1dVOY307I1Y0HaHAqDGe3hRvK7ksJwWd+qs599ybR4jobCo1+7zXM9GyNMSA== emittery@^0.7.1: version "0.7.1" @@ -4228,11 +3802,6 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - encoding@^0.1.11: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -4247,15 +3816,6 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" - integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - enquirer@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" @@ -4278,13 +3838,6 @@ err-code@^1.0.0: resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= -errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== - dependencies: - prr "~1.0.1" - error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -4362,14 +3915,6 @@ escodegen@1.x.x, escodegen@^1.14.1: optionalDependencies: source-map "~0.6.1" -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - eslint-scope@^5.0.0, eslint-scope@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" @@ -4490,19 +4035,6 @@ events@1.1.1: resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= -events@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" - integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - exec-sh@^0.3.2: version "0.3.4" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" @@ -4554,13 +4086,6 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= - dependencies: - homedir-polyfill "^1.0.1" - expect@^26.3.0: version "26.3.0" resolved "https://registry.yarnpkg.com/expect/-/expect-26.3.0.tgz#6145b4999a2c9bd64a644360d0c781c44d369c54" @@ -4708,15 +4233,6 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -4754,16 +4270,6 @@ find-versions@^3.2.0: dependencies: semver-regex "^2.0.0" -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -4879,7 +4385,7 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@^2.1.2, fsevents@~2.1.2: +fsevents@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== @@ -5057,7 +4563,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0, glob-parent@~5.1.0: +glob-parent@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== @@ -5081,42 +4587,6 @@ glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -5241,44 +4711,11 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - "heap@>= 0.2.0": version "0.2.6" resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: version "2.8.8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" @@ -5329,11 +4766,6 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - https-proxy-agent@^2.2.3: version "2.2.4" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" @@ -5486,17 +4918,7 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, i resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@^1.3.2, ini@^1.3.4, ini@^1.3.5: +ini@^1.3.2, ini@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -5534,11 +4956,6 @@ inquirer@^6.2.0: strip-ansi "^5.1.0" through "^2.3.6" -interpret@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -5582,13 +4999,6 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -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-buffer@^1.1.5, is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -5704,7 +5114,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -5808,16 +5218,11 @@ is-utf8@^0.2.0: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2: +is-windows@^1.0.0, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" @@ -6357,7 +5762,7 @@ json-diff@^0.5.4: difflib "~0.2.1" dreamopt "~0.6.0" -json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: +json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== @@ -6389,13 +5794,6 @@ json5@2.x, json5@^2.1.2: dependencies: minimist "^1.2.5" -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@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -6547,9 +5945,9 @@ lint-staged@^10.2.11: stringify-object "^3.3.0" listr2@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-2.5.0.tgz#87d40dae3f0c6676be8995ef2e4449fb3979f408" - integrity sha512-C7GqFmf+C7LglqYJU1feOBw46hvCRO1Ja58TmKZtXP+JyyHE2m1+ZhoBfliIGeUuiT9PuPU1OJ9kbky93+Qziw== + version "2.5.1" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-2.5.1.tgz#f265dddf916c8a9b475437b34ae85a7d8f495c7a" + integrity sha512-qkNRW70SwfwWLD/eiaTf2tfgWT/ZvjmMsnEFJOCzac0cjcc8rYHDBr1eQhRxopj6lZO7Oa5sS/pZzS6q+BsX+w== dependencies: chalk "^4.1.0" cli-truncate "^2.1.0" @@ -6592,20 +5990,6 @@ load-json-file@^5.3.0: strip-bom "^3.0.0" type-fest "^0.3.0" -loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== - -loader-utils@^1.2.3, loader-utils@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -6765,7 +6149,7 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" -make-dir@^2.0.0, make-dir@^2.1.0: +make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== @@ -6836,15 +6220,6 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - md5@^2.2.1: version "2.3.0" resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" @@ -6854,22 +6229,6 @@ md5@^2.2.1: crypt "0.0.2" is-buffer "~1.1.6" -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - meow@^3.3.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" @@ -6902,17 +6261,15 @@ meow@^4.0.0: trim-newlines "^2.0.0" meow@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/meow/-/meow-7.0.1.tgz#1ed4a0a50b3844b451369c48362eb0515f04c1dc" - integrity sha512-tBKIQqVrAHqwit0vfuFPY3LlzJYkEOFyKa3bPgxzNl6q/RtN8KQ+ALYEASYuFayzSAsjlhXj/JZ10rH85Q6TUw== + version "7.1.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-7.1.0.tgz#50ecbcdafa16f8b58fb7eb9675b933f6473b3a59" + integrity sha512-kq5F0KVteskZ3JdfyQFivJEj2RaA8NFsS4+r9DaMKLcUHpk5OcHS3Q0XkCXONB1mZRPsu/Y/qImKri0nwSEZog== dependencies: "@types/minimist" "^1.2.0" - arrify "^2.0.1" - camelcase "^6.0.0" camelcase-keys "^6.2.2" decamelize-keys "^1.1.0" hard-rejection "^2.1.0" - minimist-options "^4.0.2" + minimist-options "4.1.0" normalize-package-data "^2.5.0" read-pkg-up "^7.0.1" redent "^3.0.0" @@ -6930,7 +6287,7 @@ merge2@^1.2.3: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: +micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -6957,14 +6314,6 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.0.5" -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - mime-db@1.44.0: version "1.44.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" @@ -6992,16 +6341,6 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - minimatch@>=3.0, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -7009,15 +6348,7 @@ minimatch@>=3.0, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist-options@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - -minimist-options@^4.0.2: +minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== @@ -7026,6 +6357,14 @@ minimist-options@^4.0.2: is-plain-obj "^1.1.0" kind-of "^6.0.3" +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -7082,7 +6421,7 @@ mkdirp@*, mkdirp@1.x: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3: +mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -7172,7 +6511,7 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: +neo-async@^2.6.0: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -7223,35 +6562,6 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - node-modules-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" @@ -7299,7 +6609,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.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== @@ -7402,7 +6712,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -7513,11 +6823,6 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -7667,11 +6972,6 @@ pac-resolver@^3.0.0: netmask "^1.0.6" thunkify "^2.1.2" -pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - parallel-transform@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" @@ -7688,18 +6988,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.5" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" - integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== - dependencies: - asn1.js "^4.0.0" - browserify-aes "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - parse-github-repo-url@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" @@ -7730,11 +7018,6 @@ parse-json@^5.0.0: json-parse-better-errors "^1.0.1" lines-and-columns "^1.1.6" -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= - parse-path@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.2.tgz#ef14f0d3d77bae8dd4bc66563a4c151aac9e65aa" @@ -7763,11 +7046,6 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -7831,23 +7109,12 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pbkdf2@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" - integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: +picomatch@^2.0.4, picomatch@^2.0.5: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== @@ -7952,11 +7219,6 @@ process-nextick-args@~2.0.0: 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@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -8034,28 +7296,11 @@ proxy-from-env@^1.0.0: resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - psl@^1.1.28: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - pump@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" @@ -8086,11 +7331,6 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -8106,11 +7346,6 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" @@ -8126,21 +7361,6 @@ quick-lru@^4.0.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - raw-body@^2.2.0: version "2.4.1" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" @@ -8244,7 +7464,7 @@ read@1, read@^1.0.4, read@~1.0.1: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@^2.3.7, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@^2.3.7, 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== @@ -8295,13 +7515,6 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" - integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== - dependencies: - picomatch "^2.2.1" - redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -8475,14 +7688,6 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -8557,14 +7762,6 @@ rimraf@^3.0.0: dependencies: glob "^7.1.3" -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" @@ -8589,7 +7786,7 @@ rxjs@^6.4.0, rxjs@^6.6.2: dependencies: tslib "^1.9.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, 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== @@ -8643,15 +7840,6 @@ saxes@^5.0.0: dependencies: xmlchars "^2.2.0" -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - semver-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" @@ -8682,13 +7870,6 @@ semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -serialize-javascript@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" - integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== - dependencies: - randombytes "^2.1.0" - set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -8704,24 +7885,11 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - setprototypeof@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - shallow-clone@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" @@ -8868,11 +8036,6 @@ sort-keys@^2.0.0: dependencies: is-plain-obj "^1.0.0" -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -8884,7 +8047,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.19, source-map-support@^0.5.6, source-map-support@~0.5.12: +source-map-support@^0.5.19, source-map-support@^0.5.6: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -9011,14 +8174,6 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" @@ -9027,17 +8182,6 @@ stream-each@^1.1.0: end-of-stream "^1.1.0" stream-shift "^1.0.0" -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" @@ -9107,7 +8251,7 @@ string.prototype.trimstart@^1.0.1: define-properties "^1.1.3" es-abstract "^1.17.5" -string_decoder@^1.0.0, string_decoder@^1.1.1: +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== @@ -9230,13 +8374,6 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -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.0.0, supports-color@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" @@ -9267,11 +8404,6 @@ table@^5.2.3, table@^5.4.6: slice-ansi "^2.1.0" string-width "^3.0.0" -tapable@^1.0.0, tapable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - tar-stream@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.3.tgz#1e2022559221b7866161660f118255e20fa79e41" @@ -9321,30 +8453,6 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@^1.4.3: - version "1.4.4" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz#2c63544347324baafa9a56baaddf1634c8abfc2f" - integrity sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^3.1.0" - source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -terser@^4.1.2: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -9409,13 +8517,6 @@ thunkify@^2.1.2: resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" integrity sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0= -timers-browserify@^2.0.4: - version "2.0.11" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" - integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== - dependencies: - setimmediate "^1.0.4" - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -9428,11 +8529,6 @@ tmpl@1.0.x: resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -9527,10 +8623,11 @@ trim-off-newlines@^1.0.0: integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= ts-jest@^26.1.4: - version "26.1.4" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.1.4.tgz#87d41a96016a8efe4b8cc14501d3785459af6fa6" - integrity sha512-Nd7diUX6NZWfWq6FYyvcIPR/c7GbEF75fH1R6coOp3fbNzbRJBZZAn0ueVS0r8r9ral1VcrpneAFAwB3TsVS1Q== + version "26.2.0" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.2.0.tgz#7ec22faceb05ee1467fdb5265d1b33c27441f163" + integrity sha512-9+y2qwzXdAImgLSYLXAb/Rhq9+K4rbt0417b8ai987V60g2uoNWBBmMkYgutI7D8Zhu+IbCSHbBtrHxB9d7xyA== dependencies: + "@types/jest" "26.x" bs-logger "0.x" buffer-from "1.x" fast-json-stable-stringify "2.x" @@ -9554,11 +8651,6 @@ tsutils@^3.17.1: dependencies: tslib "^1.8.1" -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -9754,14 +8846,6 @@ url@0.10.3: punycode "1.3.2" querystring "0.2.0" -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -9779,20 +8863,6 @@ util-promisify@^2.1.0: dependencies: object.getownpropertydescriptors "^2.0.3" -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - uuid@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" @@ -9808,7 +8878,7 @@ uuid@^8.2.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== -v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: +v8-compile-cache@^2.0.3: version "2.1.1" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== @@ -9846,11 +8916,6 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" @@ -9872,24 +8937,6 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" -watchpack-chokidar2@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" - integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" - integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== - dependencies: - graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.0" - wcwidth@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" @@ -9912,60 +8959,6 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -webpack-cli@^3.3.12: - version "3.3.12" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" - integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== - dependencies: - chalk "^2.4.2" - cross-spawn "^6.0.5" - enhanced-resolve "^4.1.1" - findup-sync "^3.0.0" - global-modules "^2.0.0" - import-local "^2.0.0" - interpret "^1.4.0" - loader-utils "^1.4.0" - supports-color "^6.1.0" - v8-compile-cache "^2.1.1" - yargs "^13.3.2" - -webpack-sources@^1.4.0, webpack-sources@^1.4.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@^4.44.0: - version "4.44.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.1.tgz#17e69fff9f321b8f117d1fda714edfc0b939cc21" - integrity sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.4.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" - chrome-trace-event "^1.0.2" - enhanced-resolve "^4.3.0" - eslint-scope "^4.0.3" - json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.3" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.7.4" - webpack-sources "^1.4.1" - whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" @@ -10006,7 +8999,7 @@ which-pm-runs@^1.0.0: resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= -which@^1.2.14, which@^1.2.9, which@^1.3.1: +which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -10028,9 +9021,9 @@ wide-align@^1.1.0: string-width "^1.0.2 || 2" windows-release@^3.1.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.1.tgz#cb4e80385f8550f709727287bf71035e209c4ace" - integrity sha512-Pngk/RDCaI/DkuHPlGTdIkDiTAnAkyMjoQMZqRsxydNl1qGXNIoZrB7RK8g53F2tEgQBMqQJHQdYZuQEEAu54A== + version "3.3.3" + resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999" + integrity sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg== dependencies: execa "^1.0.0" @@ -10044,13 +9037,6 @@ wordwrap@>=0.0.2, wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== - dependencies: - errno "~0.1.7" - wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" @@ -10174,7 +9160,7 @@ xregexp@2.0.0: resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= -xtend@^4.0.0, xtend@~4.0.1: +xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -10202,14 +9188,6 @@ yargs-parser@18.x, yargs-parser@^18.1.2, yargs-parser@^18.1.3: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^15.0.1: version "15.0.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" @@ -10218,22 +9196,6 @@ yargs-parser@^15.0.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@^13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - yargs@^14.2.2: version "14.2.3" resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" From 176f46851959f7001afaf50bffb83d4a30fa9716 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 11 Aug 2020 14:06:45 -0400 Subject: [PATCH 035/481] Fixing paths in transpile step --- packages/cli/package.json | 1 + packages/cli/scripts/config/cdkHelpers.js | 63 +++++++++++++++-------- packages/cli/scripts/wrapper/run.js | 1 - 3 files changed, 43 insertions(+), 22 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index 1e0a356e2e..421f4482bc 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -44,6 +44,7 @@ "chalk": "^4.1.0", "core-js": "^3.6.5", "cross-spawn": "^7.0.3", + "fs-extra": "^9.0.1", "jest": "^26.1.0", "source-map-support": "^0.5.19", "ts-jest": "^26.1.4", diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index a84f0e965a..47173e2531 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -1,7 +1,7 @@ "use strict"; -const fs = require("fs"); const path = require("path"); +const fs = require("fs-extra"); const spawn = require("cross-spawn"); const paths = require("./paths"); @@ -10,34 +10,54 @@ const DEFAULT_NAME = ""; const DEFAULT_STAGE = "dev"; const DEFAULT_REGION = "us-east-1"; +function getCmdPath(cmd) { + const appPath = path.join(paths.appNodeModules, ".bin", cmd); + const ownPath = path.join(paths.ownNodeModules, ".bin", cmd); + + return fs.existsSync(appPath) + ? appPath + : // Fallback to own node modules, in case of tests that don't install the cli + ownPath; +} + +function createBuildPath() { + fs.emptyDirSync(paths.appBuildPath); +} + function transpile() { + let cmd; + let args; + let opts = { stdio: "inherit" }; + const tsconfigPath = path.join(paths.appPath, "tsconfig.json"); + if (fs.existsSync(tsconfigPath)) { - spawn.sync( - path.join(paths.ownNodeModules, ".bin/tsc"), - ["--outDir", paths.appBuildPath, "--rootDir", paths.appLibPath], - { stdio: "inherit", cwd: paths.appPath } - ); + cmd = getCmdPath("tsc"); + args = ["--outDir", paths.appBuildPath, "--rootDir", paths.appLibPath]; + opts = { stdio: "inherit", cwd: paths.appPath }; } else { - spawn.sync( - path.join(paths.ownNodeModules, ".bin/babel"), - [ - "--config-file", - path.join(paths.ownPath, "scripts/config/.babelrc.json"), - "--source-maps", - "inline", - paths.appLibPath, - "--out-dir", - paths.appBuildPath, - ], - { stdio: "inherit" } - ); + cmd = getCmdPath("babel"); + args = [ + "--config-file", + path.join(paths.ownPath, "scripts", "config", ".babelrc.json"), + "--source-maps", + "inline", + paths.appLibPath, + "--out-dir", + paths.appBuildPath, + ]; + } + + const results = spawn.sync(cmd, args, opts); + + if (results.error) { + throw results.error; } } function copyWrapperFiles() { fs.copyFileSync( - path.join(paths.ownScriptsPath, "wrapper/run.js"), + path.join(paths.ownScriptsPath, "wrapper", "run.js"), path.join(paths.appBuildPath, "run.js") ); } @@ -45,7 +65,7 @@ function copyWrapperFiles() { function copyCdkConfig() { // Copy cdk.json fs.copyFileSync( - path.join(paths.ownScriptsPath, "wrapper/cdk.json"), + path.join(paths.ownScriptsPath, "wrapper", "cdk.json"), path.join(paths.appBuildPath, "cdk.json") ); // Copy cdk.context.json @@ -75,6 +95,7 @@ function applyConfig(argv) { } function prepareCdk(argv) { + createBuildPath(); transpile(); copyWrapperFiles(); copyCdkConfig(); diff --git a/packages/cli/scripts/wrapper/run.js b/packages/cli/scripts/wrapper/run.js index 7335431774..a7891675a8 100644 --- a/packages/cli/scripts/wrapper/run.js +++ b/packages/cli/scripts/wrapper/run.js @@ -7,7 +7,6 @@ require("source-map-support").install(); const sst = require("@serverless-stack/resources"); const config = require("./sst-merged.json"); -//const App = require("./include"); const main = require("./"); main.default( From 6eb9c40d4b5039eb6844f3511f54e6991e80420a Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 11 Aug 2020 14:07:23 -0400 Subject: [PATCH 036/481] v0.0.10 --- lerna.json | 2 +- packages/cli/package.json | 7 +++---- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/lerna.json b/lerna.json index 10068137b3..0fbe25d919 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.9" + "version": "0.0.10" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 421f4482bc..6419eadc7e 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.0.9", + "version": "0.0.10", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "test": "jest --no-watchman" @@ -38,7 +38,7 @@ "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", "@serverless-stack/aws-cdk": "1.55.0-rc.1", - "@serverless-stack/resources": "^0.0.9", + "@serverless-stack/resources": "^0.0.10", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "chalk": "^4.1.0", @@ -50,6 +50,5 @@ "ts-jest": "^26.1.4", "typescript": "^3.9.7", "yargs": "^15.4.1" - }, - "devDependencies": {} + } } diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index e2646df28c..dcd4470560 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.0.9", + "version": "0.0.10", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 86d3b46f36..c6c81b1a6e 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.9", + "version": "0.0.10", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 20b0d18124b8dcdd47fd194638bb39a770993604 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 13 Aug 2020 16:07:36 -0400 Subject: [PATCH 037/481] Adding error handling and fixing error messages --- packages/cli/bin/scripts.js | 44 ++++++++++-- packages/cli/scripts/build.js | 21 +++--- packages/cli/scripts/config/cdkHelpers.js | 70 +++++++++++++++++-- packages/cli/scripts/deploy.js | 21 +++--- packages/cli/scripts/remove.js | 10 ++- packages/cli/scripts/util/errors.js | 7 ++ packages/cli/scripts/util/logger.js | 24 +++++++ packages/cli/scripts/wrapper/run.js | 31 +++++++- packages/cli/test/base-ts/tsconfig.json | 21 ++++-- .../handler-function-not-found.test.js | 18 +++++ .../handler-function-not-found/lib/index.js | 0 .../handler-function-not-found/package.json | 13 ++++ .../test/handler-function-not-found/sst.json | 5 ++ .../test/handler-function-not-found/yarn.lock | 4 ++ .../handler-not-found.test.js | 18 +++++ .../cli/test/handler-not-found/lib/dummy.js | 0 .../cli/test/handler-not-found/package.json | 13 ++++ packages/cli/test/handler-not-found/sst.json | 5 ++ packages/cli/test/handler-not-found/yarn.lock | 4 ++ .../cli/test/helpers/run-build-command.js | 18 +++-- packages/cli/test/jest-ts/yarn.lock | 15 ++-- packages/resources/src/App.ts | 6 +- packages/resources/src/Stack.ts | 14 +++- 23 files changed, 327 insertions(+), 55 deletions(-) create mode 100644 packages/cli/scripts/util/errors.js create mode 100644 packages/cli/scripts/util/logger.js create mode 100644 packages/cli/test/handler-function-not-found/handler-function-not-found.test.js create mode 100644 packages/cli/test/handler-function-not-found/lib/index.js create mode 100644 packages/cli/test/handler-function-not-found/package.json create mode 100644 packages/cli/test/handler-function-not-found/sst.json create mode 100644 packages/cli/test/handler-function-not-found/yarn.lock create mode 100644 packages/cli/test/handler-not-found/handler-not-found.test.js create mode 100644 packages/cli/test/handler-not-found/lib/dummy.js create mode 100644 packages/cli/test/handler-not-found/package.json create mode 100644 packages/cli/test/handler-not-found/sst.json create mode 100644 packages/cli/test/handler-not-found/yarn.lock diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index b806627162..68af087a4f 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -2,15 +2,19 @@ "use strict"; -require("source-map-support").install(); - -// Makes the script crash on unhandled rejections instead of silently -// ignoring them. In the future, promise rejections that are not handled will -// terminate the Node.js process with a non-zero exit code. +process.on("uncaughtException", (err) => { + // Format any uncaught exceptions + console.error("\n" + (err.stack || err) + "\n"); + process.exit(1); +}); process.on("unhandledRejection", (err) => { throw err; }); +require("source-map-support").install(); + +const fs = require("fs"); +const path = require("path"); const yargs = require("yargs"); const chalk = require("chalk"); const spawn = require("cross-spawn"); @@ -39,6 +43,15 @@ const scriptIndex = args.findIndex((x) => x === "test"); const script = scriptIndex === -1 ? args[0] : args[scriptIndex]; const nodeArgs = scriptIndex > 0 ? args.slice(0, scriptIndex) : []; +function getCliInfo() { + const usingYarn = fs.existsSync(path.join(paths.appPath, "yarn.lock")); + + return { + yarn: usingYarn, + npm: !usingYarn, + }; +} + function addOptions(currentCmd) { return function (yargs) { yargs @@ -62,6 +75,17 @@ const argv = yargs .usage(`${cmd.s} `) .demandCommand(1) + .option("no-color", { + default: false, + type: "boolean", + desc: "Remove colors and other style from console output", + }) + .option("verbose", { + default: false, + type: "boolean", + desc: "Show debug info in logs", + }) + .command( cmd.build, "Build your app and prepare to deploy", @@ -110,6 +134,14 @@ const argv = yargs }) .parse(); +if (!process.stdout.isTTY) { + chalk.level = 0; +} + +if (argv.verbose) { + process.env.DEBUG = true; +} + switch (script) { case cmd.build: case cmd.deploy: @@ -119,7 +151,7 @@ switch (script) { process.chdir(paths.appBuildPath); - Promise.resolve(internals[script](argv, config)); + Promise.resolve(internals[script](argv, config, getCliInfo())); break; } case cmd.cdk: diff --git a/packages/cli/scripts/build.js b/packages/cli/scripts/build.js index 1505c58f3d..ff295ebe89 100644 --- a/packages/cli/scripts/build.js +++ b/packages/cli/scripts/build.js @@ -1,26 +1,31 @@ "use strict"; -const { sstSynth } = require("@serverless-stack/aws-cdk"); +const chalk = require("chalk"); -const { cacheCdkContext } = require("./config/cdkHelpers"); +const logger = require("./util/logger"); +const { synth, cacheCdkContext } = require("./config/cdkHelpers"); -function printResults(results) { +function printResults(results, usingYarn) { const stacks = results.stacks; const l = stacks.length; const stacksCopy = l === 1 ? "stack" : "stacks"; + const deployCmd = usingYarn ? "yarn sst deploy" : "npm sst deploy"; - console.log(`Successfully compiled ${l} ${stacksCopy}:`); + logger.log(`\nSuccessfully compiled ${l} ${stacksCopy}:`); for (var i = 0; i < l; i++) { const stack = stacks[i]; - console.log(` - ${stack.id}`); + logger.log(` - ${chalk.cyan(stack.id)}`); } + + logger.log(`\nRun ${chalk.cyan(deployCmd)} to deploy your ${stacksCopy}.`); } -module.exports = async function () { - const results = await sstSynth(); +module.exports = async function (argv, config, cliInfo) { + logger.log(chalk.grey("Synthesizing CDK")); - printResults(results); + const results = await synth(); + printResults(results, cliInfo.yarn); // Cache cdk.context.json cacheCdkContext(); diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index 47173e2531..21da63fb70 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -2,9 +2,13 @@ const path = require("path"); const fs = require("fs-extra"); +const chalk = require("chalk"); const spawn = require("cross-spawn"); +const cdk = require("@serverless-stack/aws-cdk"); const paths = require("./paths"); +const logger = require("../util/logger"); +const { isSubProcessError } = require("../util/errors"); const DEFAULT_NAME = ""; const DEFAULT_STAGE = "dev"; @@ -14,10 +18,8 @@ function getCmdPath(cmd) { const appPath = path.join(paths.appNodeModules, ".bin", cmd); const ownPath = path.join(paths.ownNodeModules, ".bin", cmd); - return fs.existsSync(appPath) - ? appPath - : // Fallback to own node modules, in case of tests that don't install the cli - ownPath; + // Fallback to own node modules, in case of tests that don't install the cli + return fs.existsSync(appPath) ? appPath : ownPath; } function createBuildPath() { @@ -30,14 +32,21 @@ function transpile() { let opts = { stdio: "inherit" }; const tsconfigPath = path.join(paths.appPath, "tsconfig.json"); + const isTs = fs.existsSync(tsconfigPath); + + if (isTs) { + logger.log(chalk.grey("Detected tsconfig.json")); + logger.log(chalk.grey("Compiling TypeScript")); - if (fs.existsSync(tsconfigPath)) { cmd = getCmdPath("tsc"); args = ["--outDir", paths.appBuildPath, "--rootDir", paths.appLibPath]; opts = { stdio: "inherit", cwd: paths.appPath }; } else { + logger.log(chalk.grey("Compiling with Babel")); + cmd = getCmdPath("babel"); args = [ + "--quiet", "--config-file", path.join(paths.ownPath, "scripts", "config", ".babelrc.json"), "--source-maps", @@ -52,6 +61,15 @@ function transpile() { if (results.error) { throw results.error; + } else if (results.status !== 0) { + if (!isTs) { + // Add an empty line for Babel errors to make it more clear + console.log(""); + } + logger.error( + isTs ? "TypeScript compilation error" : "Babel compilation error" + ); + process.exit(1); } } @@ -103,13 +121,55 @@ function prepareCdk(argv) { } function cacheCdkContext() { + logger.debug("Caching bootstrapped environment in context"); + const contextPath = path.join(paths.appBuildPath, "cdk.context.json"); if (fs.existsSync(contextPath)) { fs.copyFileSync(contextPath, path.join(paths.appPath, "cdk.context.json")); } } +async function synth() { + let results; + + try { + results = await cdk.sstSynth(); + } catch (e) { + if (isSubProcessError(e)) { + logger.error("There was an error synthesizing your app."); + process.exit(1); + } + } + + return results; +} + +async function deploy(stack) { + try { + await cdk.sstDeploy(stack); + } catch (e) { + if (isSubProcessError(e)) { + logger.error("There was an error synthesizing your app."); + process.exit(1); + } + } +} + +async function destroy(stack) { + try { + await cdk.sstDestroy(stack); + } catch (e) { + if (isSubProcessError(e)) { + logger.error("There was an error synthesizing your app."); + process.exit(1); + } + } +} + module.exports = { + synth, + deploy, + destroy, prepareCdk, cacheCdkContext, }; diff --git a/packages/cli/scripts/deploy.js b/packages/cli/scripts/deploy.js index bd90255186..d9b77751ab 100644 --- a/packages/cli/scripts/deploy.js +++ b/packages/cli/scripts/deploy.js @@ -2,14 +2,12 @@ const fs = require("fs"); const path = require("path"); -const { - sstEnv, - sstDeploy, - sstBootstrap, -} = require("@serverless-stack/aws-cdk"); +const chalk = require("chalk"); +const { sstEnv, sstBootstrap } = require("@serverless-stack/aws-cdk"); +const logger = require("./util/logger"); const paths = require("./config/paths"); -const { cacheCdkContext } = require("./config/cdkHelpers"); +const { deploy, cacheCdkContext } = require("./config/cdkHelpers"); function envObjectToString(envObj) { return `aws://${envObj.account}/${envObj.region}`; @@ -35,10 +33,14 @@ function cacheBootstrap(env) { } async function checkAndRunBootstrap(config) { + logger.log(chalk.grey("Loading environment")); + const envResults = await sstEnv(); if (!envResults.environment.account) { - throw "AWS profile could not be detected. Please make sure you have it configured locally."; + throw new Error( + "AWS profile could not be detected. Please make sure you have it configured locally." + ); } // Apply region from config @@ -51,7 +53,7 @@ async function checkAndRunBootstrap(config) { return; } - console.log("New environment detected..."); + logger.log(chalk.grey("New environment detected")); const bsCall = await sstBootstrap(); // Cache Bootstrap results @@ -61,7 +63,8 @@ async function checkAndRunBootstrap(config) { module.exports = async function (argv, config) { await checkAndRunBootstrap(config); - sstDeploy(argv.stack); + logger.log(chalk.grey("Deploying " + (argv.stack ? argv.stack : "stacks"))); + await deploy(argv.stack); // Cache cdk.context.json cacheCdkContext(); diff --git a/packages/cli/scripts/remove.js b/packages/cli/scripts/remove.js index 56360dfce2..7817c0e898 100644 --- a/packages/cli/scripts/remove.js +++ b/packages/cli/scripts/remove.js @@ -1,7 +1,11 @@ "use strict"; -const { sstDestroy } = require("@serverless-stack/aws-cdk"); +const chalk = require("chalk"); -module.exports = function (argv) { - sstDestroy(argv.stack); +const logger = require("./util/logger"); +const { destroy } = require("./config/cdkHelpers"); + +module.exports = async function (argv) { + logger.log(chalk.grey("Removing " + (argv.stack ? argv.stack : "stacks"))); + await destroy(argv.stack); }; diff --git a/packages/cli/scripts/util/errors.js b/packages/cli/scripts/util/errors.js new file mode 100644 index 0000000000..7d85ae0b63 --- /dev/null +++ b/packages/cli/scripts/util/errors.js @@ -0,0 +1,7 @@ +function isSubProcessError(e) { + return e.message === "Subprocess exited with error 1"; +} + +module.exports = { + isSubProcessError, +}; diff --git a/packages/cli/scripts/util/logger.js b/packages/cli/scripts/util/logger.js new file mode 100644 index 0000000000..675fe6577b --- /dev/null +++ b/packages/cli/scripts/util/logger.js @@ -0,0 +1,24 @@ +const chalk = require("chalk"); + +function debug(message) { + if (!process.env.DEBUG) { + return; + } + console.debug(chalk.grey("debug ") + message); +} +function log(message) { + console.log(message); +} +function warn(message) { + console.warn(chalk.yellow("warn ") + message); +} +function error(message) { + console.error(chalk.red("error ") + message); +} + +module.exports = { + log, + warn, + debug, + error, +}; diff --git a/packages/cli/scripts/wrapper/run.js b/packages/cli/scripts/wrapper/run.js index a7891675a8..296fa9227e 100644 --- a/packages/cli/scripts/wrapper/run.js +++ b/packages/cli/scripts/wrapper/run.js @@ -4,12 +4,39 @@ require("source-map-support").install(); +process.on("uncaughtException", function (err) { + console.error("\n" + (err.stack || err) + "\n"); + process.exit(1); +}); + +const fs = require("fs"); const sst = require("@serverless-stack/resources"); const config = require("./sst-merged.json"); -const main = require("./"); -main.default( +let handler; + +function handlerNotFound(importFailed) { + const extCopy = fs.existsSync("../tsconfig.json") ? "ts" : "js"; + console.error( + importFailed + ? `\nCannot find app handler. Make sure to add a "lib/index.${extCopy}" file.\n` + : `\nCannot find app handler. Make sure "lib/index.${extCopy}" has a default export.\n` + ); + process.exit(1); +} + +try { + handler = require("./"); +} catch (e) { + handlerNotFound(true); +} + +if (!handler.default) { + handlerNotFound(false); +} + +handler.default( new sst.App({ name: config.name, stage: config.stage, diff --git a/packages/cli/test/base-ts/tsconfig.json b/packages/cli/test/base-ts/tsconfig.json index 9e25e67454..7d659db8a8 100644 --- a/packages/cli/test/base-ts/tsconfig.json +++ b/packages/cli/test/base-ts/tsconfig.json @@ -1,14 +1,23 @@ { "compilerOptions": { - "target": "ES2015", + "target": "ES2018", "module": "commonjs", - "strict": true, + "lib": ["es2018"], "declaration": true, - "skipLibCheck": true, - "inlineSources": true, + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "noImplicitThis": true, + "alwaysStrict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": false, "inlineSourceMap": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true + "inlineSources": true, + "experimentalDecorators": true, + "strictPropertyInitialization": false, + "typeRoots": ["./node_modules/@types"] }, "include": ["lib"] } diff --git a/packages/cli/test/handler-function-not-found/handler-function-not-found.test.js b/packages/cli/test/handler-function-not-found/handler-function-not-found.test.js new file mode 100644 index 0000000000..f33c35da7a --- /dev/null +++ b/packages/cli/test/handler-function-not-found/handler-function-not-found.test.js @@ -0,0 +1,18 @@ +const { runBuildCommand, clearBuildOutput } = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("handler-function-not-found", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).toMatch(/Cannot find app handler/); +}); diff --git a/packages/cli/test/handler-function-not-found/lib/index.js b/packages/cli/test/handler-function-not-found/lib/index.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json new file mode 100644 index 0000000000..f5f365e74c --- /dev/null +++ b/packages/cli/test/handler-function-not-found/package.json @@ -0,0 +1,13 @@ +{ + "name": "handler-function-not-found", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "../../bin/scripts.js build" + }, + "keywords": [], + "author": "", + "dependencies": {}, + "license": "ISC" +} diff --git a/packages/cli/test/handler-function-not-found/sst.json b/packages/cli/test/handler-function-not-found/sst.json new file mode 100644 index 0000000000..dc2fd52942 --- /dev/null +++ b/packages/cli/test/handler-function-not-found/sst.json @@ -0,0 +1,5 @@ +{ + "name": "notes", + "stage": "prod", + "region": "us-west-1" +} diff --git a/packages/cli/test/handler-function-not-found/yarn.lock b/packages/cli/test/handler-function-not-found/yarn.lock new file mode 100644 index 0000000000..fb57ccd13a --- /dev/null +++ b/packages/cli/test/handler-function-not-found/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + diff --git a/packages/cli/test/handler-not-found/handler-not-found.test.js b/packages/cli/test/handler-not-found/handler-not-found.test.js new file mode 100644 index 0000000000..a90a131e4d --- /dev/null +++ b/packages/cli/test/handler-not-found/handler-not-found.test.js @@ -0,0 +1,18 @@ +const { runBuildCommand, clearBuildOutput } = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("handler-not-found", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).toMatch(/Cannot find app handler/); +}); diff --git a/packages/cli/test/handler-not-found/lib/dummy.js b/packages/cli/test/handler-not-found/lib/dummy.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json new file mode 100644 index 0000000000..b6b1131632 --- /dev/null +++ b/packages/cli/test/handler-not-found/package.json @@ -0,0 +1,13 @@ +{ + "name": "handler-not-found", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "../../bin/scripts.js build" + }, + "keywords": [], + "author": "", + "dependencies": {}, + "license": "ISC" +} diff --git a/packages/cli/test/handler-not-found/sst.json b/packages/cli/test/handler-not-found/sst.json new file mode 100644 index 0000000000..dc2fd52942 --- /dev/null +++ b/packages/cli/test/handler-not-found/sst.json @@ -0,0 +1,5 @@ +{ + "name": "notes", + "stage": "prod", + "region": "us-west-1" +} diff --git a/packages/cli/test/handler-not-found/yarn.lock b/packages/cli/test/handler-not-found/yarn.lock new file mode 100644 index 0000000000..fb57ccd13a --- /dev/null +++ b/packages/cli/test/handler-not-found/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + diff --git a/packages/cli/test/helpers/run-build-command.js b/packages/cli/test/helpers/run-build-command.js index 6ef3917b35..e1a1b380cd 100644 --- a/packages/cli/test/helpers/run-build-command.js +++ b/packages/cli/test/helpers/run-build-command.js @@ -10,12 +10,20 @@ async function runBuildCommand(cwd, stack) { await yarnInstall(cwd); - const { stdout, stderr } = await execPromise(`yarn run build${stack}`, { - cwd, - TIMEOUT, - }); + let result, error; - return stdout.toString("utf8") + stderr.toString("utf8"); + try { + result = await execPromise(`yarn run build${stack}`, { + cwd, + TIMEOUT, + }); + } catch (e) { + error = e.toString(); + } + + return error + ? error + : result.stdout.toString("utf8") + result.stderr.toString("utf8"); } module.exports = runBuildCommand; diff --git a/packages/cli/test/jest-ts/yarn.lock b/packages/cli/test/jest-ts/yarn.lock index 99afd6cc94..369c4b3703 100644 --- a/packages/cli/test/jest-ts/yarn.lock +++ b/packages/cli/test/jest-ts/yarn.lock @@ -1404,19 +1404,20 @@ yargs "^15.3.1" "@serverless-stack/cli@../../../cli": - version "0.0.9" + version "0.0.10" dependencies: "@babel/cli" "^7.10.5" "@babel/core" "^7.10.5" "@babel/plugin-proposal-class-properties" "^7.10.4" "@babel/preset-env" "^7.10.4" "@serverless-stack/aws-cdk" "1.55.0-rc.1" - "@serverless-stack/resources" "^0.0.9" + "@serverless-stack/resources" "^0.0.10" "@types/jest" "^26.0.7" "@types/node" "^14.0.27" chalk "^4.1.0" core-js "^3.6.5" cross-spawn "^7.0.3" + fs-extra "^9.0.1" jest "^26.1.0" source-map-support "^0.5.19" ts-jest "^26.1.4" @@ -1424,14 +1425,14 @@ yargs "^15.4.1" "@serverless-stack/resources@../../../resources": - version "0.0.9" + version "0.0.10" dependencies: "@aws-cdk/core" "1.55.0" -"@serverless-stack/resources@^0.0.9": - version "0.0.9" - resolved "https://registry.yarnpkg.com/@serverless-stack/resources/-/resources-0.0.9.tgz#83c2fddc8766ff0844355262a5754e80309779bb" - integrity sha512-xierhv0SwVVzxbVtq8dCNKpIDkUU9A6SKxcZKp4PPuA4ec2G320RNpbnQpyuLsH2QrDLpXkFt9GeK1qi6Kbj3w== +"@serverless-stack/resources@^0.0.10": + version "0.0.10" + resolved "https://registry.yarnpkg.com/@serverless-stack/resources/-/resources-0.0.10.tgz#825b7bb2533b46778ec18909bc319ee426736701" + integrity sha512-vvjYxqiAFNVmrwfF7Q7jsgdJlwTjh/SI1DAJgJluBIw7DIxr9o5/kAxRUlZRwoRb3iO/i+GLptL2fXwyaP5gPA== dependencies: "@aws-cdk/core" "1.55.0" diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 0d108e4a32..3982c87e34 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -27,6 +27,8 @@ export interface DeployProps { readonly region?: string; } +export type AppProps = cdk.AppProps; + export class App extends cdk.App { /** * The app name @@ -43,7 +45,7 @@ export class App extends cdk.App { */ public readonly region: string; - constructor(deployProps: DeployProps = {}, props: cdk.AppProps = {}) { + constructor(deployProps: DeployProps = {}, props: AppProps = {}) { super(props); this.name = deployProps.name || ""; @@ -63,7 +65,7 @@ export class App extends cdk.App { child.stackName.indexOf(`${this.stage}-`) !== 0 ) { throw new Error( - `Stack ${child.stackName} is not prefixed with the stage` + `Stack ${child.stackName} is not prefixed with the stage. Use sst.Stack or the format {stageName}-${child.stackName}.` ); } } diff --git a/packages/resources/src/Stack.ts b/packages/resources/src/Stack.ts index 6e1d4dce45..2c9f306725 100644 --- a/packages/resources/src/Stack.ts +++ b/packages/resources/src/Stack.ts @@ -1,7 +1,7 @@ import * as cdk from "@aws-cdk/core"; import { App } from "./App"; -export type StackProps = Omit; +export type StackProps = cdk.StackProps; export class Stack extends cdk.Stack { constructor(scope: App, id: string, props?: StackProps) { @@ -22,7 +22,17 @@ export class Stack extends cdk.Stack { // eslint-disable-next-line @typescript-eslint/no-explicit-any private static checkForEnvInProps(props?: any) { if (props && props.env) { - throw new Error("Cannot specify environment for a specific Stack"); + let envS = ""; + + try { + envS = " (" + JSON.stringify(props.env) + ")"; + } catch (e) { + // Ignore + } + + throw new Error( + `Do not directly set the environment for a stack${envS}. Use the "AWS_PROFILE" environment variable and "--region" option instead.` + ); } } } From 7725e4dc854d8272395c3721874bd4fdeed8facc Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 13 Aug 2020 17:34:11 -0400 Subject: [PATCH 038/481] Adding more test cases --- .../cli/test/stack-no-prefix/lib/index.js | 11 ++ .../cli/test/stack-no-prefix/package.json | 16 +++ .../stack-no-prefix/stack-no-prefix.test.js | 18 +++ packages/cli/test/stack-no-prefix/yarn.lock | 109 ++++++++++++++++++ packages/cli/test/stack-set-env/lib/index.js | 13 +++ packages/cli/test/stack-set-env/package.json | 15 +++ .../test/stack-set-env/stack-set-env.test.js | 18 +++ packages/cli/test/stack-set-env/yarn.lock | 109 ++++++++++++++++++ packages/resources/src/App.ts | 2 +- 9 files changed, 310 insertions(+), 1 deletion(-) create mode 100644 packages/cli/test/stack-no-prefix/lib/index.js create mode 100644 packages/cli/test/stack-no-prefix/package.json create mode 100644 packages/cli/test/stack-no-prefix/stack-no-prefix.test.js create mode 100644 packages/cli/test/stack-no-prefix/yarn.lock create mode 100644 packages/cli/test/stack-set-env/lib/index.js create mode 100644 packages/cli/test/stack-set-env/package.json create mode 100644 packages/cli/test/stack-set-env/stack-set-env.test.js create mode 100644 packages/cli/test/stack-set-env/yarn.lock diff --git a/packages/cli/test/stack-no-prefix/lib/index.js b/packages/cli/test/stack-no-prefix/lib/index.js new file mode 100644 index 0000000000..2e6c9fbfa6 --- /dev/null +++ b/packages/cli/test/stack-no-prefix/lib/index.js @@ -0,0 +1,11 @@ +import * as cdk from "@aws-cdk/core"; + +class MySampleStack extends cdk.Stack { + constructor(scope, id, props) { + super(scope, id, props); + } +} + +export default function main(app) { + new MySampleStack(app, "sample"); +} diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json new file mode 100644 index 0000000000..649e2560e4 --- /dev/null +++ b/packages/cli/test/stack-no-prefix/package.json @@ -0,0 +1,16 @@ +{ + "name": "stack-no-prefix", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "../../bin/scripts.js build" + }, + "keywords": [], + "author": "", + "dependencies": { + "@serverless-stack/resources": "../../../resources", + "@aws-cdk/core": "1.55.0" + }, + "license": "ISC" +} diff --git a/packages/cli/test/stack-no-prefix/stack-no-prefix.test.js b/packages/cli/test/stack-no-prefix/stack-no-prefix.test.js new file mode 100644 index 0000000000..854e957899 --- /dev/null +++ b/packages/cli/test/stack-no-prefix/stack-no-prefix.test.js @@ -0,0 +1,18 @@ +const { runBuildCommand, clearBuildOutput } = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("stack-no-prefix", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).toMatch(/Stack \(sample\) is not prefixed with the stage/); +}); diff --git a/packages/cli/test/stack-no-prefix/yarn.lock b/packages/cli/test/stack-no-prefix/yarn.lock new file mode 100644 index 0000000000..1027e73245 --- /dev/null +++ b/packages/cli/test/stack-no-prefix/yarn.lock @@ -0,0 +1,109 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aws-cdk/cloud-assembly-schema@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" + integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/core@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" + integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/cx-api@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" + integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + semver "^7.2.2" + +"@serverless-stack/resources@../../../resources": + version "0.0.10" + dependencies: + "@aws-cdk/core" "1.55.0" + +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== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +constructs@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" + integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" + integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +semver@^7.2.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/test/stack-set-env/lib/index.js b/packages/cli/test/stack-set-env/lib/index.js new file mode 100644 index 0000000000..dee69fe4e5 --- /dev/null +++ b/packages/cli/test/stack-set-env/lib/index.js @@ -0,0 +1,13 @@ +import * as sst from "@serverless-stack/resources"; + +class MySampleStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + } +} + +export default function main(app) { + new MySampleStack(app, "sample", { + env: { account: "dummy", region: "us-east-1" }, + }); +} diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json new file mode 100644 index 0000000000..8a1feaa7ab --- /dev/null +++ b/packages/cli/test/stack-set-env/package.json @@ -0,0 +1,15 @@ +{ + "name": "stack-set-env", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "../../bin/scripts.js build" + }, + "keywords": [], + "author": "", + "dependencies": { + "@serverless-stack/resources": "../../../resources" + }, + "license": "ISC" +} diff --git a/packages/cli/test/stack-set-env/stack-set-env.test.js b/packages/cli/test/stack-set-env/stack-set-env.test.js new file mode 100644 index 0000000000..6b8d5aef74 --- /dev/null +++ b/packages/cli/test/stack-set-env/stack-set-env.test.js @@ -0,0 +1,18 @@ +const { runBuildCommand, clearBuildOutput } = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("stack-set-env", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).toMatch(/Do not directly set the environment for a stack/); +}); diff --git a/packages/cli/test/stack-set-env/yarn.lock b/packages/cli/test/stack-set-env/yarn.lock new file mode 100644 index 0000000000..1027e73245 --- /dev/null +++ b/packages/cli/test/stack-set-env/yarn.lock @@ -0,0 +1,109 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aws-cdk/cloud-assembly-schema@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" + integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/core@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" + integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/cx-api@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" + integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + semver "^7.2.2" + +"@serverless-stack/resources@../../../resources": + version "0.0.10" + dependencies: + "@aws-cdk/core" "1.55.0" + +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== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +constructs@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" + integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" + integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +semver@^7.2.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 3982c87e34..0b190f98c7 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -65,7 +65,7 @@ export class App extends cdk.App { child.stackName.indexOf(`${this.stage}-`) !== 0 ) { throw new Error( - `Stack ${child.stackName} is not prefixed with the stage. Use sst.Stack or the format {stageName}-${child.stackName}.` + `Stack (${child.stackName}) is not prefixed with the stage. Use sst.Stack or the format {stageName}-${child.stackName}.` ); } } From 653f77b423892a2fe2929a1f0413849004cbbe09 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 14 Aug 2020 15:54:37 -0400 Subject: [PATCH 039/481] Adding debug messages to create serverless stack --- packages/cli/bin/scripts.js | 6 +- packages/cli/scripts/build.js | 10 +- packages/create-serverless-stack/bin/index.js | 278 +++++++++++------- .../javascript/package.template.json | 1 + .../typescript/package.template.json | 1 + 5 files changed, 186 insertions(+), 110 deletions(-) diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index 68af087a4f..cfa685d8f7 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -88,17 +88,17 @@ const argv = yargs .command( cmd.build, - "Build your app and prepare to deploy", + "Build your app and synthesize your stacks", addOptions(cmd.build) ) .command( `${cmd.deploy} [stack]`, - "Deploy your app to AWS", + "Deploy all your stacks to AWS", addOptions(cmd.deploy) ) .command( `${cmd.remove} [stack]`, - "Remove your app and all its resources", + "Remove all your stacks and all of their resources from AWS", addOptions(cmd.remove) ) diff --git a/packages/cli/scripts/build.js b/packages/cli/scripts/build.js index ff295ebe89..454231f7a7 100644 --- a/packages/cli/scripts/build.js +++ b/packages/cli/scripts/build.js @@ -11,14 +11,18 @@ function printResults(results, usingYarn) { const stacksCopy = l === 1 ? "stack" : "stacks"; const deployCmd = usingYarn ? "yarn sst deploy" : "npm sst deploy"; - logger.log(`\nSuccessfully compiled ${l} ${stacksCopy}:`); + logger.log( + `\nSuccessfully compiled ${l} ${stacksCopy} to ${chalk.cyan( + "build/cdk.out" + )}\n` + ); for (var i = 0; i < l; i++) { const stack = stacks[i]; - logger.log(` - ${chalk.cyan(stack.id)}`); + logger.log(` ${chalk.cyan(stack.id)}`); } - logger.log(`\nRun ${chalk.cyan(deployCmd)} to deploy your ${stacksCopy}.`); + logger.log(`\nRun ${chalk.cyan(deployCmd)} to deploy to AWS.`); } module.exports = async function (argv, config, cliInfo) { diff --git a/packages/create-serverless-stack/bin/index.js b/packages/create-serverless-stack/bin/index.js index 0ce7e2e2a9..f9391a757a 100755 --- a/packages/create-serverless-stack/bin/index.js +++ b/packages/create-serverless-stack/bin/index.js @@ -2,9 +2,11 @@ "use strict"; -// Makes the script crash on unhandled rejections instead of silently -// ignoring them. In the future, promise rejections that are not handled will -// terminate the Node.js process with a non-zero exit code. +process.on("uncaughtException", (err) => { + // Format any uncaught exceptions + console.error("\n" + (err.stack || err) + "\n"); + process.exit(1); +}); process.on("unhandledRejection", (err) => { throw err; }); @@ -25,13 +27,157 @@ const cmd = { r: "resources", }; -function shouldUseYarn() { +const templateTypeCopy = { + resources: "Resources", +}; +const languageTypeCopy = { + javascript: "JavaScript", + typescript: "TypeScript", +}; + +const argv = yargs + .usage(`${cmd.i} `) + .demandCommand(1) + + .command( + `${cmd.r} [name]`, + "Initialize a template for the resources in your Serverless Stack", + function (yargs) { + yargs.positional("name", { + type: "string", + default: "my-serverless-resources", + describe: "The name of your Serverless Stack app", + }); + } + ) + + .option("use-yarn", { + type: "boolean", + default: false, + describe: "Use Yarn instead of npm", + }) + .option("language", { + type: "string", + default: "javascript", + choices: ["javascript", "typescript"], + describe: "The language of the template", + }) + + .version() + .alias("version", "v") + .help("help") + .alias("help", "h") + .epilogue("For more information, visit www.serverless-stack.com") + + .strictCommands(true) + .wrap(yargs.terminalWidth()) + + .fail((msg, err) => { + if (err) throw err; + + error(msg + "\n"); + + yargs.showHelp(); + + process.exit(1); + }) + .parse(); + +let cdkVersion; + +const appName = argv.name; +const templateType = argv._[0]; +const templateLanguage = argv.language; +const useYarn = argv.useYarn; + +const appPath = path.join(paths.parentPath, appName); +const templatePath = path.join( + paths.ownTemplatesPath, + templateType, + templateLanguage +); + +(async function () { + const templateCopy = templateTypeCopy[templateType]; + const languageCopy = languageTypeCopy[templateLanguage]; + + info( + `Initializing a new Serverless Stack ${templateCopy} ${languageCopy} project` + ); + try { - execSync("yarnpkg --version", { stdio: "ignore" }); - return true; + cdkVersion = await getLatestCdkVersion(); } catch (e) { - return false; + error("There was a problem connecting to the npm registry."); + process.exit(1); } + + info(`Creating ${appName}/ directory`); + + // Create app directory + if (!fs.existsSync(appPath)) { + fs.mkdirSync(appPath); + } else { + error(`A directory called ${appName} already exists.`); + process.exit(1); + } + + info("Adding project files"); + + // Copy template files to app directory + copyFiles(templatePath, appPath); + + info("Installing packages"); + + // Install dependencies + let cmd; + let args; + if (useYarn) { + cmd = "yarn"; + args = []; + } else { + cmd = "npm"; + args = ["install"]; + } + + const results = spawn.sync(cmd, args, { + stdio: "inherit", + cwd: appPath, + }); + + if (results.error) { + throw results.error; + } else if (results.status !== 0) { + error("There was a problem installing the packages"); + process.exit(1); + } + + printSuccess(); +})(); + +function getUserCmd(action) { + return useYarn ? `yarn run ${action}` : `npm run ${action}`; +} + +/* eslint-disable no-unused-vars */ +function debug(message) { + if (!process.env.DEBUG) { + return; + } + console.debug(chalk.grey("debug ") + message); +} + +function info(message) { + console.log(chalk.grey(message)); +} + +/* eslint-disable no-unused-vars */ +function warn(message) { + console.warn(chalk.yellow("warn ") + message); +} + +function error(message) { + console.error(chalk.red("error ") + message); } function processString(str) { @@ -109,101 +255,25 @@ async function getLatestCdkVersion() { }); } -async function main() { - try { - cdkVersion = await getLatestCdkVersion(); - } catch (e) { - console.log( - chalk.red("There was a problem connecting to the npm registry.") - ); - process.exit(1); - } - - // Create app directory - if (!fs.existsSync(appPath)) { - fs.mkdirSync(appPath); - } else { - console.log(chalk.red(`A directory called ${appName} already exists.`)); - process.exit(1); - } - - // Copy template files to app directory - copyFiles(templatePath, appPath); - - // Install dependencies - if (useYarn) { - spawn.sync("yarn", [], { - stdio: "inherit", - cwd: appPath, - }); - } else { - spawn.sync("npm", ["install"], { - stdio: "inherit", - cwd: appPath, - }); - } +function printSuccess() { + console.log(`Success! Created ${appName} in ${appPath}`); + console.log("To get started:"); + console.log(""); + console.log(" " + chalk.cyan("cd ") + appName); + console.log(""); + console.log("And run:"); + console.log(""); + console.log(" " + chalk.cyan(getUserCmd("test"))); + console.log(" Run your tests"); + console.log(""); + console.log(" " + chalk.cyan(getUserCmd("build"))); + console.log(" Build your app and synthesize your stacks"); + console.log(""); + console.log(" " + chalk.cyan(getUserCmd("deploy"))); + console.log(" Deploy all your stacks and create your AWS resources"); + console.log(""); + console.log(" " + chalk.cyan(getUserCmd("remove"))); + console.log(" Remove all your stacks and all of their resources from AWS"); + console.log(""); + console.log("Have fun!"); } - -const argv = yargs - .usage(`${cmd.i} `) - .demandCommand(1) - - .command( - `${cmd.r} [name]`, - "Initialize a template for the resources in your Serverless Stack", - function (yargs) { - yargs.positional("name", { - type: "string", - default: "my-serverless-resources", - describe: "The name of your Serverless Stack app", - }); - } - ) - - .option("use-npm", { - type: "boolean", - default: false, - describe: "Use npm instead of Yarn", - }) - .option("language", { - type: "string", - default: "javascript", - choices: ["javascript", "typescript"], - describe: "The language of the template", - }) - - .version() - .alias("version", "v") - .help("help") - .alias("help", "h") - .epilogue("For more information, visit www.serverless-stack.com") - - .strictCommands(true) - .wrap(yargs.terminalWidth()) - - .fail((msg, err) => { - if (err) throw err; - - console.log(chalk.red(msg) + "\n"); - - yargs.showHelp(); - - process.exit(1); - }) - .parse(); - -let cdkVersion; - -const appName = argv.name; -const templateType = argv._[0]; -const templateLanguage = argv.language; -const useYarn = argv.useNpm ? false : shouldUseYarn(); - -const appPath = path.join(paths.parentPath, appName); -const templatePath = path.join( - paths.ownTemplatesPath, - templateType, - templateLanguage -); - -main(); diff --git a/packages/create-serverless-stack/templates/resources/javascript/package.template.json b/packages/create-serverless-stack/templates/resources/javascript/package.template.json index 87d87ffb34..275463fe9e 100644 --- a/packages/create-serverless-stack/templates/resources/javascript/package.template.json +++ b/packages/create-serverless-stack/templates/resources/javascript/package.template.json @@ -1,6 +1,7 @@ { "name": "%name%", "version": "0.1.0", + "private": true, "scripts": { "test": "sst test", "build": "sst build", diff --git a/packages/create-serverless-stack/templates/resources/typescript/package.template.json b/packages/create-serverless-stack/templates/resources/typescript/package.template.json index 87d87ffb34..275463fe9e 100644 --- a/packages/create-serverless-stack/templates/resources/typescript/package.template.json +++ b/packages/create-serverless-stack/templates/resources/typescript/package.template.json @@ -1,6 +1,7 @@ { "name": "%name%", "version": "0.1.0", + "private": true, "scripts": { "test": "sst test", "build": "sst build", From 74a0af94a959242a3f2e21ca39873f4e3224ec97 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 14 Aug 2020 15:55:16 -0400 Subject: [PATCH 040/481] v0.0.11 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index 0fbe25d919..a7097924d6 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.10" + "version": "0.0.11" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 6419eadc7e..2fb144be2f 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.0.10", + "version": "0.0.11", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "test": "jest --no-watchman" @@ -38,7 +38,7 @@ "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", "@serverless-stack/aws-cdk": "1.55.0-rc.1", - "@serverless-stack/resources": "^0.0.10", + "@serverless-stack/resources": "^0.0.11", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "chalk": "^4.1.0", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index dcd4470560..680237127e 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.0.10", + "version": "0.0.11", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index c6c81b1a6e..bd92b837bd 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.10", + "version": "0.0.11", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 51ea0772931835a812a6c9902a83d309f9680437 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 14 Aug 2020 20:22:16 -0400 Subject: [PATCH 041/481] Adding handling for keeping AWS CDK versions in sync --- .gitignore | 3 - packages/cli/.gitignore | 2 + packages/cli/bin/scripts.js | 6 +- packages/cli/package.json | 1 + packages/cli/scripts/build.js | 2 +- packages/cli/scripts/config/cdkHelpers.js | 77 ++++++- packages/cli/test/base-ts/package.json | 9 +- packages/cli/test/base-ts/yarn.lock | 213 +++++++++++++++++- packages/cli/test/helpers/yarn-install.js | 3 - packages/cli/test/jest-ts/yarn.lock | 14 +- packages/create-serverless-stack/.gitignore | 3 + packages/create-serverless-stack/.npmignore | 1 + packages/create-serverless-stack/bin/index.js | 51 +---- packages/create-serverless-stack/package.json | 3 + .../scripts/get-cdk-version.js | 15 ++ packages/resources/package.json | 2 +- .../scripts/aws-cdk-version-check.js | 62 +++++ 17 files changed, 395 insertions(+), 72 deletions(-) create mode 100644 packages/cli/.gitignore create mode 100644 packages/create-serverless-stack/.gitignore create mode 100644 packages/create-serverless-stack/scripts/get-cdk-version.js create mode 100644 packages/resources/scripts/aws-cdk-version-check.js diff --git a/.gitignore b/.gitignore index 6b4d819d46..67045665db 100644 --- a/.gitignore +++ b/.gitignore @@ -102,6 +102,3 @@ dist # TernJS port file .tern-port - -# Build outputs in test -/packages/cli/test/*/build/** diff --git a/packages/cli/.gitignore b/packages/cli/.gitignore new file mode 100644 index 0000000000..b805726b61 --- /dev/null +++ b/packages/cli/.gitignore @@ -0,0 +1,2 @@ +# Build outputs in test +/test/*/build/** diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index cfa685d8f7..284befd536 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -146,12 +146,14 @@ switch (script) { case cmd.build: case cmd.deploy: case cmd.remove: { + const cliInfo = getCliInfo(); + // Prepare app - const config = prepareCdk(argv); + const config = prepareCdk(argv, cliInfo); process.chdir(paths.appBuildPath); - Promise.resolve(internals[script](argv, config, getCliInfo())); + Promise.resolve(internals[script](argv, config, cliInfo)); break; } case cmd.cdk: diff --git a/packages/cli/package.json b/packages/cli/package.json index 2fb144be2f..3e8f0ba47d 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -3,6 +3,7 @@ "version": "0.0.11", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { + "jest-clear-cache": "jest --clearCache", "test": "jest --no-watchman" }, "bin": { diff --git a/packages/cli/scripts/build.js b/packages/cli/scripts/build.js index 454231f7a7..ed70107e34 100644 --- a/packages/cli/scripts/build.js +++ b/packages/cli/scripts/build.js @@ -14,7 +14,7 @@ function printResults(results, usingYarn) { logger.log( `\nSuccessfully compiled ${l} ${stacksCopy} to ${chalk.cyan( "build/cdk.out" - )}\n` + )}:\n` ); for (var i = 0; i < l; i++) { diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index 21da63fb70..bafcff191e 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -26,7 +26,76 @@ function createBuildPath() { fs.emptyDirSync(paths.appBuildPath); } -function transpile() { +function filterMismatchedVersion(deps, version) { + const mismatched = []; + + for (let dep in deps) { + if (/^@?aws-cdk/.test(dep) && deps[dep] !== version) { + mismatched.push(dep); + } + } + + return mismatched; +} + +function formatDepsForInstall(depsList, version) { + return depsList.map((dep) => `${dep}@${version}`).join(" "); +} + +/** + * Check if the user's app is using the exact version of the currently supported + * AWS CDK version that Serverless Stack is using. If not, then show an error + * message with update instructions. + * More here https://github.com/aws/aws-cdk/issues/542#issuecomment-449694450 + */ +function runCdkVersionMatch(usingYarn) { + const sstCdkVersion = require(path.join(paths.ownPath, "package.json")) + .dependencies["@serverless-stack/aws-cdk"]; + const cdkVersion = sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; + + const appPackageJson = require(path.join(paths.appPath, "package.json")); + const mismatchedDeps = filterMismatchedVersion( + appPackageJson.dependencies, + cdkVersion + ); + const mismatchedDevDeps = filterMismatchedVersion( + appPackageJson.devDependencies, + cdkVersion + ); + + if (mismatchedDeps.length === 0 && mismatchedDevDeps.length === 0) { + return; + } + + logger.log(""); + logger.error( + `Mismatched versions of AWS CDK packages. Serverless Stack currently supports ${chalk.bold( + cdkVersion + )}. Fix using:\n` + ); + + if (mismatchedDeps.length > 0) { + const depString = formatDepsForInstall(mismatchedDeps, cdkVersion); + logger.log( + usingYarn + ? ` yarn add ${depString} --exact` + : ` npm install ${depString} --save-exact` + ); + } + if (mismatchedDevDeps.length > 0) { + const depString = formatDepsForInstall(mismatchedDevDeps, cdkVersion); + logger.log( + usingYarn + ? ` yarn add ${depString} --dev --exact` + : ` npm install ${depString} --save-dev --save-exact` + ); + } + logger.log( + "\nLearn more about it here — https://github.com/aws/aws-cdk/issues/542#issuecomment-449694450\n" + ); +} + +function transpile(usingYarn) { let cmd; let args; let opts = { stdio: "inherit" }; @@ -38,6 +107,8 @@ function transpile() { logger.log(chalk.grey("Detected tsconfig.json")); logger.log(chalk.grey("Compiling TypeScript")); + runCdkVersionMatch(usingYarn); + cmd = getCmdPath("tsc"); args = ["--outDir", paths.appBuildPath, "--rootDir", paths.appLibPath]; opts = { stdio: "inherit", cwd: paths.appPath }; @@ -112,9 +183,9 @@ function applyConfig(argv) { return config; } -function prepareCdk(argv) { +function prepareCdk(argv, cliInfo) { createBuildPath(); - transpile(); + transpile(cliInfo.yarn); copyWrapperFiles(); copyCdkConfig(); return applyConfig(argv); diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index ed2acf97b2..7914d33d00 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -9,9 +9,12 @@ "keywords": [], "author": "", "dependencies": { - "@serverless-stack/resources": "../../../resources", "@aws-cdk/aws-s3": "1.55.0", - "@aws-cdk/core": "1.55.0" + "@aws-cdk/core": "1.55.0", + "@serverless-stack/resources": "../../../resources" }, - "license": "ISC" + "license": "ISC", + "devDependencies": { + "@aws-cdk/assert": "1.55.0" + } } diff --git a/packages/cli/test/base-ts/yarn.lock b/packages/cli/test/base-ts/yarn.lock index 3f030441cf..d736cea201 100644 --- a/packages/cli/test/base-ts/yarn.lock +++ b/packages/cli/test/base-ts/yarn.lock @@ -2,6 +2,17 @@ # yarn lockfile v1 +"@aws-cdk/assert@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.55.0.tgz#04114356c911afae0c26b99f6cd91823c2676e9b" + integrity sha512-f+EXzBpFPl305EnGXH3DJLY/X51cU/u4enCE9BdCq4AnyR3/eqGpKuhav3lxZ0Yu704j9wZKd2M+3Hn2PPjWvA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cloudformation-diff" "1.55.0" + "@aws-cdk/core" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + "@aws-cdk/aws-events@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.55.0.tgz#3d784b0bf7ac2a2ebe6e52a9b89365d30bdd9398" @@ -40,6 +51,13 @@ "@aws-cdk/core" "1.55.0" constructs "^3.0.2" +"@aws-cdk/cfnspec@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.55.0.tgz#6a6f78b0269ff8dae55fc2e986cca7469937e3fb" + integrity sha512-Bg4tTgtKMjBKWtyP2/V0atb3TmqshIW+j61gRigEhom1aS49QzvA6YpTjv6vzylQIH0+hdLYiCX6brBiYEXhTg== + dependencies: + md5 "^2.2.1" + "@aws-cdk/cloud-assembly-schema@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" @@ -48,6 +66,18 @@ jsonschema "^1.2.5" semver "^7.2.2" +"@aws-cdk/cloudformation-diff@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.55.0.tgz#f39fb63bd6388c2401373bf200575efe513a5045" + integrity sha512-lBFiLQXaJmf4hR+RzSXwAGun/NgANzK5p/Qm5ETgqTLVPRksJJruaFgFO/Pr0qIRpDbtxrkigoeFZxCgFkFqAQ== + dependencies: + "@aws-cdk/cfnspec" "1.55.0" + colors "^1.4.0" + diff "^4.0.2" + fast-deep-equal "^3.1.3" + string-width "^4.2.0" + table "^5.4.6" + "@aws-cdk/core@1.55.0": version "1.55.0" resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" @@ -73,10 +103,42 @@ integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== "@serverless-stack/resources@../../../resources": - version "0.0.8" + version "0.0.11" dependencies: "@aws-cdk/core" "1.55.0" +ajv@^6.10.2: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + 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" @@ -95,6 +157,28 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +charenc@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +colors@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -105,6 +189,36 @@ constructs@^3.0.2: resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== +crypt@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + +diff@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +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== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + 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-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + fs-extra@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" @@ -120,6 +234,26 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +is-buffer@~1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +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== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + jsonfile@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" @@ -134,6 +268,20 @@ jsonschema@^1.2.5: resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== +lodash@^4.17.14: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +md5@^2.2.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" + integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== + dependencies: + charenc "0.0.2" + crypt "0.0.2" + is-buffer "~1.1.6" + minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -141,12 +289,75 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +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== + semver@^7.2.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +table@^5.4.6: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + universalify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" diff --git a/packages/cli/test/helpers/yarn-install.js b/packages/cli/test/helpers/yarn-install.js index 9ae8534f6b..8d5ba6aa53 100644 --- a/packages/cli/test/helpers/yarn-install.js +++ b/packages/cli/test/helpers/yarn-install.js @@ -1,7 +1,6 @@ const { promisify } = require("util"); const { exec } = require("child_process"); const { exists } = require("fs"); -const removeNodeModules = require("./remove-node-modules"); const execPromise = promisify(exec); const existsPromise = promisify(exists); @@ -11,8 +10,6 @@ async function yarnInstall(cwd) { const hasPackageJson = await existsPromise(`${cwd}/package.json`); if (hasPackageJson) { - await removeNodeModules(cwd); - await execPromise("yarn", { cwd, TIMEOUT, diff --git a/packages/cli/test/jest-ts/yarn.lock b/packages/cli/test/jest-ts/yarn.lock index 369c4b3703..0966603060 100644 --- a/packages/cli/test/jest-ts/yarn.lock +++ b/packages/cli/test/jest-ts/yarn.lock @@ -1404,14 +1404,14 @@ yargs "^15.3.1" "@serverless-stack/cli@../../../cli": - version "0.0.10" + version "0.0.11" dependencies: "@babel/cli" "^7.10.5" "@babel/core" "^7.10.5" "@babel/plugin-proposal-class-properties" "^7.10.4" "@babel/preset-env" "^7.10.4" "@serverless-stack/aws-cdk" "1.55.0-rc.1" - "@serverless-stack/resources" "^0.0.10" + "@serverless-stack/resources" "^0.0.11" "@types/jest" "^26.0.7" "@types/node" "^14.0.27" chalk "^4.1.0" @@ -1425,14 +1425,14 @@ yargs "^15.4.1" "@serverless-stack/resources@../../../resources": - version "0.0.10" + version "0.0.11" dependencies: "@aws-cdk/core" "1.55.0" -"@serverless-stack/resources@^0.0.10": - version "0.0.10" - resolved "https://registry.yarnpkg.com/@serverless-stack/resources/-/resources-0.0.10.tgz#825b7bb2533b46778ec18909bc319ee426736701" - integrity sha512-vvjYxqiAFNVmrwfF7Q7jsgdJlwTjh/SI1DAJgJluBIw7DIxr9o5/kAxRUlZRwoRb3iO/i+GLptL2fXwyaP5gPA== +"@serverless-stack/resources@^0.0.11": + version "0.0.11" + resolved "https://registry.yarnpkg.com/@serverless-stack/resources/-/resources-0.0.11.tgz#dcd5df3dce8b819a10ff0907de888a3a98b6df65" + integrity sha512-+13xtHWhoNWYHTRQ6rWkATv1Cf+mUqe8HP9138GI8rjuEan9krPUrZhpbwdMvTiSw8bQzFJcFZUFwYWHgjiO7A== dependencies: "@aws-cdk/core" "1.55.0" diff --git a/packages/create-serverless-stack/.gitignore b/packages/create-serverless-stack/.gitignore new file mode 100644 index 0000000000..014c1cff2b --- /dev/null +++ b/packages/create-serverless-stack/.gitignore @@ -0,0 +1,3 @@ +# Version file generated during packaging +CDK_VERSION + diff --git a/packages/create-serverless-stack/.npmignore b/packages/create-serverless-stack/.npmignore index f5b2fd56b1..559f03bf30 100644 --- a/packages/create-serverless-stack/.npmignore +++ b/packages/create-serverless-stack/.npmignore @@ -1,3 +1,4 @@ +CDK_VERSION node_modules tests *.test.js diff --git a/packages/create-serverless-stack/bin/index.js b/packages/create-serverless-stack/bin/index.js index f9391a757a..df20549742 100755 --- a/packages/create-serverless-stack/bin/index.js +++ b/packages/create-serverless-stack/bin/index.js @@ -13,12 +13,10 @@ process.on("unhandledRejection", (err) => { const fs = require("fs"); const path = require("path"); -const https = require("https"); const yargs = require("yargs"); const chalk = require("chalk"); const spawn = require("cross-spawn"); const camelCase = require("camelcase"); -const execSync = require("child_process").execSync; const paths = require("../config/paths"); @@ -83,13 +81,14 @@ const argv = yargs }) .parse(); -let cdkVersion; - const appName = argv.name; const templateType = argv._[0]; const templateLanguage = argv.language; const useYarn = argv.useYarn; +const sstVersion = require("../package.json").version; +const cdkVersion = fs.readFileSync(path.join(paths.ownPath, "CDK_VERSION")); + const appPath = path.join(paths.parentPath, appName); const templatePath = path.join( paths.ownTemplatesPath, @@ -105,13 +104,6 @@ const templatePath = path.join( `Initializing a new Serverless Stack ${templateCopy} ${languageCopy} project` ); - try { - cdkVersion = await getLatestCdkVersion(); - } catch (e) { - error("There was a problem connecting to the npm registry."); - process.exit(1); - } - info(`Creating ${appName}/ directory`); // Create app directory @@ -181,7 +173,6 @@ function error(message) { } function processString(str) { - const sstVersion = require("../package.json").version; return str .replace(/%name%/g, appName) .replace(/%cdk-version%/g, cdkVersion) @@ -219,42 +210,6 @@ function copyFiles(sourceDirectory, targetDirectory) { } } -// Adopted from https://github.com/facebook/create-react-app/blob/master/packages/create-react-app/createReactApp.js -// -// We first check the registry directly via the API, and if that fails, we try -// the slower `npm view [package] version` command. -// -// This is important for users in environments where direct access to npm is -// blocked by a firewall, and packages are provided exclusively via a private -// registry. -async function getLatestCdkVersion() { - function tryNpmCmd(resolve, reject) { - try { - resolve(execSync("npm view aws-cdk version").toString().trim()); - } catch (e) { - reject(); - } - } - - return new Promise((resolve, reject) => { - https - .get("https://registry.npmjs.org/-/package/aws-cdk/dist-tags", (res) => { - if (res.statusCode === 200) { - let body = ""; - res.on("data", (data) => (body += data)); - res.on("end", () => { - resolve(JSON.parse(body).latest); - }); - } else { - tryNpmCmd(resolve, reject); - } - }) - .on("error", () => { - tryNpmCmd(resolve, reject); - }); - }); -} - function printSuccess() { console.log(`Success! Created ${appName} in ${appPath}`); console.log("To get started:"); diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 680237127e..d69b974466 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -6,6 +6,9 @@ "bin": { "create-serverless-stack": "./bin/index.js" }, + "scripts": { + "prepare": "node scripts/get-cdk-version.js" + }, "author": { "name": "Anomaly Innovations", "url": "https://anoma.ly" diff --git a/packages/create-serverless-stack/scripts/get-cdk-version.js b/packages/create-serverless-stack/scripts/get-cdk-version.js new file mode 100644 index 0000000000..719ac935b0 --- /dev/null +++ b/packages/create-serverless-stack/scripts/get-cdk-version.js @@ -0,0 +1,15 @@ +/** + * Gets the forked AWS CDK version from @serverless-stack/cli and writes to a temp file. + * Replaces the version in the template package.json. + */ + +const fs = require("fs"); +const path = require("path"); + +const sstCdkVersion = require(path.join(__dirname, "../../cli/package.json")) + .dependencies["@serverless-stack/aws-cdk"]; +const cdkVersion = sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; + +fs.writeFileSync(path.join(__dirname, "../CDK_VERSION"), cdkVersion); + +console.log(`Syncing with @serverless-stack/aws-cdk version ${cdkVersion}`); diff --git a/packages/resources/package.json b/packages/resources/package.json index bd92b837bd..7ee1a88b79 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -9,7 +9,7 @@ "watch": "tsc --watch --rootDir src --outDir dist", "build": "tsc --rootDir src --outDir dist", "clean": "rm -rf dist", - "prepare": "npm run build" + "prepare": "node scripts/aws-cdk-version-check.js && npm run build" }, "author": { "name": "Anomaly Innovations", diff --git a/packages/resources/scripts/aws-cdk-version-check.js b/packages/resources/scripts/aws-cdk-version-check.js new file mode 100644 index 0000000000..86cda091eb --- /dev/null +++ b/packages/resources/scripts/aws-cdk-version-check.js @@ -0,0 +1,62 @@ +/** + * Keep the AWS CDK version in sync with the forked version we are using in + * @serverless-stack/cli. Can cause unexpected issues if out of sync. + * More here https://github.com/aws/aws-cdk/issues/542#issuecomment-449694450 + */ + +const path = require("path"); + +function filterMismatchedVersion(deps, version) { + const mismatched = []; + + for (let dep in deps) { + if (/^@?aws-cdk/.test(dep) && deps[dep] !== version) { + mismatched.push(dep); + } + } + + return mismatched; +} + +function formatDepsForInstall(depsList, version) { + return depsList.map((dep) => `${dep}@${version}`).join(" "); +} + +const sstCdkVersion = require(path.join(__dirname, "../../cli/package.json")) + .dependencies["@serverless-stack/aws-cdk"]; +const cdkVersion = sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; + +const packageJson = require(path.join(__dirname, "../package.json")); +const mismatchedDeps = filterMismatchedVersion( + packageJson.dependencies, + cdkVersion +); +const mismatchedDevDeps = filterMismatchedVersion( + packageJson.devDependencies, + cdkVersion +); + +if (mismatchedDeps.length !== 0 || mismatchedDevDeps.length !== 0) { + console.log( + "\n❌ AWS CDK versions in @serverless-stack/resources is not in sync with @serverless-stack/cli. Fix using:\n" + ); + + if (mismatchedDeps.length > 0) { + const depString = formatDepsForInstall(mismatchedDeps, cdkVersion); + console.log(` yarn add ${depString} --exact`); + } + if (mismatchedDevDeps.length > 0) { + const depString = formatDepsForInstall(mismatchedDevDeps, cdkVersion); + console.log(` yarn add ${depString} --dev --exact`); + } + + console.log(""); + + process.exit(1); +} + +console.log( + "✅ AWS CDK versions in @serverless-stack/resources is in sync with @serverless-stack/cli" +); + +process.exit(0); From 692bcd9c7c83544e777ebcf1c8d84717a6a21e22 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 14 Aug 2020 20:23:08 -0400 Subject: [PATCH 042/481] v0.0.12 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index a7097924d6..0649726745 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.11" + "version": "0.0.12" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 3e8f0ba47d..a83d13e6b7 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.0.11", + "version": "0.0.12", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "jest-clear-cache": "jest --clearCache", @@ -39,7 +39,7 @@ "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", "@serverless-stack/aws-cdk": "1.55.0-rc.1", - "@serverless-stack/resources": "^0.0.11", + "@serverless-stack/resources": "^0.0.12", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "chalk": "^4.1.0", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index d69b974466..2b308f5227 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.0.11", + "version": "0.0.12", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 7ee1a88b79..d323bbae20 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.11", + "version": "0.0.12", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 27aad9c4b4aba34a873133c24d0761d0a4eae29f Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 14 Aug 2020 20:24:27 -0400 Subject: [PATCH 043/481] Fixing bad ignore --- packages/create-serverless-stack/.npmignore | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/create-serverless-stack/.npmignore b/packages/create-serverless-stack/.npmignore index 559f03bf30..f5b2fd56b1 100644 --- a/packages/create-serverless-stack/.npmignore +++ b/packages/create-serverless-stack/.npmignore @@ -1,4 +1,3 @@ -CDK_VERSION node_modules tests *.test.js From bf14cc9fc83fd7ff815faf60e4ade518764f981c Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 14 Aug 2020 20:24:45 -0400 Subject: [PATCH 044/481] v0.0.13 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index 0649726745..a389f9b003 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.12" + "version": "0.0.13" } diff --git a/packages/cli/package.json b/packages/cli/package.json index a83d13e6b7..e64c396bc3 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.0.12", + "version": "0.0.13", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "jest-clear-cache": "jest --clearCache", @@ -39,7 +39,7 @@ "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", "@serverless-stack/aws-cdk": "1.55.0-rc.1", - "@serverless-stack/resources": "^0.0.12", + "@serverless-stack/resources": "^0.0.13", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "chalk": "^4.1.0", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 2b308f5227..38eccc3568 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.0.12", + "version": "0.0.13", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index d323bbae20..1921bdb617 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.12", + "version": "0.0.13", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From ad9e91be22a0279c9c98ed890ab5bfa9b0170f75 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 14 Aug 2020 20:30:31 -0400 Subject: [PATCH 045/481] Adding config template --- packages/create-serverless-stack/bin/index.js | 2 +- .../templates/resources/typescript/sst.template.json | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 packages/create-serverless-stack/templates/resources/typescript/sst.template.json diff --git a/packages/create-serverless-stack/bin/index.js b/packages/create-serverless-stack/bin/index.js index df20549742..62798384ec 100755 --- a/packages/create-serverless-stack/bin/index.js +++ b/packages/create-serverless-stack/bin/index.js @@ -101,7 +101,7 @@ const templatePath = path.join( const languageCopy = languageTypeCopy[templateLanguage]; info( - `Initializing a new Serverless Stack ${templateCopy} ${languageCopy} project` + `\nInitializing a new Serverless Stack ${templateCopy} ${languageCopy} project` ); info(`Creating ${appName}/ directory`); diff --git a/packages/create-serverless-stack/templates/resources/typescript/sst.template.json b/packages/create-serverless-stack/templates/resources/typescript/sst.template.json new file mode 100644 index 0000000000..6f5cbea99a --- /dev/null +++ b/packages/create-serverless-stack/templates/resources/typescript/sst.template.json @@ -0,0 +1,6 @@ +{ + "name": "%name%", + "type": "@serverless-stack/resources", + "stage": "dev", + "region": "us-east-1" +} From d1d4b93a9b1ff4fc357439bb171109557095e639 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 14 Aug 2020 20:30:54 -0400 Subject: [PATCH 046/481] v0.0.14 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index a389f9b003..2168d17b9e 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.13" + "version": "0.0.14" } diff --git a/packages/cli/package.json b/packages/cli/package.json index e64c396bc3..ad4ea44dfd 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.0.13", + "version": "0.0.14", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "jest-clear-cache": "jest --clearCache", @@ -39,7 +39,7 @@ "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", "@serverless-stack/aws-cdk": "1.55.0-rc.1", - "@serverless-stack/resources": "^0.0.13", + "@serverless-stack/resources": "^0.0.14", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "chalk": "^4.1.0", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 38eccc3568..254323f7b3 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.0.13", + "version": "0.0.14", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 1921bdb617..bfecf7d869 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.13", + "version": "0.0.14", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From aad7d3de5b43c1d6b91c0c03d48f450d40e1ed21 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 18 Aug 2020 16:41:42 -0400 Subject: [PATCH 047/481] Fix handler errors and cdk errors handling --- packages/cli/scripts/config/cdkHelpers.js | 24 +++++++++++------------ packages/cli/scripts/wrapper/run.js | 7 ++++--- packages/cli/test/base/package.json | 1 - packages/cli/test/base/yarn.lock | 2 +- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index bafcff191e..d43c7946ee 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -200,16 +200,22 @@ function cacheCdkContext() { } } +function handleCdkErrors(e) { + if (isSubProcessError(e)) { + logger.error("There was an error synthesizing your app."); + process.exit(1); + } else { + throw e; + } +} + async function synth() { let results; try { results = await cdk.sstSynth(); } catch (e) { - if (isSubProcessError(e)) { - logger.error("There was an error synthesizing your app."); - process.exit(1); - } + handleCdkErrors(e); } return results; @@ -219,10 +225,7 @@ async function deploy(stack) { try { await cdk.sstDeploy(stack); } catch (e) { - if (isSubProcessError(e)) { - logger.error("There was an error synthesizing your app."); - process.exit(1); - } + handleCdkErrors(e); } } @@ -230,10 +233,7 @@ async function destroy(stack) { try { await cdk.sstDestroy(stack); } catch (e) { - if (isSubProcessError(e)) { - logger.error("There was an error synthesizing your app."); - process.exit(1); - } + handleCdkErrors(e); } } diff --git a/packages/cli/scripts/wrapper/run.js b/packages/cli/scripts/wrapper/run.js index 296fa9227e..b1cd7fd78c 100644 --- a/packages/cli/scripts/wrapper/run.js +++ b/packages/cli/scripts/wrapper/run.js @@ -26,12 +26,13 @@ function handlerNotFound(importFailed) { process.exit(1); } -try { - handler = require("./"); -} catch (e) { +// Check first and throw an error +if (!fs.existsSync("./index.js")) { handlerNotFound(true); } +handler = require("./"); + if (!handler.default) { handlerNotFound(false); } diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index e080adaabf..3ca89f81dd 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -15,7 +15,6 @@ "@aws-cdk/aws-cognito": "1.55.0", "@aws-cdk/aws-dynamodb": "1.55.0", "@aws-cdk/aws-iam": "1.55.0", - "@aws-cdk/aws-s3": "1.55.0", "@aws-cdk/core": "1.55.0" }, "license": "ISC" diff --git a/packages/cli/test/base/yarn.lock b/packages/cli/test/base/yarn.lock index a29fb2d7d4..925f3fd94d 100644 --- a/packages/cli/test/base/yarn.lock +++ b/packages/cli/test/base/yarn.lock @@ -299,7 +299,7 @@ integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== "@serverless-stack/resources@../../../resources": - version "0.0.9" + version "0.0.14" dependencies: "@aws-cdk/core" "1.55.0" From 24da1bf98c4cf4a786612d806af7601a01544645 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 18 Aug 2020 16:51:30 -0400 Subject: [PATCH 048/481] v0.0.15 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index 2168d17b9e..87744d94cd 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.14" + "version": "0.0.15" } diff --git a/packages/cli/package.json b/packages/cli/package.json index ad4ea44dfd..587c30a694 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.0.14", + "version": "0.0.15", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "jest-clear-cache": "jest --clearCache", @@ -39,7 +39,7 @@ "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", "@serverless-stack/aws-cdk": "1.55.0-rc.1", - "@serverless-stack/resources": "^0.0.14", + "@serverless-stack/resources": "^0.0.15", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "chalk": "^4.1.0", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 254323f7b3..e72947f070 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.0.14", + "version": "0.0.15", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index bfecf7d869..c7a658605c 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.14", + "version": "0.0.15", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 76af1f7b6f327df12fcfa4a52bcae1a8256d95a4 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 19 Aug 2020 13:18:32 -0400 Subject: [PATCH 049/481] Adding windows in tests --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cbe50a574e..b8b52e4d36 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: [ubuntu-latest, windows-latest] strategy: matrix: From 89ea2ef4d64c4ad3a29f0828120ce6bc8f585886 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 19 Aug 2020 13:22:21 -0400 Subject: [PATCH 050/481] Trying Windows again --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b8b52e4d36..51cd295f6a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,10 +12,11 @@ on: jobs: build: - runs-on: [ubuntu-latest, windows-latest] + runs-on: ubuntu-latest strategy: matrix: + os: [ubuntu-latest, windows-latest] node-version: [10.x, 12.x, 14.x] steps: From c50bf797b13a4b5b631b2bd2396c4c71054af66f Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 19 Aug 2020 13:42:00 -0400 Subject: [PATCH 051/481] Adding eslint support --- .eslintignore | 4 + package.json | 4 +- packages/cli/package.json | 5 + .../cli/scripts/config/.eslintrc.babel.js | 9 + .../scripts/config/.eslintrc.typescript.js | 6 + packages/cli/scripts/config/cdkHelpers.js | 42 +- packages/cli/scripts/test.js | 3 - packages/cli/test/base-ts/yarn.lock | 2 +- .../test/eslint-ignore-rule/.eslintrc.json | 5 + .../eslint-ignore-rule.test.js | 18 + .../cli/test/eslint-ignore-rule/lib/index.js | 6 + .../cli/test/eslint-ignore-rule/lib/stack.js | 7 + .../cli/test/eslint-ignore-rule/package.json | 15 + .../cli/test/eslint-ignore-rule/yarn.lock | 109 +++++ packages/cli/test/eslint-ignore/.eslintignore | 1 + .../test/eslint-ignore/eslint-ignore.test.js | 18 + packages/cli/test/eslint-ignore/lib/index.js | 6 + packages/cli/test/eslint-ignore/lib/stack.js | 7 + packages/cli/test/eslint-ignore/package.json | 15 + packages/cli/test/eslint-ignore/yarn.lock | 109 +++++ packages/cli/test/eslint-ts/eslint-ts.test.js | 18 + packages/cli/test/eslint-ts/lib/index.ts | 12 + packages/cli/test/eslint-ts/package.json | 15 + packages/cli/test/eslint-ts/tsconfig.json | 23 + packages/cli/test/eslint-ts/yarn.lock | 109 +++++ packages/cli/test/eslint/eslint.test.js | 18 + packages/cli/test/eslint/lib/index.js | 6 + packages/cli/test/eslint/lib/stack.js | 7 + packages/cli/test/eslint/package.json | 15 + packages/cli/test/eslint/yarn.lock | 109 +++++ .../cli/test/helpers/run-build-command.js | 2 +- yarn.lock | 419 +++++++++--------- 32 files changed, 933 insertions(+), 211 deletions(-) create mode 100644 packages/cli/scripts/config/.eslintrc.babel.js create mode 100644 packages/cli/scripts/config/.eslintrc.typescript.js create mode 100644 packages/cli/test/eslint-ignore-rule/.eslintrc.json create mode 100644 packages/cli/test/eslint-ignore-rule/eslint-ignore-rule.test.js create mode 100644 packages/cli/test/eslint-ignore-rule/lib/index.js create mode 100644 packages/cli/test/eslint-ignore-rule/lib/stack.js create mode 100644 packages/cli/test/eslint-ignore-rule/package.json create mode 100644 packages/cli/test/eslint-ignore-rule/yarn.lock create mode 100644 packages/cli/test/eslint-ignore/.eslintignore create mode 100644 packages/cli/test/eslint-ignore/eslint-ignore.test.js create mode 100644 packages/cli/test/eslint-ignore/lib/index.js create mode 100644 packages/cli/test/eslint-ignore/lib/stack.js create mode 100644 packages/cli/test/eslint-ignore/package.json create mode 100644 packages/cli/test/eslint-ignore/yarn.lock create mode 100644 packages/cli/test/eslint-ts/eslint-ts.test.js create mode 100644 packages/cli/test/eslint-ts/lib/index.ts create mode 100644 packages/cli/test/eslint-ts/package.json create mode 100644 packages/cli/test/eslint-ts/tsconfig.json create mode 100644 packages/cli/test/eslint-ts/yarn.lock create mode 100644 packages/cli/test/eslint/eslint.test.js create mode 100644 packages/cli/test/eslint/lib/index.js create mode 100644 packages/cli/test/eslint/lib/stack.js create mode 100644 packages/cli/test/eslint/package.json create mode 100644 packages/cli/test/eslint/yarn.lock diff --git a/.eslintignore b/.eslintignore index 9519ad6a6f..ba0443ac52 100644 --- a/.eslintignore +++ b/.eslintignore @@ -8,3 +8,7 @@ coverage /packages/cli/test/*/build/** # Don't lint templates /packages/create-serverless-stack/templates/** +# Don't lint eslint tests that need to fail +/packages/cli/test/eslint-ignore/** +/packages/cli/test/eslint-ts/** +/packages/cli/test/eslint/** diff --git a/package.json b/package.json index f677b936b7..70097f05bf 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ "test": "lerna run test --stream --scope=@serverless-stack/cli" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^3.8.0", - "@typescript-eslint/parser": "^3.8.0", + "@typescript-eslint/eslint-plugin": "^3.9.1", + "@typescript-eslint/parser": "^3.9.1", "eslint": "^7.6.0", "husky": "^4.2.5", "lerna": "^3.22.1", diff --git a/packages/cli/package.json b/packages/cli/package.json index 587c30a694..58ea45d09c 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -36,15 +36,20 @@ "dependencies": { "@babel/cli": "^7.10.5", "@babel/core": "^7.10.5", + "@babel/eslint-parser": "^7.11.3", + "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", "@serverless-stack/aws-cdk": "1.55.0-rc.1", "@serverless-stack/resources": "^0.0.15", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", + "@typescript-eslint/eslint-plugin": "^3.9.1", + "@typescript-eslint/parser": "^3.9.1", "chalk": "^4.1.0", "core-js": "^3.6.5", "cross-spawn": "^7.0.3", + "eslint": "^7.7.0", "fs-extra": "^9.0.1", "jest": "^26.1.0", "source-map-support": "^0.5.19", diff --git a/packages/cli/scripts/config/.eslintrc.babel.js b/packages/cli/scripts/config/.eslintrc.babel.js new file mode 100644 index 0000000000..1d674f72bd --- /dev/null +++ b/packages/cli/scripts/config/.eslintrc.babel.js @@ -0,0 +1,9 @@ +module.exports = { + parser: "@babel/eslint-parser", + parserOptions: { + babelOptions: { + configFile: "./build/.babelrc.json", + }, + }, + plugins: ["@babel"], +}; diff --git a/packages/cli/scripts/config/.eslintrc.typescript.js b/packages/cli/scripts/config/.eslintrc.typescript.js new file mode 100644 index 0000000000..fca472f38b --- /dev/null +++ b/packages/cli/scripts/config/.eslintrc.typescript.js @@ -0,0 +1,6 @@ +module.exports = { + root: true, + parser: "@typescript-eslint/parser", + plugins: ["@typescript-eslint"], + extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"], +}; diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index d43c7946ee..6d5a6eae63 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -10,6 +10,8 @@ const paths = require("./paths"); const logger = require("../util/logger"); const { isSubProcessError } = require("../util/errors"); +const isTs = fs.existsSync(path.join(paths.appPath, "tsconfig.json")); + const DEFAULT_NAME = ""; const DEFAULT_STAGE = "dev"; const DEFAULT_REGION = "us-east-1"; @@ -95,14 +97,35 @@ function runCdkVersionMatch(usingYarn) { ); } +function lint() { + const config = isTs ? ".eslintrc.typescript.js" : ".eslintrc.babel.js"; + + logger.log(chalk.grey("Linting source")); + const results = spawn.sync( + getCmdPath("eslint"), + [ + "--config", + path.join(paths.ownPath, "scripts", "config", config), + "--ext", + ".js,.ts", + "--fix", + "lib/**", + ], + { stdio: "inherit", cwd: paths.appPath } + ); + + if (results.error) { + throw results.error; + } else if (results.status !== 0) { + process.exit(1); + } +} + function transpile(usingYarn) { let cmd; let args; let opts = { stdio: "inherit" }; - const tsconfigPath = path.join(paths.appPath, "tsconfig.json"); - const isTs = fs.existsSync(tsconfigPath); - if (isTs) { logger.log(chalk.grey("Detected tsconfig.json")); logger.log(chalk.grey("Compiling TypeScript")); @@ -119,7 +142,7 @@ function transpile(usingYarn) { args = [ "--quiet", "--config-file", - path.join(paths.ownPath, "scripts", "config", ".babelrc.json"), + path.join(paths.appBuildPath, ".babelrc.json"), "--source-maps", "inline", paths.appLibPath, @@ -144,6 +167,13 @@ function transpile(usingYarn) { } } +function copyConfigFiles() { + fs.copyFileSync( + path.join(paths.ownPath, "scripts", "config", ".babelrc.json"), + path.join(paths.appBuildPath, ".babelrc.json") + ); +} + function copyWrapperFiles() { fs.copyFileSync( path.join(paths.ownScriptsPath, "wrapper", "run.js"), @@ -185,9 +215,11 @@ function applyConfig(argv) { function prepareCdk(argv, cliInfo) { createBuildPath(); - transpile(cliInfo.yarn); + copyConfigFiles(); copyWrapperFiles(); copyCdkConfig(); + lint(); + transpile(cliInfo.yarn); return applyConfig(argv); } diff --git a/packages/cli/scripts/test.js b/packages/cli/scripts/test.js index e552f05848..17f19ccea7 100644 --- a/packages/cli/scripts/test.js +++ b/packages/cli/scripts/test.js @@ -17,9 +17,6 @@ process.on("unhandledRejection", (err) => { const jest = require("jest"); let argv = process.argv.slice(2); -// Disable watchman -argv.push("--no-watchman"); - const createJestConfig = require("./config/createJestConfig"); const path = require("path"); const paths = require("./config/paths"); diff --git a/packages/cli/test/base-ts/yarn.lock b/packages/cli/test/base-ts/yarn.lock index d736cea201..97406d84bd 100644 --- a/packages/cli/test/base-ts/yarn.lock +++ b/packages/cli/test/base-ts/yarn.lock @@ -103,7 +103,7 @@ integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== "@serverless-stack/resources@../../../resources": - version "0.0.11" + version "0.0.15" dependencies: "@aws-cdk/core" "1.55.0" diff --git a/packages/cli/test/eslint-ignore-rule/.eslintrc.json b/packages/cli/test/eslint-ignore-rule/.eslintrc.json new file mode 100644 index 0000000000..a1294e008d --- /dev/null +++ b/packages/cli/test/eslint-ignore-rule/.eslintrc.json @@ -0,0 +1,5 @@ +{ + "rules": { + "no-unused-vars": "off" + } +} diff --git a/packages/cli/test/eslint-ignore-rule/eslint-ignore-rule.test.js b/packages/cli/test/eslint-ignore-rule/eslint-ignore-rule.test.js new file mode 100644 index 0000000000..bd45b1b396 --- /dev/null +++ b/packages/cli/test/eslint-ignore-rule/eslint-ignore-rule.test.js @@ -0,0 +1,18 @@ +const { runBuildCommand, clearBuildOutput } = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("eslint-ignore-rule", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).not.toMatch(/is defined but never used/); +}); diff --git a/packages/cli/test/eslint-ignore-rule/lib/index.js b/packages/cli/test/eslint-ignore-rule/lib/index.js new file mode 100644 index 0000000000..f81a5e348c --- /dev/null +++ b/packages/cli/test/eslint-ignore-rule/lib/index.js @@ -0,0 +1,6 @@ +import MySampleStack from "./stack"; + +export default function main(app) { + var a; + new MySampleStack(app, "sample"); +} diff --git a/packages/cli/test/eslint-ignore-rule/lib/stack.js b/packages/cli/test/eslint-ignore-rule/lib/stack.js new file mode 100644 index 0000000000..4db6be9d0b --- /dev/null +++ b/packages/cli/test/eslint-ignore-rule/lib/stack.js @@ -0,0 +1,7 @@ +import * as sst from "@serverless-stack/resources"; + +export default class MySampleStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + } +} diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json new file mode 100644 index 0000000000..088de2133a --- /dev/null +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -0,0 +1,15 @@ +{ + "name": "eslint-ignore-rule", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "../../bin/scripts.js build" + }, + "keywords": [], + "author": "", + "dependencies": { + "@serverless-stack/resources": "../../../resources" + }, + "license": "ISC" +} diff --git a/packages/cli/test/eslint-ignore-rule/yarn.lock b/packages/cli/test/eslint-ignore-rule/yarn.lock new file mode 100644 index 0000000000..9672d2f4b9 --- /dev/null +++ b/packages/cli/test/eslint-ignore-rule/yarn.lock @@ -0,0 +1,109 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aws-cdk/cloud-assembly-schema@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" + integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/core@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" + integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/cx-api@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" + integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + semver "^7.2.2" + +"@serverless-stack/resources@../../../resources": + version "0.0.15" + dependencies: + "@aws-cdk/core" "1.55.0" + +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== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +constructs@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" + integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" + integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +semver@^7.2.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/test/eslint-ignore/.eslintignore b/packages/cli/test/eslint-ignore/.eslintignore new file mode 100644 index 0000000000..1ef763dff4 --- /dev/null +++ b/packages/cli/test/eslint-ignore/.eslintignore @@ -0,0 +1 @@ +lib/index.js diff --git a/packages/cli/test/eslint-ignore/eslint-ignore.test.js b/packages/cli/test/eslint-ignore/eslint-ignore.test.js new file mode 100644 index 0000000000..e74f347502 --- /dev/null +++ b/packages/cli/test/eslint-ignore/eslint-ignore.test.js @@ -0,0 +1,18 @@ +const { runBuildCommand, clearBuildOutput } = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("eslint-ignore", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).not.toMatch(/is defined but never used/); +}); diff --git a/packages/cli/test/eslint-ignore/lib/index.js b/packages/cli/test/eslint-ignore/lib/index.js new file mode 100644 index 0000000000..f81a5e348c --- /dev/null +++ b/packages/cli/test/eslint-ignore/lib/index.js @@ -0,0 +1,6 @@ +import MySampleStack from "./stack"; + +export default function main(app) { + var a; + new MySampleStack(app, "sample"); +} diff --git a/packages/cli/test/eslint-ignore/lib/stack.js b/packages/cli/test/eslint-ignore/lib/stack.js new file mode 100644 index 0000000000..4db6be9d0b --- /dev/null +++ b/packages/cli/test/eslint-ignore/lib/stack.js @@ -0,0 +1,7 @@ +import * as sst from "@serverless-stack/resources"; + +export default class MySampleStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + } +} diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json new file mode 100644 index 0000000000..1a528a22a4 --- /dev/null +++ b/packages/cli/test/eslint-ignore/package.json @@ -0,0 +1,15 @@ +{ + "name": "eslint-ignore", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "../../bin/scripts.js build" + }, + "keywords": [], + "author": "", + "dependencies": { + "@serverless-stack/resources": "../../../resources" + }, + "license": "ISC" +} diff --git a/packages/cli/test/eslint-ignore/yarn.lock b/packages/cli/test/eslint-ignore/yarn.lock new file mode 100644 index 0000000000..9672d2f4b9 --- /dev/null +++ b/packages/cli/test/eslint-ignore/yarn.lock @@ -0,0 +1,109 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aws-cdk/cloud-assembly-schema@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" + integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/core@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" + integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/cx-api@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" + integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + semver "^7.2.2" + +"@serverless-stack/resources@../../../resources": + version "0.0.15" + dependencies: + "@aws-cdk/core" "1.55.0" + +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== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +constructs@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" + integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" + integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +semver@^7.2.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/test/eslint-ts/eslint-ts.test.js b/packages/cli/test/eslint-ts/eslint-ts.test.js new file mode 100644 index 0000000000..8e2dbdbd5a --- /dev/null +++ b/packages/cli/test/eslint-ts/eslint-ts.test.js @@ -0,0 +1,18 @@ +const { runBuildCommand, clearBuildOutput } = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("eslint-ts", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).toMatch(/is defined but never used/); +}); diff --git a/packages/cli/test/eslint-ts/lib/index.ts b/packages/cli/test/eslint-ts/lib/index.ts new file mode 100644 index 0000000000..431ebe79f2 --- /dev/null +++ b/packages/cli/test/eslint-ts/lib/index.ts @@ -0,0 +1,12 @@ +import * as sst from "@serverless-stack/resources"; + +export class SampleStack extends sst.Stack { + constructor(scope: sst.App, id: string, props?: sst.StackProps) { + super(scope, id, props); + } +} + +export default function main(app: sst.App): void { + let a; + new SampleStack(app, "s3-1"); +} diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json new file mode 100644 index 0000000000..bc61b90df9 --- /dev/null +++ b/packages/cli/test/eslint-ts/package.json @@ -0,0 +1,15 @@ +{ + "name": "eslint-ts", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "../../bin/scripts.js build" + }, + "keywords": [], + "author": "", + "dependencies": { + "@serverless-stack/resources": "../../../resources" + }, + "license": "ISC" +} diff --git a/packages/cli/test/eslint-ts/tsconfig.json b/packages/cli/test/eslint-ts/tsconfig.json new file mode 100644 index 0000000000..7d659db8a8 --- /dev/null +++ b/packages/cli/test/eslint-ts/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ES2018", + "module": "commonjs", + "lib": ["es2018"], + "declaration": true, + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "noImplicitThis": true, + "alwaysStrict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": false, + "inlineSourceMap": true, + "inlineSources": true, + "experimentalDecorators": true, + "strictPropertyInitialization": false, + "typeRoots": ["./node_modules/@types"] + }, + "include": ["lib"] +} diff --git a/packages/cli/test/eslint-ts/yarn.lock b/packages/cli/test/eslint-ts/yarn.lock new file mode 100644 index 0000000000..9672d2f4b9 --- /dev/null +++ b/packages/cli/test/eslint-ts/yarn.lock @@ -0,0 +1,109 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aws-cdk/cloud-assembly-schema@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" + integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/core@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" + integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/cx-api@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" + integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + semver "^7.2.2" + +"@serverless-stack/resources@../../../resources": + version "0.0.15" + dependencies: + "@aws-cdk/core" "1.55.0" + +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== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +constructs@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" + integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" + integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +semver@^7.2.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/test/eslint/eslint.test.js b/packages/cli/test/eslint/eslint.test.js new file mode 100644 index 0000000000..8856fb4bec --- /dev/null +++ b/packages/cli/test/eslint/eslint.test.js @@ -0,0 +1,18 @@ +const { runBuildCommand, clearBuildOutput } = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("eslint", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).toMatch(/is defined but never used/); +}); diff --git a/packages/cli/test/eslint/lib/index.js b/packages/cli/test/eslint/lib/index.js new file mode 100644 index 0000000000..f81a5e348c --- /dev/null +++ b/packages/cli/test/eslint/lib/index.js @@ -0,0 +1,6 @@ +import MySampleStack from "./stack"; + +export default function main(app) { + var a; + new MySampleStack(app, "sample"); +} diff --git a/packages/cli/test/eslint/lib/stack.js b/packages/cli/test/eslint/lib/stack.js new file mode 100644 index 0000000000..4db6be9d0b --- /dev/null +++ b/packages/cli/test/eslint/lib/stack.js @@ -0,0 +1,7 @@ +import * as sst from "@serverless-stack/resources"; + +export default class MySampleStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + } +} diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json new file mode 100644 index 0000000000..5b94b30ab5 --- /dev/null +++ b/packages/cli/test/eslint/package.json @@ -0,0 +1,15 @@ +{ + "name": "eslint", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "../../bin/scripts.js build" + }, + "keywords": [], + "author": "", + "dependencies": { + "@serverless-stack/resources": "../../../resources" + }, + "license": "ISC" +} diff --git a/packages/cli/test/eslint/yarn.lock b/packages/cli/test/eslint/yarn.lock new file mode 100644 index 0000000000..9672d2f4b9 --- /dev/null +++ b/packages/cli/test/eslint/yarn.lock @@ -0,0 +1,109 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aws-cdk/cloud-assembly-schema@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" + integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/core@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" + integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/cx-api@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" + integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + semver "^7.2.2" + +"@serverless-stack/resources@../../../resources": + version "0.0.15" + dependencies: + "@aws-cdk/core" "1.55.0" + +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== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +constructs@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" + integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" + integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +semver@^7.2.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/test/helpers/run-build-command.js b/packages/cli/test/helpers/run-build-command.js index e1a1b380cd..4b4ef8f9dd 100644 --- a/packages/cli/test/helpers/run-build-command.js +++ b/packages/cli/test/helpers/run-build-command.js @@ -18,7 +18,7 @@ async function runBuildCommand(cwd, stack) { TIMEOUT, }); } catch (e) { - error = e.toString(); + error = e.toString() + e.stdout; } return error diff --git a/yarn.lock b/yarn.lock index 6bf5853a28..371db4b616 100644 --- a/yarn.lock +++ b/yarn.lock @@ -107,6 +107,22 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/eslint-parser@^7.11.3": + version "7.11.3" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.11.3.tgz#ceb94cb6e2457c4a4d2d87db29925e6b48d20786" + integrity sha512-OdCt/CVXdR/eTNTYDEobf4e55m/AAc04ki+/Oe2/GE8ivh2FxX4yDab48lA6t7ysP4M7luap6Fxx3hUVNTwzFQ== + dependencies: + eslint-scope "5.1.0" + eslint-visitor-keys "^1.3.0" + semver "^6.3.0" + +"@babel/eslint-plugin@^7.11.3": + version "7.11.3" + resolved "https://registry.yarnpkg.com/@babel/eslint-plugin/-/eslint-plugin-7.11.3.tgz#66b531f90592f8f0621d072b59ea2c37c91e8d0d" + integrity sha512-gmi3lgaWlYpNb+h7qPfv5GVz2ZVwzCDyV+kAGj+3il+Mv5uan5Yccvdw7m14UAAY2tdTbB0VgRF6ZLjUbrUm0g== + dependencies: + eslint-rule-composer "^0.3.0" + "@babel/generator@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.0.tgz#4b90c78d8c12825024568cbe83ee6c9af193585c" @@ -1026,13 +1042,13 @@ jest-util "^26.3.0" slash "^3.0.0" -"@jest/core@^26.3.0": - version "26.3.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.3.0.tgz#da496913ce7385b5e597b527078bf4ca12d2b627" - integrity sha512-WAAqGMpc+U+GS0oSr/ikI1JdRyPQyTZSVOr1xjnVcfvfUTZCK+wGoN0Cb7dm7HVdpbMQr/NvtM6vBVChctmzHA== +"@jest/core@^26.4.0": + version "26.4.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.4.0.tgz#8f42ae45640b46b4f8ffee134dcd408c210ab1ef" + integrity sha512-mpXm4OjWQbz7qbzGIiSqvfNZ1FxX6ywWgLtdSD2luPORt5zKPtqcdDnX7L8RdfMaj1znDBgN2+gB094ZIr7vnA== dependencies: "@jest/console" "^26.3.0" - "@jest/reporters" "^26.3.0" + "@jest/reporters" "^26.4.0" "@jest/test-result" "^26.3.0" "@jest/transform" "^26.3.0" "@jest/types" "^26.3.0" @@ -1042,17 +1058,17 @@ exit "^0.1.2" graceful-fs "^4.2.4" jest-changed-files "^26.3.0" - jest-config "^26.3.0" + jest-config "^26.4.0" jest-haste-map "^26.3.0" jest-message-util "^26.3.0" jest-regex-util "^26.0.0" - jest-resolve "^26.3.0" - jest-resolve-dependencies "^26.3.0" - jest-runner "^26.3.0" - jest-runtime "^26.3.0" - jest-snapshot "^26.3.0" + jest-resolve "^26.4.0" + jest-resolve-dependencies "^26.4.0" + jest-runner "^26.4.0" + jest-runtime "^26.4.0" + jest-snapshot "^26.4.0" jest-util "^26.3.0" - jest-validate "^26.3.0" + jest-validate "^26.4.0" jest-watcher "^26.3.0" micromatch "^4.0.2" p-each-series "^2.1.0" @@ -1082,19 +1098,19 @@ jest-mock "^26.3.0" jest-util "^26.3.0" -"@jest/globals@^26.3.0": - version "26.3.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.3.0.tgz#41a931c5bce4572b437dffab7146850044c7d359" - integrity sha512-oPe30VG9zor2U3Ev7khCM2LkjO3D+mgAv6s5D3Ed0sxfELxoRZwR8d1VgYWVQljcpumMwe9tDrKNuzgVjbEt7g== +"@jest/globals@^26.4.0": + version "26.4.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.4.0.tgz#ebab3ba937a200a4b3805f2e552bdf869465ffea" + integrity sha512-QKwoVAeL9d0xaEM9ebPvfc+bolN04F+o3zM2jswGDBiiNjCogZ3LvOaqumRdDyz6kLmbx+UhgMBAVuLunbXZ2A== dependencies: "@jest/environment" "^26.3.0" "@jest/types" "^26.3.0" - expect "^26.3.0" + expect "^26.4.0" -"@jest/reporters@^26.3.0": - version "26.3.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.3.0.tgz#12112cc0a073a92e7205d7ceee4de7cfac232105" - integrity sha512-MfLJOUPxhGb3sRT/wFjHXd6gyVQ1Fb1XxbEwY+gqdDBpg3pq5qAB5eiBUvcTheFRHmhu3gOv3UZ/gtxmqGBA+Q== +"@jest/reporters@^26.4.0": + version "26.4.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.4.0.tgz#dd3f03979170dd25dc6a9b746c693b591056d753" + integrity sha512-14OPAAuYhgRBSNxAocVluX6ksdMdK/EuP9NmtBXU9g1uKaVBrPnohn/CVm6iMot1a9iU8BCxa5715YRf8FEg/A== dependencies: "@bcoe/v8-coverage" "^0.2.3" "@jest/console" "^26.3.0" @@ -1112,7 +1128,7 @@ istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.0.2" jest-haste-map "^26.3.0" - jest-resolve "^26.3.0" + jest-resolve "^26.4.0" jest-util "^26.3.0" jest-worker "^26.3.0" slash "^3.0.0" @@ -1142,16 +1158,16 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^26.3.0": - version "26.3.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.3.0.tgz#f22b4927f8eef391ebaba6205d6aba328af9fda9" - integrity sha512-G7TA0Z85uj5l1m9UKZ/nXbArn0y+MeLKbojNLDHgjb1PpNNFDAOO6FJhk9We34m/hadcciMcJFnxV94dV2TX+w== +"@jest/test-sequencer@^26.4.0": + version "26.4.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.4.0.tgz#f4902772392d478d310dd6fd3b6818fb4bcc4c82" + integrity sha512-9Z7lCShS7vERp+DRwIVNH/6sHMWwJK1DPnGCpGeVLGJJWJ4Y08sQI3vIKdmKHu2KmwlUBpRM+BFf7NlVUkl5XA== dependencies: "@jest/test-result" "^26.3.0" graceful-fs "^4.2.4" jest-haste-map "^26.3.0" - jest-runner "^26.3.0" - jest-runtime "^26.3.0" + jest-runner "^26.4.0" + jest-runtime "^26.4.0" "@jest/transform@^26.3.0": version "26.3.0" @@ -2131,9 +2147,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@26.x", "@types/jest@^26.0.7": - version "26.0.9" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.9.tgz#0543b57da5f0cd949c5f423a00c56c492289c989" - integrity sha512-k4qFfJ5AUKrWok5KYXp2EPm89b0P/KZpl7Vg4XuOTVVQEhLDBDBU3iBFrjjdgd8fLw96aAtmnwhXHl63bWeBQQ== + version "26.0.10" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.10.tgz#8faf7e9756c033c39014ae76a7329efea00ea607" + integrity sha512-i2m0oyh8w/Lum7wWK/YOZJakYF8Mx08UaKA1CtbmFeDquVhAEdA7znacsVSf2hJ1OQ/OfVMGN90pw/AtzF8s/Q== dependencies: jest-diff "^25.2.1" pretty-format "^25.2.1" @@ -2154,9 +2170,9 @@ integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= "@types/node@*", "@types/node@>= 8", "@types/node@^14.0.27": - version "14.0.27" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1" - integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g== + version "14.6.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.6.0.tgz#7d4411bf5157339337d7cff864d9ff45f177b499" + integrity sha512-mikldZQitV94akrc4sCcSjtJfsTKt4p+e/s0AGscVA6XArQ9kFclP+ZiYUMnq987rc6QlYxXv/EivqlfSLxpKA== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -2190,52 +2206,52 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^3.8.0": - version "3.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.9.0.tgz#0fe529b33d63c9a94f7503ca2bb12c84b9477ff3" - integrity sha512-UD6b4p0/hSe1xdTvRCENSx7iQ+KR6ourlZFfYuPC7FlXEzdHuLPrEmuxZ23b2zW96KJX9Z3w05GE/wNOiEzrVg== +"@typescript-eslint/eslint-plugin@^3.9.1": + version "3.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.9.1.tgz#8cf27b6227d12d66dd8dc1f1a4b04d1daad51c2e" + integrity sha512-XIr+Mfv7i4paEdBf0JFdIl9/tVxyj+rlilWIfZ97Be0lZ7hPvUbS5iHt9Glc8kRI53dsr0PcAEudbf8rO2wGgg== dependencies: - "@typescript-eslint/experimental-utils" "3.9.0" + "@typescript-eslint/experimental-utils" "3.9.1" debug "^4.1.1" functional-red-black-tree "^1.0.1" regexpp "^3.0.0" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@3.9.0": - version "3.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.9.0.tgz#3171d8ddba0bf02a8c2034188593630914fcf5ee" - integrity sha512-/vSHUDYizSOhrOJdjYxPNGfb4a3ibO8zd4nUKo/QBFOmxosT3cVUV7KIg8Dwi6TXlr667G7YPqFK9+VSZOorNA== +"@typescript-eslint/experimental-utils@3.9.1": + version "3.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.9.1.tgz#b140b2dc7a7554a44f8a86fb6fe7cbfe57ca059e" + integrity sha512-lkiZ8iBBaYoyEKhCkkw4SAeatXyBq9Ece5bZXdLe1LWBUwTszGbmbiqmQbwWA8cSYDnjWXp9eDbXpf9Sn0hLAg== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/types" "3.9.0" - "@typescript-eslint/typescript-estree" "3.9.0" + "@typescript-eslint/types" "3.9.1" + "@typescript-eslint/typescript-estree" "3.9.1" eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/parser@^3.8.0": - version "3.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.9.0.tgz#344978a265d9a5c7c8f13e62c78172a4374dabea" - integrity sha512-rDHOKb6uW2jZkHQniUQVZkixQrfsZGUCNWWbKWep4A5hGhN5dLHMUCNAWnC4tXRlHedXkTDptIpxs6e4Pz8UfA== +"@typescript-eslint/parser@^3.9.1": + version "3.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.9.1.tgz#ab7983abaea0ae138ff5671c7c7739d8a191b181" + integrity sha512-y5QvPFUn4Vl4qM40lI+pNWhTcOWtpZAJ8pOEQ21fTTW4xTJkRplMjMRje7LYTXqVKKX9GJhcyweMz2+W1J5bMg== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "3.9.0" - "@typescript-eslint/types" "3.9.0" - "@typescript-eslint/typescript-estree" "3.9.0" + "@typescript-eslint/experimental-utils" "3.9.1" + "@typescript-eslint/types" "3.9.1" + "@typescript-eslint/typescript-estree" "3.9.1" eslint-visitor-keys "^1.1.0" -"@typescript-eslint/types@3.9.0": - version "3.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.9.0.tgz#be9d0aa451e1bf3ce99f2e6920659e5b2e6bfe18" - integrity sha512-rb6LDr+dk9RVVXO/NJE8dT1pGlso3voNdEIN8ugm4CWM5w5GimbThCMiMl4da1t5u3YwPWEwOnKAULCZgBtBHg== +"@typescript-eslint/types@3.9.1": + version "3.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.9.1.tgz#b2a6eaac843cf2f2777b3f2464fb1fbce5111416" + integrity sha512-15JcTlNQE1BsYy5NBhctnEhEoctjXOjOK+Q+rk8ugC+WXU9rAcS2BYhoh6X4rOaXJEpIYDl+p7ix+A5U0BqPTw== -"@typescript-eslint/typescript-estree@3.9.0": - version "3.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.9.0.tgz#c6abbb50fa0d715cab46fef67ca6378bf2eaca13" - integrity sha512-N+158NKgN4rOmWVfvKOMoMFV5n8XxAliaKkArm/sOypzQ0bUL8MSnOEBW3VFIeffb/K5ce/cAV0yYhR7U4ALAA== +"@typescript-eslint/typescript-estree@3.9.1": + version "3.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.9.1.tgz#fd81cada74bc8a7f3a2345b00897acb087935779" + integrity sha512-IqM0gfGxOmIKPhiHW/iyAEXwSVqMmR2wJ9uXHNdFpqVvPaQ3dWg302vW127sBpAiqM9SfHhyS40NKLsoMpN2KA== dependencies: - "@typescript-eslint/types" "3.9.0" - "@typescript-eslint/visitor-keys" "3.9.0" + "@typescript-eslint/types" "3.9.1" + "@typescript-eslint/visitor-keys" "3.9.1" debug "^4.1.1" glob "^7.1.6" is-glob "^4.0.1" @@ -2243,10 +2259,10 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@3.9.0": - version "3.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.9.0.tgz#44de8e1b1df67adaf3b94d6b60b80f8faebc8dd3" - integrity sha512-O1qeoGqDbu0EZUC/MZ6F1WHTIzcBVhGqDj3LhTnj65WUA548RXVxUHbYhAW9bZWfb2rnX9QsbbP5nmeJ5Z4+ng== +"@typescript-eslint/visitor-keys@3.9.1": + version "3.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.9.1.tgz#92af3747cdb71509199a8f7a4f00b41d636551d1" + integrity sha512-zxdtUjeoSh+prCpogswMwVUJfEFmCOjdzK9rpNjNBfm6EyPt99x3RrJoBOGZO23FCt0WPKUCOL5mb/9D5LjdwQ== dependencies: eslint-visitor-keys "^1.1.0" @@ -2330,9 +2346,9 @@ aggregate-error@^3.0.0: indent-string "^4.0.0" ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3: - version "6.12.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" - integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + version "6.12.4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" + integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -2586,9 +2602,9 @@ atob@^2.1.2: integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== aws-sdk@^2.715.0: - version "2.730.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.730.0.tgz#5b2775bb0c3cd7764031a17a9bcac3f1aafc385e" - integrity sha512-hYHplsbgUDP0XuaVJaHx2L/nC0E1i+4dGlkAQpkJz3qQ4NDfLnrbUFsA2g3AyWAsrnjrBNCkexPvwnV82Qng1g== + version "2.736.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.736.0.tgz#7b9373d1a338288c5caeca01a6226efbade2e086" + integrity sha512-rDrLgxkiFX+9EksDx4Lc6qLA07Pf0xfqqXnM3CpLBL81aVOdmmXAiBPtz/KSgbcrR5Mxz38ah8x5RZ17stJQjw== dependencies: buffer "4.9.2" events "1.1.1" @@ -2606,9 +2622,9 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" - integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== + version "1.10.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" + integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== babel-jest@^26.3.0: version "26.3.0" @@ -2962,9 +2978,9 @@ camelcase@^6.0.0: integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== caniuse-lite@^1.0.30001111: - version "1.0.30001113" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001113.tgz#22016ab55b5a8b04fa00ca342d9ee1b98df48065" - integrity sha512-qMvjHiKH21zzM/VDZr6oosO6Ri3U0V2tC015jRXjOecwQCJtsU5zklTNTk31jQbIOP8gha0h1ccM/g0ECP+4BA== + version "1.0.30001116" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001116.tgz#f3a3dea347f9294a3bdc4292309039cc84117fb8" + integrity sha512-f2lcYnmAI5Mst9+g0nkMIznFGsArRmZ0qU+dnq8l91hymdc2J3SFbiPhOJEeDqC1vtE8nc1qNQyklzB8veJefQ== capture-exit@^2.0.0: version "2.0.0" @@ -3739,9 +3755,9 @@ domexception@^2.0.1: webidl-conversions "^5.0.0" dot-prop@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== + version "4.2.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" + integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== dependencies: is-obj "^1.0.0" @@ -3760,9 +3776,9 @@ dreamopt@~0.6.0: wordwrap ">=0.0.2" duplexer@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" @@ -3783,9 +3799,9 @@ ecc-jsbn@~0.1.1: safer-buffer "^2.1.0" electron-to-chromium@^1.3.523: - version "1.3.529" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.529.tgz#a7eed559bc848a7c8d95026be7d8929e3f9af169" - integrity sha512-n3sriLldqNyjBlosbnPftjCY+m1dVOY307I1Y0HaHAqDGe3hRvK7ksJwWd+qs599ybR4jobCo1+7zXM9GyNMSA== + version "1.3.536" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.536.tgz#78a4ff753111283489f3b6ad19664902245ab876" + integrity sha512-aU16nvH8/zNNeFIQ7H2SKRQlJ/srw7mCn/JDj2ImWUA7Lk2+3zJFpDGJNP2qRxPAZsC+qgnlgNTYIvT6EOdJFQ== emittery@^0.7.1: version "0.7.1" @@ -3915,7 +3931,12 @@ escodegen@1.x.x, escodegen@^1.14.1: optionalDependencies: source-map "~0.6.1" -eslint-scope@^5.0.0, eslint-scope@^5.1.0: +eslint-rule-composer@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" + integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== + +eslint-scope@5.1.0, eslint-scope@^5.0.0, eslint-scope@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== @@ -3935,10 +3956,10 @@ eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== -eslint@^7.6.0: - version "7.6.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.6.0.tgz#522d67cfaea09724d96949c70e7a0550614d64d6" - integrity sha512-QlAManNtqr7sozWm5TF4wIH9gmUm2hE3vNRUvyoYAa4y1l5/jxD/PQStEjBMQtCqZmSep8UxrcecI60hOpe61w== +eslint@^7.6.0, eslint@^7.7.0: + version "7.7.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.7.0.tgz#18beba51411927c4b64da0a8ceadefe4030d6073" + integrity sha512-1KUxLzos0ZVsyL81PnRN335nDtQ8/vZUD6uMtWbF+5zDtjKcsklIi78XoE0MVL93QvWTu+E5y44VyyCsOMBrIg== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" @@ -4086,15 +4107,15 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.3.0.tgz#6145b4999a2c9bd64a644360d0c781c44d369c54" - integrity sha512-3tC0dpPgkTGkycM9H+mMjzIhm8I3ZAOV+y1Cj3xmF9iKxDeHBCAB64hf1OY//bMzQ/AftfodNy2pQWMKpTIV8Q== +expect@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.4.0.tgz#34a0aae523343b0931ff1cf0aa972dfe40edfab4" + integrity sha512-dbYDJhFcqQsamlos6nEwAMe+ahdckJBk5fmw1DYGLQGabGSlUuT+Fm2jHYw5119zG3uIhP+lCQbjJhFEdZMJtg== dependencies: "@jest/types" "^26.3.0" ansi-styles "^4.0.0" jest-get-type "^26.3.0" - jest-matcher-utils "^26.3.0" + jest-matcher-utils "^26.4.0" jest-message-util "^26.3.0" jest-regex-util "^26.0.0" @@ -5312,12 +5333,12 @@ jest-changed-files@^26.3.0: execa "^4.0.0" throat "^5.0.0" -jest-cli@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.3.0.tgz#046164f0b8194234aaa76bb58e867f5d6e3fcf53" - integrity sha512-vrlDluEjnNTJNpmw+lJ1Dvjhc+2o7QG0dG8n+iDu3NaoQ9OzqNeZsZZ0a9KP7SdtD5BXgvGSpCWTlLH5SqtxcA== +jest-cli@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.4.0.tgz#9cbd6be818cd818d85bafe2cffa1dbf043602b28" + integrity sha512-kw2Pr3V2x9/WzSDGsbz/MJBNlCoPMxMudrIavft4bqRlv5tASjU51tyO+1Os1LdW2dAnLQZYsxFUZ8oWPyssGQ== dependencies: - "@jest/core" "^26.3.0" + "@jest/core" "^26.4.0" "@jest/test-result" "^26.3.0" "@jest/types" "^26.3.0" chalk "^4.0.0" @@ -5325,19 +5346,19 @@ jest-cli@^26.3.0: graceful-fs "^4.2.4" import-local "^3.0.2" is-ci "^2.0.0" - jest-config "^26.3.0" + jest-config "^26.4.0" jest-util "^26.3.0" - jest-validate "^26.3.0" + jest-validate "^26.4.0" prompts "^2.0.1" yargs "^15.3.1" -jest-config@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.3.0.tgz#adb776fa88fc45ea719287cc09e4f0f5d5b3ce00" - integrity sha512-xzvmhKYOXOc/JjGabUUXoi7Nxu6QpY5zJxND85wdqFrdP7raJT5wqlrVJbp6Bv4Sj1e83Z8bkxjsZCpwPASaPw== +jest-config@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.4.0.tgz#72ff3d0418b7ee7fdd9e2bcaef4dec10b38b3b02" + integrity sha512-MxsvrBug8YY+C4QcUBtmgnHyFeW7w3Ouk/w9eplCDN8VJGVyBEZFe8Lxzfp2pSqh0Dqurqv8Oik2YkbekGUlxg== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.3.0" + "@jest/test-sequencer" "^26.4.0" "@jest/types" "^26.3.0" babel-jest "^26.3.0" chalk "^4.0.0" @@ -5347,13 +5368,13 @@ jest-config@^26.3.0: jest-environment-jsdom "^26.3.0" jest-environment-node "^26.3.0" jest-get-type "^26.3.0" - jest-jasmine2 "^26.3.0" + jest-jasmine2 "^26.4.0" jest-regex-util "^26.0.0" - jest-resolve "^26.3.0" + jest-resolve "^26.4.0" jest-util "^26.3.0" - jest-validate "^26.3.0" + jest-validate "^26.4.0" micromatch "^4.0.2" - pretty-format "^26.3.0" + pretty-format "^26.4.0" jest-diff@^25.2.1: version "25.5.0" @@ -5365,15 +5386,15 @@ jest-diff@^25.2.1: jest-get-type "^25.2.6" pretty-format "^25.5.0" -jest-diff@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.3.0.tgz#485eea87b7003d34628c960c6c625ffe4de8ab04" - integrity sha512-q5OZAtnr5CbHzrhjANzc3wvROk7+rcjCUI5uqM4cjOjtscNKfbJKBs3YhsWWhsdsIZzI3gc6wOpm49r6S61beg== +jest-diff@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.4.0.tgz#d073a0a11952b5bd9f1ff39bb9ad24304a0c55f7" + integrity sha512-wwC38HlOW+iTq6j5tkj/ZamHn6/nrdcEOc/fKaVILNtN2NLWGdkfRaHWwfNYr5ehaLvuoG2LfCZIcWByVj0gjg== dependencies: chalk "^4.0.0" diff-sequences "^26.3.0" jest-get-type "^26.3.0" - pretty-format "^26.3.0" + pretty-format "^26.4.0" jest-docblock@^26.0.0: version "26.0.0" @@ -5382,16 +5403,16 @@ jest-docblock@^26.0.0: dependencies: detect-newline "^3.0.0" -jest-each@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.3.0.tgz#f70192d59f6a8d72b4ccfe8e9a39ddf667b1263e" - integrity sha512-OSAnLv0Eo/sDVhV0ifT2u6Q4aYUBoZ97R4k9cQshUFLTco0iRDbViJiW3Y6ySZjW95Tb83/xMYCppBih/7sW/A== +jest-each@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.4.0.tgz#c53605b20e7a0a58d6dcf4d8b2f309e607d35d5a" + integrity sha512-+cyBh1ehs6thVT/bsZVG+WwmRn2ix4Q4noS9yLZgM10yGWPW12/TDvwuOV2VZXn1gi09/ZwJKJWql6YW1C9zNw== dependencies: "@jest/types" "^26.3.0" chalk "^4.0.0" jest-get-type "^26.3.0" jest-util "^26.3.0" - pretty-format "^26.3.0" + pretty-format "^26.4.0" jest-environment-jsdom@^26.3.0: version "26.3.0" @@ -5449,10 +5470,10 @@ jest-haste-map@^26.3.0: optionalDependencies: fsevents "^2.1.2" -jest-jasmine2@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.3.0.tgz#5c9d365d3032342801cfd15abd2cdcccc7fb01ff" - integrity sha512-ZPkkA2XfH/fcLOp0SjeR4uDrMoNFilcwxLHORpjfMrcU0BFHNNRaF3DnslCdmewzqaERqtmHpYo8jj34RT+m2g== +jest-jasmine2@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.4.0.tgz#f66b2237203df4227d3bdbb4b8a0de54ba877d35" + integrity sha512-cGBxwzDDKB09EPJ4pE69BMDv+2lO442IB1xQd+vL3cua2OKdeXQK6iDlQKoRX/iP0RgU5T8sn9yahLcx/+ox8Q== dependencies: "@babel/traverse" "^7.1.0" "@jest/environment" "^26.3.0" @@ -5462,34 +5483,34 @@ jest-jasmine2@^26.3.0: "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^26.3.0" + expect "^26.4.0" is-generator-fn "^2.0.0" - jest-each "^26.3.0" - jest-matcher-utils "^26.3.0" + jest-each "^26.4.0" + jest-matcher-utils "^26.4.0" jest-message-util "^26.3.0" - jest-runtime "^26.3.0" - jest-snapshot "^26.3.0" + jest-runtime "^26.4.0" + jest-snapshot "^26.4.0" jest-util "^26.3.0" - pretty-format "^26.3.0" + pretty-format "^26.4.0" throat "^5.0.0" -jest-leak-detector@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.3.0.tgz#74c077a243585cc1d2cfd50d231d373100dd6e6f" - integrity sha512-8C2Bur0S6n2xgW5kx22bDbe+Jjz9sM7/abr7DRQ48ww6q4w7vVzEpDEZiY7KatjTHtUloLTAqwTXEXg+tuETTg== +jest-leak-detector@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.4.0.tgz#1efeeef693af3c9332062876add5ac5f25cb0a70" + integrity sha512-7EXKKEKnAWUPyiVtGZzJflbPOtYUdlNoevNVOkAcPpdR8xWiYKPGNGA6sz25S+8YhZq3rmkQJYAh3/P0VnoRwA== dependencies: jest-get-type "^26.3.0" - pretty-format "^26.3.0" + pretty-format "^26.4.0" -jest-matcher-utils@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.3.0.tgz#41dfecac8e7a38e38330c159789711a50edffaed" - integrity sha512-M5ZRSp6qpyzZyrLwXD2Sop7xaxm6qu/mKvqWU+BOSPTa4Y0ZEoKUYBzus/emg6kaVt7Ov9xMDLLZR1SrC8FxCw== +jest-matcher-utils@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.4.0.tgz#2bce9a939e008b894faf1bd4b5bb58facd00c252" + integrity sha512-u+xdCdq+F262DH+PutJKXLGr2H5P3DImdJCir51PGSfi3TtbLQ5tbzKaN8BkXbiTIU6ayuAYBWTlU1nyckVdzA== dependencies: chalk "^4.0.0" - jest-diff "^26.3.0" + jest-diff "^26.4.0" jest-get-type "^26.3.0" - pretty-format "^26.3.0" + pretty-format "^26.4.0" jest-message-util@^26.3.0: version "26.3.0" @@ -5523,19 +5544,19 @@ jest-regex-util@^26.0.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== -jest-resolve-dependencies@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.3.0.tgz#98e4a2d17ffa352e6be72a3d180f2260d9d4f473" - integrity sha512-j5rZ2BUh8vVjJZ7bpgCre0t6mbFLm5BWfVhYb1H35A3nbPN3kepzMqkMnKXPhwyLIVwn25uYkv6LHc2/Xa1sGw== +jest-resolve-dependencies@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.4.0.tgz#c911fc991e1ae034dd8d01c192f23459d66b87b7" + integrity sha512-hznK/hlrlhu8hwdbieRdHFKmcV83GW8t30libt/v6j1L3IEzb8iN21SaWzV8KRAAK4ijiU0kuge0wnHn+0rytQ== dependencies: "@jest/types" "^26.3.0" jest-regex-util "^26.0.0" - jest-snapshot "^26.3.0" + jest-snapshot "^26.4.0" -jest-resolve@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.3.0.tgz#c497cded13714b9ec98848837525323184fb4c95" - integrity sha512-+oKVWDkXjdZ4Xciuxv+M5e5v/Z3RLjrKIzen9tq3IO6HpzsLf9Mk3rET5du1uU8iVUCvz4/1PmjzNF50Uc7l2A== +jest-resolve@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.4.0.tgz#6dc0af7fb93e65b73fec0368ca2b76f3eb59a6d7" + integrity sha512-bn/JoZTEXRSlEx3+SfgZcJAVuTMOksYq9xe9O6s4Ekg84aKBObEaVXKOEilULRqviSLAYJldnoWV9c07kwtiCg== dependencies: "@jest/types" "^26.3.0" chalk "^4.0.0" @@ -5546,10 +5567,10 @@ jest-resolve@^26.3.0: resolve "^1.17.0" slash "^3.0.0" -jest-runner@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.3.0.tgz#30093549b31659e64e987728a6ef601f464916b6" - integrity sha512-eiPKgbhTM4q6A7RBh4qzKf6hwFDJMfqoFJubFvWSrHdZUsvSiBWYDqQI+FUXDFxDAOn/AfZjKURACAH3fUDjwA== +jest-runner@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.4.0.tgz#4cb91b266390fbf266294a7d8250d0e7bf8c7a9d" + integrity sha512-XF+tnUGolnPriu6Gg+HHWftspMjD5NkTV2mQppQnpZe39GcUangJ0al7aBGtA3GbVAcRd048DQiJPmsQRdugjw== dependencies: "@jest/console" "^26.3.0" "@jest/environment" "^26.3.0" @@ -5560,27 +5581,27 @@ jest-runner@^26.3.0: emittery "^0.7.1" exit "^0.1.2" graceful-fs "^4.2.4" - jest-config "^26.3.0" + jest-config "^26.4.0" jest-docblock "^26.0.0" jest-haste-map "^26.3.0" - jest-leak-detector "^26.3.0" + jest-leak-detector "^26.4.0" jest-message-util "^26.3.0" - jest-resolve "^26.3.0" - jest-runtime "^26.3.0" + jest-resolve "^26.4.0" + jest-runtime "^26.4.0" jest-util "^26.3.0" jest-worker "^26.3.0" source-map-support "^0.5.6" throat "^5.0.0" -jest-runtime@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.3.0.tgz#2f2d030b8a3d6c7653cb9c40544d687a1a5c09af" - integrity sha512-cqCz+S76qwZcPnddkLCjuNw9O8/lB+i1odjz2hpvpDogXLp0qSMs+Slh1gBjB5V4feUyBHav/550Mr3FeTdmnA== +jest-runtime@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.4.0.tgz#0b860f2bcf4f6047919c5b3fe74ed6adbe0056b4" + integrity sha512-1fjZgGpkyQBUTo59Vi19I4IcsBwzY6uwVFNjUmR06iIi3XRErkY28yimi4IUDRrofQErqcDEw2n3DF9WmQ6vEg== dependencies: "@jest/console" "^26.3.0" "@jest/environment" "^26.3.0" "@jest/fake-timers" "^26.3.0" - "@jest/globals" "^26.3.0" + "@jest/globals" "^26.4.0" "@jest/source-map" "^26.3.0" "@jest/test-result" "^26.3.0" "@jest/transform" "^26.3.0" @@ -5591,15 +5612,15 @@ jest-runtime@^26.3.0: exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-config "^26.3.0" + jest-config "^26.4.0" jest-haste-map "^26.3.0" jest-message-util "^26.3.0" jest-mock "^26.3.0" jest-regex-util "^26.0.0" - jest-resolve "^26.3.0" - jest-snapshot "^26.3.0" + jest-resolve "^26.4.0" + jest-snapshot "^26.4.0" jest-util "^26.3.0" - jest-validate "^26.3.0" + jest-validate "^26.4.0" slash "^3.0.0" strip-bom "^4.0.0" yargs "^15.3.1" @@ -5612,25 +5633,25 @@ jest-serializer@^26.3.0: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.3.0.tgz#8bec08bda1133ad0a7fa0184b1c385f801e3b1df" - integrity sha512-tHVUIeOTN/0SZN2ZjBZHzPG5txs/6uEQx2mwjxIT7QRE7pddPLd8jktXthyIz6bV+3GKetWXSV4YAoPUQwrfMA== +jest-snapshot@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.4.0.tgz#efd42eef09bcb33e9a3eb98e229f2368c73c9235" + integrity sha512-vFGmNGWHMBomrlOpheTMoqihymovuH3GqfmaEIWoPpsxUXyxT3IlbxI5I4m2vg0uv3HUJYg5JoGrkgMzVsAwCg== dependencies: "@babel/types" "^7.0.0" "@jest/types" "^26.3.0" "@types/prettier" "^2.0.0" chalk "^4.0.0" - expect "^26.3.0" + expect "^26.4.0" graceful-fs "^4.2.4" - jest-diff "^26.3.0" + jest-diff "^26.4.0" jest-get-type "^26.3.0" jest-haste-map "^26.3.0" - jest-matcher-utils "^26.3.0" + jest-matcher-utils "^26.4.0" jest-message-util "^26.3.0" - jest-resolve "^26.3.0" + jest-resolve "^26.4.0" natural-compare "^1.4.0" - pretty-format "^26.3.0" + pretty-format "^26.4.0" semver "^7.3.2" jest-util@26.x, jest-util@^26.3.0: @@ -5645,17 +5666,17 @@ jest-util@26.x, jest-util@^26.3.0: is-ci "^2.0.0" micromatch "^4.0.2" -jest-validate@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.3.0.tgz#751c3f8e20a15b9d7ada8d1a361d0975ba793249" - integrity sha512-oIJWqkIdgh1Q1O7ku4kDGkQoFKUOtZyDMbfYs4DsBi6r+FDY37xKTyZ30nM8F6yGZfB72qc7XB+3qKRgokwoXg== +jest-validate@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.4.0.tgz#3874a7cc9e27328afac88899ee9e2fae5e3a4293" + integrity sha512-t56Z/FRMrLP6mpmje7/YgHy0wOzcuc6i3LBXz6kjmsUWYN62OuMdC86Vg9/dX59SvyitSqqegOrx+h7BkNXeaQ== dependencies: "@jest/types" "^26.3.0" camelcase "^6.0.0" chalk "^4.0.0" jest-get-type "^26.3.0" leven "^3.1.0" - pretty-format "^26.3.0" + pretty-format "^26.4.0" jest-watcher@^26.3.0: version "26.3.0" @@ -5680,13 +5701,13 @@ jest-worker@^26.3.0: supports-color "^7.0.0" jest@^26.1.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.3.0.tgz#366e25827831e65743a324bc476de54f41f2e07b" - integrity sha512-LFCry7NS6bTa4BUGUHC+NvZ3B9WG7Jv8F+Lb96dAJFM23LMwSsL5RiJcw9S+nejsh8lS1VxHq+RSH4Xa9tujpA== + version "26.4.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.4.0.tgz#495e81dcff40f8a656e567c664af87b29c5c5922" + integrity sha512-lNCOS+ckRHE1wFyVtQClBmbsOVuH2GWUTJMDL3vunp9DXcah+V8vfvVVApngClcdoc3rgZpqOfCNKLjxjj2l4g== dependencies: - "@jest/core" "^26.3.0" + "@jest/core" "^26.4.0" import-local "^3.0.2" - jest-cli "^26.3.0" + jest-cli "^26.4.0" jmespath@0.15.0: version "0.15.0" @@ -5945,9 +5966,9 @@ lint-staged@^10.2.11: stringify-object "^3.3.0" listr2@^2.1.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-2.5.1.tgz#f265dddf916c8a9b475437b34ae85a7d8f495c7a" - integrity sha512-qkNRW70SwfwWLD/eiaTf2tfgWT/ZvjmMsnEFJOCzac0cjcc8rYHDBr1eQhRxopj6lZO7Oa5sS/pZzS6q+BsX+w== + version "2.6.0" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-2.6.0.tgz#788a3d202978a1b8582062952cbc49272c8e206a" + integrity sha512-nwmqTJYQQ+AsKb4fCXH/6/UmLCEDL1jkRAdSn9M6cEUzoRGrs33YD/3N86gAZQnGZ6hxV18XSdlBcJ1GTmetJA== dependencies: chalk "^4.1.0" cli-truncate "^2.1.0" @@ -6094,9 +6115,9 @@ lodash.uniq@^4.5.0: integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.2.1: - version "4.17.19" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" - integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== log-symbols@^4.0.0: version "4.0.0" @@ -7204,10 +7225,10 @@ pretty-format@^25.2.1, pretty-format@^25.5.0: ansi-styles "^4.0.0" react-is "^16.12.0" -pretty-format@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.3.0.tgz#d9a7b4bb2948cabc646e6a7729b12f686f3fed36" - integrity sha512-24kRw4C2Ok8+SHquydTZZCZPF2fvANI7rChGs8sNu784+1Jkq5jVFMvNAJSLuLy6XUcP3Fnw+SscLIQag/CG8Q== +pretty-format@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.4.0.tgz#c08073f531429e9e5024049446f42ecc9f933a3b" + integrity sha512-mEEwwpCseqrUtuMbrJG4b824877pM5xald3AkilJ47Po2YLr97/siejYQHqj2oDQBeJNbu+Q0qUuekJ8F0NAPg== dependencies: "@jest/types" "^26.3.0" ansi-regex "^5.0.0" From 1f172794a57aeea80be825ca2bff6461fa025ba6 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 19 Aug 2020 13:46:02 -0400 Subject: [PATCH 052/481] v0.0.16 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index 87744d94cd..af612216d4 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.15" + "version": "0.0.16" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 58ea45d09c..f01a0dfec6 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.0.15", + "version": "0.0.16", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "jest-clear-cache": "jest --clearCache", @@ -41,7 +41,7 @@ "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", "@serverless-stack/aws-cdk": "1.55.0-rc.1", - "@serverless-stack/resources": "^0.0.15", + "@serverless-stack/resources": "^0.0.16", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index e72947f070..95b7b09044 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.0.15", + "version": "0.0.16", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index c7a658605c..b24acc6c20 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.15", + "version": "0.0.16", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From f4628e38fc35bbeed147c336406eb6637260e6e6 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 19 Aug 2020 15:03:17 -0400 Subject: [PATCH 053/481] Adding checks for sst.json --- packages/cli/package.json | 2 +- packages/cli/scripts/config/.babelrc.json | 2 +- packages/cli/scripts/config/cdkHelpers.js | 67 ++++++++++++++++--- packages/cli/test/base-ts/sst.json | 6 ++ packages/cli/test/base/sst.json | 1 + .../config-invalid/config-invalid.test.js | 20 ++++++ packages/cli/test/config-invalid/lib/index.js | 1 + packages/cli/test/config-invalid/package.json | 13 ++++ packages/cli/test/config-invalid/sst.json | 1 + packages/cli/test/config-invalid/yarn.lock | 4 ++ .../config-no-type/config-no-type.test.js | 18 +++++ packages/cli/test/config-no-type/lib/index.js | 1 + packages/cli/test/config-no-type/package.json | 13 ++++ packages/cli/test/config-no-type/sst.json | 5 ++ packages/cli/test/config-no-type/yarn.lock | 4 ++ .../config-not-found/config-not-found.test.js | 18 +++++ .../cli/test/config-not-found/lib/index.js | 1 + .../cli/test/config-not-found/package.json | 13 ++++ packages/cli/test/config-not-found/yarn.lock | 4 ++ packages/cli/test/config/sst.json | 1 + packages/cli/test/context/sst.json | 6 ++ packages/cli/test/eslint-ts/sst.json | 6 ++ packages/cli/test/eslint/sst.json | 6 ++ .../test/handler-function-not-found/sst.json | 1 + packages/cli/test/handler-not-found/sst.json | 1 + .../cli/test/helpers/run-build-command.js | 2 +- packages/cli/test/stack-no-prefix/sst.json | 6 ++ packages/cli/test/stack-set-env/sst.json | 6 ++ 28 files changed, 216 insertions(+), 13 deletions(-) create mode 100644 packages/cli/test/base-ts/sst.json create mode 100644 packages/cli/test/config-invalid/config-invalid.test.js create mode 100644 packages/cli/test/config-invalid/lib/index.js create mode 100644 packages/cli/test/config-invalid/package.json create mode 100644 packages/cli/test/config-invalid/sst.json create mode 100644 packages/cli/test/config-invalid/yarn.lock create mode 100644 packages/cli/test/config-no-type/config-no-type.test.js create mode 100644 packages/cli/test/config-no-type/lib/index.js create mode 100644 packages/cli/test/config-no-type/package.json create mode 100644 packages/cli/test/config-no-type/sst.json create mode 100644 packages/cli/test/config-no-type/yarn.lock create mode 100644 packages/cli/test/config-not-found/config-not-found.test.js create mode 100644 packages/cli/test/config-not-found/lib/index.js create mode 100644 packages/cli/test/config-not-found/package.json create mode 100644 packages/cli/test/config-not-found/yarn.lock create mode 100644 packages/cli/test/context/sst.json create mode 100644 packages/cli/test/eslint-ts/sst.json create mode 100644 packages/cli/test/eslint/sst.json create mode 100644 packages/cli/test/stack-no-prefix/sst.json create mode 100644 packages/cli/test/stack-set-env/sst.json diff --git a/packages/cli/package.json b/packages/cli/package.json index f01a0dfec6..c6a32a7766 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -4,7 +4,7 @@ "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "jest-clear-cache": "jest --clearCache", - "test": "jest --no-watchman" + "test": "jest" }, "bin": { "sst": "./bin/scripts.js" diff --git a/packages/cli/scripts/config/.babelrc.json b/packages/cli/scripts/config/.babelrc.json index c459dc19c9..40b948d1b5 100644 --- a/packages/cli/scripts/config/.babelrc.json +++ b/packages/cli/scripts/config/.babelrc.json @@ -4,7 +4,7 @@ "@babel/preset-env", { "targets": { - "node": "8.10" + "node": "10" } } ] diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index 6d5a6eae63..da3775eef4 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -16,6 +16,14 @@ const DEFAULT_NAME = ""; const DEFAULT_STAGE = "dev"; const DEFAULT_REGION = "us-east-1"; +function exitWithMessage(message, withNewline) { + if (withNewline) { + logger.log(""); + } + logger.error(message); + process.exit(1); +} + function getCmdPath(cmd) { const appPath = path.join(paths.appNodeModules, ".bin", cmd); const ownPath = path.join(paths.ownNodeModules, ".bin", cmd); @@ -156,14 +164,11 @@ function transpile(usingYarn) { if (results.error) { throw results.error; } else if (results.status !== 0) { - if (!isTs) { + exitWithMessage( + isTs ? "TypeScript compilation error" : "Babel compilation error", // Add an empty line for Babel errors to make it more clear - console.log(""); - } - logger.error( - isTs ? "TypeScript compilation error" : "Babel compilation error" + isTs ? false : true ); - process.exit(1); } } @@ -199,7 +204,46 @@ function copyCdkConfig() { function applyConfig(argv) { const configPath = path.join(paths.appPath, "sst.json"); - const config = fs.existsSync(configPath) ? require(configPath) : {}; + + if (!fs.existsSync(configPath)) { + exitWithMessage( + `Add the ${chalk.bold( + "sst.json" + )} config file in your project root to get started. Or use the ${chalk.bold( + "create-serverless-stack" + )} CLI to create a new project.\n`, + true + ); + } + + let config; + const configStr = fs.readFileSync(configPath, "utf8"); + + try { + config = JSON.parse(configStr); + } catch (e) { + exitWithMessage( + `There was a problem reading the ${chalk.bold( + "sst.json" + )} config file. Make sure it is in valid JSON format.\n`, + true + ); + } + + if (!config.type || config.type.trim() !== "@serverless-stack/resources") { + exitWithMessage( + `Cannot detect the ${chalk.bold( + "type" + )} of Serverless Stack app. Make sure to set the following in your ${chalk.bold( + "sst.json" + )}.\n\n "type": "@serverless-stack/resources"\n`, + true + ); + } + + const type = config.type.trim(); + + logger.log(chalk.grey(`Preparing ${type}`)); config.name = config.name || DEFAULT_NAME; config.stage = argv.stage || config.stage || DEFAULT_STAGE; @@ -215,12 +259,16 @@ function applyConfig(argv) { function prepareCdk(argv, cliInfo) { createBuildPath(); + const appliedConfig = applyConfig(argv); + copyConfigFiles(); copyWrapperFiles(); copyCdkConfig(); + lint(); transpile(cliInfo.yarn); - return applyConfig(argv); + + return appliedConfig; } function cacheCdkContext() { @@ -234,8 +282,7 @@ function cacheCdkContext() { function handleCdkErrors(e) { if (isSubProcessError(e)) { - logger.error("There was an error synthesizing your app."); - process.exit(1); + exitWithMessage("There was an error synthesizing your app.", false); } else { throw e; } diff --git a/packages/cli/test/base-ts/sst.json b/packages/cli/test/base-ts/sst.json new file mode 100644 index 0000000000..f64a393177 --- /dev/null +++ b/packages/cli/test/base-ts/sst.json @@ -0,0 +1,6 @@ +{ + "name": "notes", + "stage": "prod", + "type": "@serverless-stack/resources", + "region": "us-west-1" +} diff --git a/packages/cli/test/base/sst.json b/packages/cli/test/base/sst.json index dc2fd52942..30190cc1ce 100644 --- a/packages/cli/test/base/sst.json +++ b/packages/cli/test/base/sst.json @@ -1,4 +1,5 @@ { + "type": "@serverless-stack/resources", "name": "notes", "stage": "prod", "region": "us-west-1" diff --git a/packages/cli/test/config-invalid/config-invalid.test.js b/packages/cli/test/config-invalid/config-invalid.test.js new file mode 100644 index 0000000000..2b5e69b926 --- /dev/null +++ b/packages/cli/test/config-invalid/config-invalid.test.js @@ -0,0 +1,20 @@ +const { runBuildCommand, clearBuildOutput } = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("config-invalid", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).toMatch( + /There was a problem reading the sst.json config file/ + ); +}); diff --git a/packages/cli/test/config-invalid/lib/index.js b/packages/cli/test/config-invalid/lib/index.js new file mode 100644 index 0000000000..c857a02040 --- /dev/null +++ b/packages/cli/test/config-invalid/lib/index.js @@ -0,0 +1 @@ +export default function main() {} diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json new file mode 100644 index 0000000000..62ac3bac5e --- /dev/null +++ b/packages/cli/test/config-invalid/package.json @@ -0,0 +1,13 @@ +{ + "name": "config-invalid", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "../../bin/scripts.js build" + }, + "keywords": [], + "author": "", + "dependencies": {}, + "license": "ISC" +} diff --git a/packages/cli/test/config-invalid/sst.json b/packages/cli/test/config-invalid/sst.json new file mode 100644 index 0000000000..86a4a58dcd --- /dev/null +++ b/packages/cli/test/config-invalid/sst.json @@ -0,0 +1 @@ +jibberish diff --git a/packages/cli/test/config-invalid/yarn.lock b/packages/cli/test/config-invalid/yarn.lock new file mode 100644 index 0000000000..fb57ccd13a --- /dev/null +++ b/packages/cli/test/config-invalid/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + diff --git a/packages/cli/test/config-no-type/config-no-type.test.js b/packages/cli/test/config-no-type/config-no-type.test.js new file mode 100644 index 0000000000..6b33704cc8 --- /dev/null +++ b/packages/cli/test/config-no-type/config-no-type.test.js @@ -0,0 +1,18 @@ +const { runBuildCommand, clearBuildOutput } = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("config-invalid", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).toMatch(/Cannot detect the type of Serverless Stack app/); +}); diff --git a/packages/cli/test/config-no-type/lib/index.js b/packages/cli/test/config-no-type/lib/index.js new file mode 100644 index 0000000000..c857a02040 --- /dev/null +++ b/packages/cli/test/config-no-type/lib/index.js @@ -0,0 +1 @@ +export default function main() {} diff --git a/packages/cli/test/config-no-type/package.json b/packages/cli/test/config-no-type/package.json new file mode 100644 index 0000000000..b41de9dfca --- /dev/null +++ b/packages/cli/test/config-no-type/package.json @@ -0,0 +1,13 @@ +{ + "name": "config-no-type", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "../../bin/scripts.js build" + }, + "keywords": [], + "author": "", + "dependencies": {}, + "license": "ISC" +} diff --git a/packages/cli/test/config-no-type/sst.json b/packages/cli/test/config-no-type/sst.json new file mode 100644 index 0000000000..dc2fd52942 --- /dev/null +++ b/packages/cli/test/config-no-type/sst.json @@ -0,0 +1,5 @@ +{ + "name": "notes", + "stage": "prod", + "region": "us-west-1" +} diff --git a/packages/cli/test/config-no-type/yarn.lock b/packages/cli/test/config-no-type/yarn.lock new file mode 100644 index 0000000000..fb57ccd13a --- /dev/null +++ b/packages/cli/test/config-no-type/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + diff --git a/packages/cli/test/config-not-found/config-not-found.test.js b/packages/cli/test/config-not-found/config-not-found.test.js new file mode 100644 index 0000000000..92193bfae1 --- /dev/null +++ b/packages/cli/test/config-not-found/config-not-found.test.js @@ -0,0 +1,18 @@ +const { runBuildCommand, clearBuildOutput } = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("config-not-found", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).toMatch(/Add the sst.json config file/); +}); diff --git a/packages/cli/test/config-not-found/lib/index.js b/packages/cli/test/config-not-found/lib/index.js new file mode 100644 index 0000000000..c857a02040 --- /dev/null +++ b/packages/cli/test/config-not-found/lib/index.js @@ -0,0 +1 @@ +export default function main() {} diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json new file mode 100644 index 0000000000..5854b66f0a --- /dev/null +++ b/packages/cli/test/config-not-found/package.json @@ -0,0 +1,13 @@ +{ + "name": "config-not-found", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "../../bin/scripts.js build" + }, + "keywords": [], + "author": "", + "dependencies": {}, + "license": "ISC" +} diff --git a/packages/cli/test/config-not-found/yarn.lock b/packages/cli/test/config-not-found/yarn.lock new file mode 100644 index 0000000000..fb57ccd13a --- /dev/null +++ b/packages/cli/test/config-not-found/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + diff --git a/packages/cli/test/config/sst.json b/packages/cli/test/config/sst.json index 2437eb18c5..bcca5d33f2 100644 --- a/packages/cli/test/config/sst.json +++ b/packages/cli/test/config/sst.json @@ -1,4 +1,5 @@ { + "type": "@serverless-stack/resources", "name": "krusty-krab", "stage": "prod-jest", "region": "us-west-2" diff --git a/packages/cli/test/context/sst.json b/packages/cli/test/context/sst.json new file mode 100644 index 0000000000..30190cc1ce --- /dev/null +++ b/packages/cli/test/context/sst.json @@ -0,0 +1,6 @@ +{ + "type": "@serverless-stack/resources", + "name": "notes", + "stage": "prod", + "region": "us-west-1" +} diff --git a/packages/cli/test/eslint-ts/sst.json b/packages/cli/test/eslint-ts/sst.json new file mode 100644 index 0000000000..30190cc1ce --- /dev/null +++ b/packages/cli/test/eslint-ts/sst.json @@ -0,0 +1,6 @@ +{ + "type": "@serverless-stack/resources", + "name": "notes", + "stage": "prod", + "region": "us-west-1" +} diff --git a/packages/cli/test/eslint/sst.json b/packages/cli/test/eslint/sst.json new file mode 100644 index 0000000000..30190cc1ce --- /dev/null +++ b/packages/cli/test/eslint/sst.json @@ -0,0 +1,6 @@ +{ + "type": "@serverless-stack/resources", + "name": "notes", + "stage": "prod", + "region": "us-west-1" +} diff --git a/packages/cli/test/handler-function-not-found/sst.json b/packages/cli/test/handler-function-not-found/sst.json index dc2fd52942..30190cc1ce 100644 --- a/packages/cli/test/handler-function-not-found/sst.json +++ b/packages/cli/test/handler-function-not-found/sst.json @@ -1,4 +1,5 @@ { + "type": "@serverless-stack/resources", "name": "notes", "stage": "prod", "region": "us-west-1" diff --git a/packages/cli/test/handler-not-found/sst.json b/packages/cli/test/handler-not-found/sst.json index dc2fd52942..30190cc1ce 100644 --- a/packages/cli/test/handler-not-found/sst.json +++ b/packages/cli/test/handler-not-found/sst.json @@ -1,4 +1,5 @@ { + "type": "@serverless-stack/resources", "name": "notes", "stage": "prod", "region": "us-west-1" diff --git a/packages/cli/test/helpers/run-build-command.js b/packages/cli/test/helpers/run-build-command.js index 4b4ef8f9dd..c22e30c63d 100644 --- a/packages/cli/test/helpers/run-build-command.js +++ b/packages/cli/test/helpers/run-build-command.js @@ -13,7 +13,7 @@ async function runBuildCommand(cwd, stack) { let result, error; try { - result = await execPromise(`yarn run build${stack}`, { + result = await execPromise(`yarn run build${stack} --no-color`, { cwd, TIMEOUT, }); diff --git a/packages/cli/test/stack-no-prefix/sst.json b/packages/cli/test/stack-no-prefix/sst.json new file mode 100644 index 0000000000..30190cc1ce --- /dev/null +++ b/packages/cli/test/stack-no-prefix/sst.json @@ -0,0 +1,6 @@ +{ + "type": "@serverless-stack/resources", + "name": "notes", + "stage": "prod", + "region": "us-west-1" +} diff --git a/packages/cli/test/stack-set-env/sst.json b/packages/cli/test/stack-set-env/sst.json new file mode 100644 index 0000000000..30190cc1ce --- /dev/null +++ b/packages/cli/test/stack-set-env/sst.json @@ -0,0 +1,6 @@ +{ + "type": "@serverless-stack/resources", + "name": "notes", + "stage": "prod", + "region": "us-west-1" +} From 465ace45f25c0949ab4ff5de8f234bcfea8ddedb Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 19 Aug 2020 16:20:15 -0400 Subject: [PATCH 054/481] v0.0.17 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index af612216d4..e635374408 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.16" + "version": "0.0.17" } diff --git a/packages/cli/package.json b/packages/cli/package.json index c6a32a7766..87c5b1f72b 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.0.16", + "version": "0.0.17", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "jest-clear-cache": "jest --clearCache", @@ -41,7 +41,7 @@ "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", "@serverless-stack/aws-cdk": "1.55.0-rc.1", - "@serverless-stack/resources": "^0.0.16", + "@serverless-stack/resources": "^0.0.17", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 95b7b09044..59fe510a71 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.0.16", + "version": "0.0.17", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index b24acc6c20..4f6d8bcca7 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.16", + "version": "0.0.17", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 226d443e72a99eaa160e61419fbe5d4a08324ee9 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 24 Aug 2020 21:14:30 -0400 Subject: [PATCH 055/481] Adding test for mismatch cdk versions --- packages/cli/scripts/config/cdkHelpers.js | 19 +- packages/cli/scripts/wrapper/run.js | 11 +- .../mismatched-cdk-versions/lib/cognito.js | 101 ++++ .../mismatched-cdk-versions/lib/dynamodb.js | 29 ++ .../test/mismatched-cdk-versions/lib/index.js | 12 + .../test/mismatched-cdk-versions/lib/s3.js | 33 ++ .../mismatched-cdk-versions.test.js | 18 + .../test/mismatched-cdk-versions/package.json | 20 + .../cli/test/mismatched-cdk-versions/sst.json | 6 + .../test/mismatched-cdk-versions/yarn.lock | 475 ++++++++++++++++++ 10 files changed, 712 insertions(+), 12 deletions(-) create mode 100644 packages/cli/test/mismatched-cdk-versions/lib/cognito.js create mode 100644 packages/cli/test/mismatched-cdk-versions/lib/dynamodb.js create mode 100644 packages/cli/test/mismatched-cdk-versions/lib/index.js create mode 100644 packages/cli/test/mismatched-cdk-versions/lib/s3.js create mode 100644 packages/cli/test/mismatched-cdk-versions/mismatched-cdk-versions.test.js create mode 100644 packages/cli/test/mismatched-cdk-versions/package.json create mode 100644 packages/cli/test/mismatched-cdk-versions/sst.json create mode 100644 packages/cli/test/mismatched-cdk-versions/yarn.lock diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index da3775eef4..c8cf45ac22 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -56,9 +56,15 @@ function formatDepsForInstall(depsList, version) { * Check if the user's app is using the exact version of the currently supported * AWS CDK version that Serverless Stack is using. If not, then show an error * message with update instructions. - * More here https://github.com/aws/aws-cdk/issues/542#issuecomment-449694450 + * More here + * - For TS: https://github.com/aws/aws-cdk/issues/542#issuecomment-449694450 + * - For JS: https://github.com/aws/aws-cdk/issues/9578#issuecomment-672884639 */ -function runCdkVersionMatch(usingYarn) { +function runCdkVersionMatch(usingYarn, isTs) { + const helpUrl = isTs + ? "https://github.com/aws/aws-cdk/issues/542#issuecomment-449694450" + : "https://github.com/aws/aws-cdk/issues/9578#issuecomment-672884639"; + const sstCdkVersion = require(path.join(paths.ownPath, "package.json")) .dependencies["@serverless-stack/aws-cdk"]; const cdkVersion = sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; @@ -100,9 +106,8 @@ function runCdkVersionMatch(usingYarn) { : ` npm install ${depString} --save-dev --save-exact` ); } - logger.log( - "\nLearn more about it here — https://github.com/aws/aws-cdk/issues/542#issuecomment-449694450\n" - ); + + logger.log(`\nLearn more about it here — ${helpUrl}\n`); } function lint() { @@ -134,12 +139,12 @@ function transpile(usingYarn) { let args; let opts = { stdio: "inherit" }; + runCdkVersionMatch(usingYarn, isTs); + if (isTs) { logger.log(chalk.grey("Detected tsconfig.json")); logger.log(chalk.grey("Compiling TypeScript")); - runCdkVersionMatch(usingYarn); - cmd = getCmdPath("tsc"); args = ["--outDir", paths.appBuildPath, "--rootDir", paths.appLibPath]; opts = { stdio: "inherit", cwd: paths.appPath }; diff --git a/packages/cli/scripts/wrapper/run.js b/packages/cli/scripts/wrapper/run.js index b1cd7fd78c..919e16a241 100644 --- a/packages/cli/scripts/wrapper/run.js +++ b/packages/cli/scripts/wrapper/run.js @@ -10,14 +10,15 @@ process.on("uncaughtException", function (err) { }); const fs = require("fs"); +const path = require("path"); const sst = require("@serverless-stack/resources"); const config = require("./sst-merged.json"); -let handler; - function handlerNotFound(importFailed) { - const extCopy = fs.existsSync("../tsconfig.json") ? "ts" : "js"; + const extCopy = fs.existsSync(path.join(__dirname, "../", "tsconfig.json")) + ? "ts" + : "js"; console.error( importFailed ? `\nCannot find app handler. Make sure to add a "lib/index.${extCopy}" file.\n` @@ -27,11 +28,11 @@ function handlerNotFound(importFailed) { } // Check first and throw an error -if (!fs.existsSync("./index.js")) { +if (!fs.existsSync(path.join(__dirname, "index.js"))) { handlerNotFound(true); } -handler = require("./"); +const handler = require("./"); if (!handler.default) { handlerNotFound(false); diff --git a/packages/cli/test/mismatched-cdk-versions/lib/cognito.js b/packages/cli/test/mismatched-cdk-versions/lib/cognito.js new file mode 100644 index 0000000000..035fa04b81 --- /dev/null +++ b/packages/cli/test/mismatched-cdk-versions/lib/cognito.js @@ -0,0 +1,101 @@ +import { CfnOutput } from "@aws-cdk/core"; +import * as iam from "@aws-cdk/aws-iam"; +import * as cognito from "@aws-cdk/aws-cognito"; +import * as sst from "@serverless-stack/resources"; + +export default class CognitoStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + const { bucketArn } = props; + + const stage = this.node.root.stage; + const service = this.node.root.name; + + const userPool = new cognito.UserPool(this, "userPool", { + selfSignUpEnabled: true, + autoVerify: { email: true }, + signInAliases: { email: true }, // Set email as an alias + }); + + const userPoolClient = new cognito.UserPoolClient(this, "userPoolClient", { + userPool, + authFlows: { adminUserPassword: false }, + generateSecret: false, + }); + + const identityPool = new cognito.CfnIdentityPool(this, "identityPool", { + allowUnauthenticatedIdentities: false, // Don't allow unathenticated users + cognitoIdentityProviders: [ + { + clientId: userPoolClient.userPoolClientId, + providerName: userPool.userPoolProviderName, + }, + ], + }); + + // IAM role used for authenticated users + const authenticatedRole = new iam.Role( + this, + "cognitoDefaultAuthenticatedRole", + { + assumedBy: new iam.FederatedPrincipal( + "cognito-identity.amazonaws.com", + { + StringEquals: { + "cognito-identity.amazonaws.com:aud": identityPool.ref, + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "authenticated", + }, + }, + "sts:AssumeRoleWithWebIdentity" + ), + } + ); + authenticatedRole.addToPolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: [ + "mobileanalytics:PutEvents", + "cognito-sync:*", + "cognito-identity:*", + ], + resources: ["*"], + }) + ); + authenticatedRole.addToPolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ["s3:*"], + resources: [ + bucketArn + "/private/${cognito-identity.amazonaws.com:sub}/*", + ], + }) + ); + + new cognito.CfnIdentityPoolRoleAttachment( + this, + "identityPoolRoleAttachment", + { + identityPoolId: identityPool.ref, + roles: { authenticated: authenticatedRole.roleArn }, + } + ); + + // Export values + new CfnOutput(this, "userPoolId", { + value: userPool.userPoolId, + }); + new CfnOutput(this, "userPoolClientId", { + value: userPoolClient.userPoolClientId, + }); + new CfnOutput(this, "identityPoolId", { + value: identityPool.ref, + }); + new CfnOutput(this, "authenticatedRoleName", { + exportName: `ExtCognitoAuthRole-${stage}-${service}`, + value: authenticatedRole.roleName, + }); + } +} diff --git a/packages/cli/test/mismatched-cdk-versions/lib/dynamodb.js b/packages/cli/test/mismatched-cdk-versions/lib/dynamodb.js new file mode 100644 index 0000000000..c7180b9915 --- /dev/null +++ b/packages/cli/test/mismatched-cdk-versions/lib/dynamodb.js @@ -0,0 +1,29 @@ +import { CfnOutput } from "@aws-cdk/core"; +import * as dynamodb from "@aws-cdk/aws-dynamodb"; +import * as sst from "@serverless-stack/resources"; + +export default class DynamoDBStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + const stage = this.node.root.stage; + const service = this.node.root.name; + + const stageTableName = this.node.root.logicalPrefixedName("notes"); + const table = new dynamodb.Table(this, stageTableName, { + partitionKey: { name: "userId", type: dynamodb.AttributeType.STRING }, + sortKey: { name: "noteId", type: dynamodb.AttributeType.STRING }, + billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, + }); + + // Export values + new CfnOutput(this, "notesTableName", { + exportName: `${stage}-${service}-ExtNotesTableName`, + value: table.tableName, + }); + new CfnOutput(this, "notesTableArn", { + exportName: `${stage}-${service}-ExtNotesTableArn`, + value: table.tableArn, + }); + } +} diff --git a/packages/cli/test/mismatched-cdk-versions/lib/index.js b/packages/cli/test/mismatched-cdk-versions/lib/index.js new file mode 100644 index 0000000000..eec7c0a6f7 --- /dev/null +++ b/packages/cli/test/mismatched-cdk-versions/lib/index.js @@ -0,0 +1,12 @@ +import S3Stack from "./s3"; +import CognitoStack from "./cognito"; +import DynamoDBStack from "./dynamodb"; + +// Add stacks +export default function main(app) { + new DynamoDBStack(app, "dynamodb"); + + const s3 = new S3Stack(app, "s3"); + + new CognitoStack(app, "cognito", { bucketArn: s3.bucket.bucketArn }); +} diff --git a/packages/cli/test/mismatched-cdk-versions/lib/s3.js b/packages/cli/test/mismatched-cdk-versions/lib/s3.js new file mode 100644 index 0000000000..709adf1252 --- /dev/null +++ b/packages/cli/test/mismatched-cdk-versions/lib/s3.js @@ -0,0 +1,33 @@ +import * as cdk from "@aws-cdk/core"; +import * as s3 from "@aws-cdk/aws-s3"; +import * as sst from "@serverless-stack/resources"; + +export default class S3Stack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + const stage = this.node.root.stage; + const service = this.node.root.name; + + this.bucket = new s3.Bucket(this, "uploads", { + cors: [ + { + allowedMethods: ["GET", "PUT", "POST", "DELETE", "HEAD"], + allowedOrigins: ["*"], + allowedHeaders: ["*"], + maxAge: 3000, + }, + ], + }); + + // Export values + new cdk.CfnOutput(this, "uploadsBucketArn", { + exportName: `${stage}-${service}-ExtAttachmentsBucketArn`, + value: this.bucket.bucketArn, + }); + new cdk.CfnOutput(this, "uploadsBucketName", { + exportName: `${stage}-${service}-ExtAttachmentsBucket`, + value: this.bucket.bucketName, + }); + } +} diff --git a/packages/cli/test/mismatched-cdk-versions/mismatched-cdk-versions.test.js b/packages/cli/test/mismatched-cdk-versions/mismatched-cdk-versions.test.js new file mode 100644 index 0000000000..262374d9a9 --- /dev/null +++ b/packages/cli/test/mismatched-cdk-versions/mismatched-cdk-versions.test.js @@ -0,0 +1,18 @@ +const { runBuildCommand, clearBuildOutput } = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("base", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).toMatch(/Mismatched versions of AWS CDK packages/); +}); diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json new file mode 100644 index 0000000000..1a99beb05e --- /dev/null +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -0,0 +1,20 @@ +{ + "name": "mismatched-cdk-versions", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "../../bin/scripts.js build" + }, + "keywords": [], + "author": "", + "dependencies": { + "@serverless-stack/resources": "../../../resources", + "@aws-cdk/aws-cognito": "^1.55.0", + "@aws-cdk/aws-dynamodb": "^1.55.0", + "@aws-cdk/aws-iam": "1.57.0", + "@aws-cdk/aws-s3": "^1.57.0", + "@aws-cdk/core": "1.56.0" + }, + "license": "ISC" +} diff --git a/packages/cli/test/mismatched-cdk-versions/sst.json b/packages/cli/test/mismatched-cdk-versions/sst.json new file mode 100644 index 0000000000..30190cc1ce --- /dev/null +++ b/packages/cli/test/mismatched-cdk-versions/sst.json @@ -0,0 +1,6 @@ +{ + "type": "@serverless-stack/resources", + "name": "notes", + "stage": "prod", + "region": "us-west-1" +} diff --git a/packages/cli/test/mismatched-cdk-versions/yarn.lock b/packages/cli/test/mismatched-cdk-versions/yarn.lock new file mode 100644 index 0000000000..ace342f4a2 --- /dev/null +++ b/packages/cli/test/mismatched-cdk-versions/yarn.lock @@ -0,0 +1,475 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aws-cdk/assets@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.60.0.tgz#c9f315f3a7e6657adb2630764a0b6689c6ea8c23" + integrity sha512-QDs+KZ0a9A4eQiOH894W/nGW3A0vxE63hMcQbWCJx6BGEzF8mRlYhovrEWAc8T1hfO7Ze0ZOvrcznpjnxk650g== + dependencies: + "@aws-cdk/core" "1.60.0" + "@aws-cdk/cx-api" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-applicationautoscaling@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.60.0.tgz#a84974de862ea8e6a20fa2fb7b3b462c8066886e" + integrity sha512-DoTp7oW286zmuEAvvtT/XcPYc8xJe71v7EiSxjH2lbpnnp1ZuGWqqK6ZJHQuAKkfNh0ggni1AkAb/YUo4w4IFQ== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.60.0" + "@aws-cdk/aws-cloudwatch" "1.60.0" + "@aws-cdk/aws-iam" "1.60.0" + "@aws-cdk/core" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-autoscaling-common@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.60.0.tgz#9eb27ffb9b1c311168d66fd0d38d8e10938974fd" + integrity sha512-vkXIvJ4zmOkd39Trm1C07YdWL+GBRDSeAAqoc4rWbw/yAKEhvpqx/oNW4rRqABA1lC3490R/mSje7Dr8Z8y5Dw== + dependencies: + "@aws-cdk/aws-iam" "1.60.0" + "@aws-cdk/core" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-certificatemanager@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.60.0.tgz#6b179239578b36e68462f9a8936cd167bf043b96" + integrity sha512-kz1lbkYmWP/fmpPgYlODMseJUbSLlxtQJPlz5BN4lMkAcMpAsaPSLbU5/pO/XSqhPYl9vZb3NjCbNVdfQQaGhg== + dependencies: + "@aws-cdk/aws-iam" "1.60.0" + "@aws-cdk/aws-lambda" "1.60.0" + "@aws-cdk/aws-route53" "1.60.0" + "@aws-cdk/core" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-cloudformation@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.60.0.tgz#af74e5ebd710e750011e4926d3edd3463bc8c859" + integrity sha512-po+pj3LwxDEA5ReYLeNQ0UU4cXLKSguknL5w/9m2n1sip90XoxMI0a84q1NDs1cArEWnhqYY0rkfUydZmbCXqg== + dependencies: + "@aws-cdk/aws-iam" "1.60.0" + "@aws-cdk/aws-lambda" "1.60.0" + "@aws-cdk/aws-s3" "1.60.0" + "@aws-cdk/aws-sns" "1.60.0" + "@aws-cdk/core" "1.60.0" + "@aws-cdk/cx-api" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-cloudwatch@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.60.0.tgz#eb833c2e0eb4531070c138bd5ed562f8f105a538" + integrity sha512-12LK2Q/BR4HMwm2vBQHjQRyZT00FWGu9TO0wutJ78BYooqM4YpSdkRiNv74HRtG6RLPo9QmUFrUE5IFYpN0O2w== + dependencies: + "@aws-cdk/aws-iam" "1.60.0" + "@aws-cdk/core" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-codeguruprofiler@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.60.0.tgz#cf78a02c2eaa6dffbb06a7ab8f5519c9da5e0366" + integrity sha512-COcSgEUiz0wTaL9cCzxMiCIDbtA6AoFZjB2xVJXwm6YvkK4M2cUfiemTtSSsxGChHEkydHYdS0vZYqNesznOhQ== + dependencies: + "@aws-cdk/aws-iam" "1.60.0" + "@aws-cdk/core" "1.60.0" + +"@aws-cdk/aws-cognito@^1.55.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.60.0.tgz#0ea41f3fbce413874223e90266013ae34dcce667" + integrity sha512-NFnKnt8NzILvqPH4blOlnZMc3Qn4Gx1REF+Z3SHdoly/GHKRQ553nWGfCdGXhR+N3wgEb+UreaFnb19lZ794KQ== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.60.0" + "@aws-cdk/aws-iam" "1.60.0" + "@aws-cdk/aws-lambda" "1.60.0" + "@aws-cdk/core" "1.60.0" + "@aws-cdk/custom-resources" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-dynamodb@^1.55.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.60.0.tgz#a7ab4a5482f69c48c2651c2d758711e609ba4cd8" + integrity sha512-ya3SGRk6gnVtZmReOdsJHJ+KlR1hz8OTIBL2RZ+1NhFqBJhVXYKVllJXc49iP2w6LsQuXcdRxbutrXqTk9uXyg== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.60.0" + "@aws-cdk/aws-cloudwatch" "1.60.0" + "@aws-cdk/aws-iam" "1.60.0" + "@aws-cdk/aws-kms" "1.60.0" + "@aws-cdk/aws-lambda" "1.60.0" + "@aws-cdk/core" "1.60.0" + "@aws-cdk/custom-resources" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-ec2@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.60.0.tgz#0dec15b2c81041c3ff7c6bcc102549a3286cfcc2" + integrity sha512-J1a9ffMLBBmUQcNVXFC14T7PU+n70WxGG3KFbapqretaAhPAtDh3bd/rCaLCmwj216f1t5XpH3fpeS7LGGqKuQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.60.0" + "@aws-cdk/aws-iam" "1.60.0" + "@aws-cdk/aws-kms" "1.60.0" + "@aws-cdk/aws-logs" "1.60.0" + "@aws-cdk/aws-s3" "1.60.0" + "@aws-cdk/aws-s3-assets" "1.60.0" + "@aws-cdk/aws-ssm" "1.60.0" + "@aws-cdk/cloud-assembly-schema" "1.60.0" + "@aws-cdk/core" "1.60.0" + "@aws-cdk/cx-api" "1.60.0" + "@aws-cdk/region-info" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-efs@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.60.0.tgz#017f710bdabb4bbad3c334a8bf469f48c7db57b1" + integrity sha512-+WZ51FfJAng3buDMFa5PnGIKPuaSdZ08QAIryZUiDMSo0bKw7fZk40++pk18e7CE1vHnS6NI1nR6wINwXyfNGA== + dependencies: + "@aws-cdk/aws-ec2" "1.60.0" + "@aws-cdk/aws-kms" "1.60.0" + "@aws-cdk/cloud-assembly-schema" "1.60.0" + "@aws-cdk/core" "1.60.0" + "@aws-cdk/cx-api" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-events@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.60.0.tgz#d22d7def2b4994498e84b8efa229397a92862c57" + integrity sha512-UxXrGvuPv3gvlogg8kHFCyhvZuKLFrgYKoAzQhPZAYIl8ojVQiNn67LLdlnZ5R7Th8h+BJRRRKZmEb/R1fqYjQ== + dependencies: + "@aws-cdk/aws-iam" "1.60.0" + "@aws-cdk/core" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-iam@1.57.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.57.0.tgz#d6c8e901fa81e3c872d209bd46fd41e3f024d6b2" + integrity sha512-vOltgt7CDEZ9Zko5tBhxP6bwuOAJA5ev04w1rwAcDD8W4UGHnz+2D1b0eAHfLhsICVagwfNEG+KmDyyKzrzyFw== + dependencies: + "@aws-cdk/core" "1.57.0" + "@aws-cdk/region-info" "1.57.0" + constructs "^3.0.2" + +"@aws-cdk/aws-iam@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.60.0.tgz#e78a097010be0984e5596094c871f547b3f50b78" + integrity sha512-p4Jm8Ws7ENuFduypLku/eKViWWBk7EXMXYUizqsI2/qIurwfkPJFrUEOBJiG4etr+5tRweTWM8KdK7jC823Ujw== + dependencies: + "@aws-cdk/core" "1.60.0" + "@aws-cdk/region-info" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-kms@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.60.0.tgz#a599e39555346d444ff4dc7c038aab01991fced0" + integrity sha512-BDkcFMya1XjAvfW8D6wFXtSxHrVC1rYwrj8QcY6wKpx6m/QD7WOUOhtoZCsx/tC8lds+aS04luKJp6hgXfn4eA== + dependencies: + "@aws-cdk/aws-iam" "1.60.0" + "@aws-cdk/core" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-lambda@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.60.0.tgz#f9015f2c06328ee52634c202a38a945c6e7e4667" + integrity sha512-xI5kG6zMWyYTMVagEzfqBCNe1DNpKegdjHoWFdnBVnxubI63iOARxTQQLuMRE4bZFR3gDprVgGh9auDO3RZ2jw== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.60.0" + "@aws-cdk/aws-cloudwatch" "1.60.0" + "@aws-cdk/aws-codeguruprofiler" "1.60.0" + "@aws-cdk/aws-ec2" "1.60.0" + "@aws-cdk/aws-efs" "1.60.0" + "@aws-cdk/aws-events" "1.60.0" + "@aws-cdk/aws-iam" "1.60.0" + "@aws-cdk/aws-logs" "1.60.0" + "@aws-cdk/aws-s3" "1.60.0" + "@aws-cdk/aws-s3-assets" "1.60.0" + "@aws-cdk/aws-sqs" "1.60.0" + "@aws-cdk/core" "1.60.0" + "@aws-cdk/cx-api" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-logs@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.60.0.tgz#abc367098f3b8378ce4da89c83be6cd847d5564f" + integrity sha512-cMtMlq2SLc1vJILrgoUheCotQeHkJPRajz/lP2vvY/vL1Bu5RJsJfNiOO+8ZFN3wNOK+foM1h+LV5dAyl9n7Bw== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.60.0" + "@aws-cdk/aws-iam" "1.60.0" + "@aws-cdk/core" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-route53@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.60.0.tgz#946349cbdd524a306788d2b80eab531e37453b93" + integrity sha512-WBUOfUAiLQR0N9f2fXBmYjEtHN79mvLqXmN2i0rifxs8hEn4OXWXHYwtOqU1nAziF127D3urYgOPlZZ99PjJ4Q== + dependencies: + "@aws-cdk/aws-ec2" "1.60.0" + "@aws-cdk/aws-logs" "1.60.0" + "@aws-cdk/cloud-assembly-schema" "1.60.0" + "@aws-cdk/core" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-s3-assets@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.60.0.tgz#6866c182abf7f0d26873b74a680e3355dabc82cf" + integrity sha512-rBxJqwjWBuhPrV7svY+10qcBS8DJR+IGATbn7viezSlEVTVyPeHCOVJfMvNPhsum9QMZVQE0cbQEGT+Mr8B9Cw== + dependencies: + "@aws-cdk/assets" "1.60.0" + "@aws-cdk/aws-iam" "1.60.0" + "@aws-cdk/aws-kms" "1.60.0" + "@aws-cdk/aws-s3" "1.60.0" + "@aws-cdk/core" "1.60.0" + "@aws-cdk/cx-api" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-s3@1.60.0", "@aws-cdk/aws-s3@^1.57.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.60.0.tgz#ed12ace237a2cb8c81239d53f5fb4785076203a4" + integrity sha512-Kl+Lfe+5+5m+PHoE06xNs9rAF0Cy8i4ZI9NBfxnKxLb+5MEiVIwHWK91k8ofsTH7T/s/1Pmrw7TwwipCKhCAvA== + dependencies: + "@aws-cdk/aws-events" "1.60.0" + "@aws-cdk/aws-iam" "1.60.0" + "@aws-cdk/aws-kms" "1.60.0" + "@aws-cdk/core" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-sns@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.60.0.tgz#5e98af08a7123c8d5a02ed9ce661352b196e9085" + integrity sha512-N37Fo8WQTkv9JAmiZeI5gPSuaL1nftNRXOjX6i+WRgx/wpWdnAzdMcRnGy/ValzgVyfk8lF3UkgZWORGHhlHsA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.60.0" + "@aws-cdk/aws-events" "1.60.0" + "@aws-cdk/aws-iam" "1.60.0" + "@aws-cdk/aws-kms" "1.60.0" + "@aws-cdk/aws-sqs" "1.60.0" + "@aws-cdk/core" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-sqs@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.60.0.tgz#95d66315febdd313ca1fa6832bac04770e27a765" + integrity sha512-g9FpZ6xrxvSqhvd+QS283XrJwFdDnJMf20Z7Iyx24HTdkTK25sjbAZ5xgjZl57VlDtl1E+ITzbuAvv6jGQTAHQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.60.0" + "@aws-cdk/aws-iam" "1.60.0" + "@aws-cdk/aws-kms" "1.60.0" + "@aws-cdk/core" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/aws-ssm@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.60.0.tgz#90351b23c168099c60f7719531f79eb17c27bb5d" + integrity sha512-AbsyfASy8voakl1nBiJxmSPoTmOKsvWs7NuYb2P4/EzHs/Qo355zFkhPJf8AdSETYXlrISBUsptIVyBWeCxICw== + dependencies: + "@aws-cdk/aws-iam" "1.60.0" + "@aws-cdk/aws-kms" "1.60.0" + "@aws-cdk/cloud-assembly-schema" "1.60.0" + "@aws-cdk/core" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/cloud-assembly-schema@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" + integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/cloud-assembly-schema@1.56.0": + version "1.56.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.56.0.tgz#b2b3cb687ead39ab8cecfaac6a4bee14666d6abc" + integrity sha512-QLuUOoEzrTyiBbPue1QzMmMLjh6FjuD6dIPJ1O81jPpBuIYiAN7MXzXQ9+4gqM0UrnMpSzB8DW2joENDPtJgFg== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/cloud-assembly-schema@1.57.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.57.0.tgz#bf9c63cf3ca8cbf0f37886b43b12f5fab5c7c989" + integrity sha512-IJyV3pgMvpbaIVYpUkBGsxIWh+VK7TxuTbEyHfBra5+VgXLoFdSG2UO80b4v6ou+occRqUGbqAnc/VfYr1uuvw== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/cloud-assembly-schema@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.60.0.tgz#11eb4bb3b243aa8771f5cee9bda188112e696a50" + integrity sha512-FI0YB6h+SjxChfjnEpQfOYez1B01STDGhn4FQkZ0lbZuAkfW3DUbZYHzR8bTwKo/wgGt/vJ+MYrqxdMyLn62og== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/core@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" + integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/core@1.56.0": + version "1.56.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.56.0.tgz#499bf691a9937f5f5dfb2b83330fc3f9d9294662" + integrity sha512-MeImBUTbU8ipZAC6gYQHfJRXH+63XD1VBv9g1AO5GpERKHOZ58qiBroQOkVWD5/u+iasXJ7JSC9JKUBC/+2PlQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.56.0" + "@aws-cdk/cx-api" "1.56.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/core@1.57.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.57.0.tgz#44e19a18f05d0b0742e5d406474000ef2f6f5db9" + integrity sha512-NOE9u2tVwEF+EN5CYaoC34csBgKLA9rjCWCB6R64RPQ2MlhBFCvQxdG2ZO26nOOvH+yv/3zlylM7F546mfQMHg== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.57.0" + "@aws-cdk/cx-api" "1.57.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/core@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.60.0.tgz#d4c8a109bb52d9bd9ed3500a27cd2cc7a9217656" + integrity sha512-h6P5z6E/8ttINA9IqrFxXamHZraPj1NlCE83I5QHaWPACaVe+EJbvjU3dITDyK/+fGjmQ/1m4rFaNMyBd43mVg== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.60.0" + "@aws-cdk/cx-api" "1.60.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/custom-resources@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.60.0.tgz#295828b349e8402a6d7e36a9dd73f3cef990552d" + integrity sha512-qt2w7cOuADrkt8echZlNWVjvERcYW2862QoTvbUnTgllAuXDvYBavlYd53uoUrm20SCw+qFlK8CBMaf9Jn4IHA== + dependencies: + "@aws-cdk/aws-cloudformation" "1.60.0" + "@aws-cdk/aws-iam" "1.60.0" + "@aws-cdk/aws-lambda" "1.60.0" + "@aws-cdk/aws-logs" "1.60.0" + "@aws-cdk/aws-sns" "1.60.0" + "@aws-cdk/core" "1.60.0" + constructs "^3.0.2" + +"@aws-cdk/cx-api@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" + integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + semver "^7.2.2" + +"@aws-cdk/cx-api@1.56.0": + version "1.56.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.56.0.tgz#36bf05de73d26ecc69054855f238beaf0bf2a482" + integrity sha512-IuBmbz025AnuYAKv+ZOvnRV7Wwa/wdCiqiJ3BlVEqPsdvE4ZUMJTqLTY25ho5VT07o8Z/iQg7M6dRs9ccVC9Dw== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.56.0" + semver "^7.2.2" + +"@aws-cdk/cx-api@1.57.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.57.0.tgz#e6ad6936e1781b821317be60978fb20111cb4d16" + integrity sha512-h2qTTofE8cE1rSZB9ny+7AjjmxEdKoxhq+GsQebQ5NZkrN/Rbc+DL77S/GG53koPG4u/ZoA4UcdLz/JqiGgdPA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.57.0" + semver "^7.2.2" + +"@aws-cdk/cx-api@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.60.0.tgz#e9fbbeae6743eaa9f197c98d362802328943cfea" + integrity sha512-Lx1KOB4HowdlPiftkplgaCZWYPeOEeqZgCNxeo1lRa3ypDYkrpcwVsLgLIsWhph0Lb7qtmrMmubiwaE1VTiLwQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.60.0" + semver "^7.2.2" + +"@aws-cdk/region-info@1.57.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.57.0.tgz#ae45fcf82fe7c66348c8b7ecfbb738dfb08bde9d" + integrity sha512-U2V2f/PdD2VDGVwGGShb+7dqhmEEmShlOOdvDQvTmAg2SW6HwOt/rsz+va6EzvWV7fmxtFEfMiJVpnheZ1Vwyg== + +"@aws-cdk/region-info@1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.60.0.tgz#e5f337abcad54b3fbdddfed97233bee72f2e83c3" + integrity sha512-rz2HUVTM42wVXbx+T2nwT8WKSY9BFB+ThhdGAT81l1dsi/Vtne1Ql5AlnBRCWW4TXR6Nvt3DjGEsG4o6DZmsdw== + +"@serverless-stack/resources@../../../resources": + version "0.0.17" + dependencies: + "@aws-cdk/core" "1.55.0" + +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== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +constructs@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" + integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" + integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +semver@^7.2.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== From 03b3936f76a7fc9e222abffef6a106e5a5a35232 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 24 Aug 2020 21:15:05 -0400 Subject: [PATCH 056/481] v0.0.18 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index e635374408..e1b476bfbe 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.17" + "version": "0.0.18" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 87c5b1f72b..78eb5d3c55 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.0.17", + "version": "0.0.18", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "jest-clear-cache": "jest --clearCache", @@ -41,7 +41,7 @@ "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", "@serverless-stack/aws-cdk": "1.55.0-rc.1", - "@serverless-stack/resources": "^0.0.17", + "@serverless-stack/resources": "^0.0.18", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 59fe510a71..c6efcdda3c 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.0.17", + "version": "0.0.18", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 4f6d8bcca7..5cdc6d6304 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.17", + "version": "0.0.18", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From fdf015879c6f2a737cd06c3114e5647a825bbe05 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 25 Aug 2020 17:27:58 -0400 Subject: [PATCH 057/481] Running CDK commands from project root instead --- packages/cli/bin/scripts.js | 33 ++++++++++++-- packages/cli/package.json | 2 +- packages/cli/scripts/build.js | 5 +-- packages/cli/scripts/cdk.js | 14 +++--- packages/cli/scripts/config/cdkHelpers.js | 52 ++++++----------------- packages/cli/scripts/config/cdkOptions.js | 6 +++ packages/cli/scripts/deploy.js | 23 +++++----- packages/cli/scripts/remove.js | 4 +- packages/cli/scripts/wrapper/cdk.json | 7 --- packages/cli/test/base/cdk.context.json | 2 +- packages/cli/test/base/package.json | 3 +- packages/cli/test/base/sst.json | 2 +- yarn.lock | 8 ++-- 13 files changed, 77 insertions(+), 84 deletions(-) create mode 100644 packages/cli/scripts/config/cdkOptions.js delete mode 100644 packages/cli/scripts/wrapper/cdk.json diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index 284befd536..bb58e62875 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -19,9 +19,14 @@ const yargs = require("yargs"); const chalk = require("chalk"); const spawn = require("cross-spawn"); +const packageJson = require("../package.json"); const paths = require("../scripts/config/paths"); +const cdkOptions = require("../scripts/config/cdkOptions"); const { prepareCdk } = require("../scripts/config/cdkHelpers"); +const sstVersion = packageJson.version; +const cdkVersion = getCdkVersion(); + const args = process.argv.slice(2); const cmd = { @@ -43,12 +48,24 @@ const scriptIndex = args.findIndex((x) => x === "test"); const script = scriptIndex === -1 ? args[0] : args[scriptIndex]; const nodeArgs = scriptIndex > 0 ? args.slice(0, scriptIndex) : []; +function getCdkVersion() { + const sstCdkVersion = packageJson.dependencies["@serverless-stack/aws-cdk"]; + return sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; +} + function getCliInfo() { const usingYarn = fs.existsSync(path.join(paths.appPath, "yarn.lock")); return { + cdkVersion, yarn: usingYarn, npm: !usingYarn, + // Options that'll be passed into CDK + cdkOptions: { + ...cdkOptions, + verbose: argv.verbose ? 2 : 0, + noColor: argv.noColor || chalk.level === 0, + }, }; } @@ -72,6 +89,8 @@ function addOptions(currentCmd) { } const argv = yargs + .parserConfiguration({ "boolean-negation": false }) + .usage(`${cmd.s} `) .demandCommand(1) @@ -103,7 +122,7 @@ const argv = yargs ) .command(cmd.test, "Run your tests") - .command(cmd.cdk, "Access the AWS CDK CLI") + .command(`${cmd.cdk} [CMD]`, "Access the AWS CDK CLI") .example([ [`$0 ${cmd.build}`, "Build using defaults"], @@ -114,7 +133,11 @@ const argv = yargs ], ]) - .version() + .version( + true, + "Show the version of sst and cdk", + `sst: ${sstVersion}\ncdk: ${cdkVersion}` + ) .alias("version", "v") .help("help") .alias("help", "h") @@ -151,12 +174,14 @@ switch (script) { // Prepare app const config = prepareCdk(argv, cliInfo); - process.chdir(paths.appBuildPath); - Promise.resolve(internals[script](argv, config, cliInfo)); break; } case cmd.cdk: + const cliInfo = getCliInfo(); + + // Prepare app + const config = prepareCdk(argv, cliInfo); case cmd.test: { const result = spawn.sync( "node", diff --git a/packages/cli/package.json b/packages/cli/package.json index 78eb5d3c55..a0f7f26706 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -40,7 +40,7 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/aws-cdk": "1.55.0-rc.1", + "@serverless-stack/aws-cdk": "1.55.0-rc.9", "@serverless-stack/resources": "^0.0.18", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", diff --git a/packages/cli/scripts/build.js b/packages/cli/scripts/build.js index ed70107e34..f54379578f 100644 --- a/packages/cli/scripts/build.js +++ b/packages/cli/scripts/build.js @@ -28,9 +28,6 @@ function printResults(results, usingYarn) { module.exports = async function (argv, config, cliInfo) { logger.log(chalk.grey("Synthesizing CDK")); - const results = await synth(); + const results = await synth(cliInfo.cdkOptions); printResults(results, cliInfo.yarn); - - // Cache cdk.context.json - cacheCdkContext(); }; diff --git a/packages/cli/scripts/cdk.js b/packages/cli/scripts/cdk.js index 7d62bbf23b..7c619d8009 100644 --- a/packages/cli/scripts/cdk.js +++ b/packages/cli/scripts/cdk.js @@ -13,13 +13,11 @@ const path = require("path"); const spawn = require("cross-spawn"); const paths = require("./config/paths"); -const { prepareCdk } = require("./config/cdkHelpers"); - -// Prepare app -prepareCdk(); +const cdkOptions = require("./config/cdkOptions"); // CDK command -spawn.sync(path.join(paths.ownNodeModules, ".bin/cdk"), argv, { - stdio: "inherit", - cwd: paths.appBuildPath, -}); +spawn.sync( + path.join(paths.ownNodeModules, ".bin/cdk"), + [ "--app", cdkOptions.app ].concat(argv), + { stdio: "inherit" } +); diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index c8cf45ac22..1fcf57e695 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -60,14 +60,13 @@ function formatDepsForInstall(depsList, version) { * - For TS: https://github.com/aws/aws-cdk/issues/542#issuecomment-449694450 * - For JS: https://github.com/aws/aws-cdk/issues/9578#issuecomment-672884639 */ -function runCdkVersionMatch(usingYarn, isTs) { +function runCdkVersionMatch(cliInfo, isTs) { + const usingYarn = cliInfo.usingYarn; const helpUrl = isTs ? "https://github.com/aws/aws-cdk/issues/542#issuecomment-449694450" : "https://github.com/aws/aws-cdk/issues/9578#issuecomment-672884639"; - const sstCdkVersion = require(path.join(paths.ownPath, "package.json")) - .dependencies["@serverless-stack/aws-cdk"]; - const cdkVersion = sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; + const cdkVersion = cliInfo.cdkVersion; const appPackageJson = require(path.join(paths.appPath, "package.json")); const mismatchedDeps = filterMismatchedVersion( @@ -134,12 +133,12 @@ function lint() { } } -function transpile(usingYarn) { +function transpile(cliInfo) { let cmd; let args; let opts = { stdio: "inherit" }; - runCdkVersionMatch(usingYarn, isTs); + runCdkVersionMatch(cliInfo, isTs); if (isTs) { logger.log(chalk.grey("Detected tsconfig.json")); @@ -191,22 +190,6 @@ function copyWrapperFiles() { ); } -function copyCdkConfig() { - // Copy cdk.json - fs.copyFileSync( - path.join(paths.ownScriptsPath, "wrapper", "cdk.json"), - path.join(paths.appBuildPath, "cdk.json") - ); - // Copy cdk.context.json - const contextPath = path.join(paths.appPath, "cdk.context.json"); - if (fs.existsSync(contextPath)) { - fs.copyFileSync( - contextPath, - path.join(paths.appBuildPath, "cdk.context.json") - ); - } -} - function applyConfig(argv) { const configPath = path.join(paths.appPath, "sst.json"); @@ -268,23 +251,13 @@ function prepareCdk(argv, cliInfo) { copyConfigFiles(); copyWrapperFiles(); - copyCdkConfig(); lint(); - transpile(cliInfo.yarn); + transpile(cliInfo); return appliedConfig; } -function cacheCdkContext() { - logger.debug("Caching bootstrapped environment in context"); - - const contextPath = path.join(paths.appBuildPath, "cdk.context.json"); - if (fs.existsSync(contextPath)) { - fs.copyFileSync(contextPath, path.join(paths.appPath, "cdk.context.json")); - } -} - function handleCdkErrors(e) { if (isSubProcessError(e)) { exitWithMessage("There was an error synthesizing your app.", false); @@ -293,11 +266,11 @@ function handleCdkErrors(e) { } } -async function synth() { +async function synth(options) { let results; try { - results = await cdk.sstSynth(); + results = await cdk.sstSynth(options); } catch (e) { handleCdkErrors(e); } @@ -305,17 +278,17 @@ async function synth() { return results; } -async function deploy(stack) { +async function deploy(options) { try { - await cdk.sstDeploy(stack); + await cdk.sstDeploy(options); } catch (e) { handleCdkErrors(e); } } -async function destroy(stack) { +async function destroy(options) { try { - await cdk.sstDestroy(stack); + await cdk.sstDestroy(options); } catch (e) { handleCdkErrors(e); } @@ -326,5 +299,4 @@ module.exports = { deploy, destroy, prepareCdk, - cacheCdkContext, }; diff --git a/packages/cli/scripts/config/cdkOptions.js b/packages/cli/scripts/config/cdkOptions.js new file mode 100644 index 0000000000..a5e80d0ac6 --- /dev/null +++ b/packages/cli/scripts/config/cdkOptions.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = { + output: 'build/cdk.out', + app: 'node build/run.js', +}; diff --git a/packages/cli/scripts/deploy.js b/packages/cli/scripts/deploy.js index d9b77751ab..baa2b94c49 100644 --- a/packages/cli/scripts/deploy.js +++ b/packages/cli/scripts/deploy.js @@ -14,7 +14,7 @@ function envObjectToString(envObj) { } function hasBootstrappedEnv(env) { - const contextPath = path.join(paths.appBuildPath, "cdk.context.json"); + const contextPath = path.join(paths.appPath, "cdk.context.json"); const context = fs.existsSync(contextPath) ? require(contextPath) : {}; return context.bootstrappedEnvs @@ -23,7 +23,9 @@ function hasBootstrappedEnv(env) { } function cacheBootstrap(env) { - const contextPath = path.join(paths.appBuildPath, "cdk.context.json"); + logger.debug("Caching bootstrapped environment in cdk.context.json"); + + const contextPath = path.join(paths.appPath, "cdk.context.json"); const context = fs.existsSync(contextPath) ? require(contextPath) : {}; context.bootstrappedEnvs = context.bootstrappedEnvs || {}; @@ -32,10 +34,10 @@ function cacheBootstrap(env) { fs.writeFileSync(contextPath, JSON.stringify(context, null, 2)); } -async function checkAndRunBootstrap(config) { +async function checkAndRunBootstrap(config, cdkOptions) { logger.log(chalk.grey("Loading environment")); - const envResults = await sstEnv(); + const envResults = await sstEnv(cdkOptions); if (!envResults.environment.account) { throw new Error( @@ -55,17 +57,16 @@ async function checkAndRunBootstrap(config) { logger.log(chalk.grey("New environment detected")); - const bsCall = await sstBootstrap(); + const bsCall = await sstBootstrap(cdkOptions); // Cache Bootstrap results cacheBootstrap(bsCall.environment.name); } -module.exports = async function (argv, config) { - await checkAndRunBootstrap(config); +module.exports = async function (argv, config, cliInfo) { + const cdkOptions = cliInfo.cdkOptions; - logger.log(chalk.grey("Deploying " + (argv.stack ? argv.stack : "stacks"))); - await deploy(argv.stack); + await checkAndRunBootstrap(config, cdkOptions); - // Cache cdk.context.json - cacheCdkContext(); + logger.log(chalk.grey("Deploying " + (argv.stack ? argv.stack : "stacks"))); + await deploy({ ...cdkOptions, stackName: argv.stack }); }; diff --git a/packages/cli/scripts/remove.js b/packages/cli/scripts/remove.js index 7817c0e898..222cfa566f 100644 --- a/packages/cli/scripts/remove.js +++ b/packages/cli/scripts/remove.js @@ -5,7 +5,7 @@ const chalk = require("chalk"); const logger = require("./util/logger"); const { destroy } = require("./config/cdkHelpers"); -module.exports = async function (argv) { +module.exports = async function (argv, config, cliInfo) { logger.log(chalk.grey("Removing " + (argv.stack ? argv.stack : "stacks"))); - await destroy(argv.stack); + await destroy({ ...cliInfo.cdkOptions, stackName: argv.stack }); }; diff --git a/packages/cli/scripts/wrapper/cdk.json b/packages/cli/scripts/wrapper/cdk.json deleted file mode 100644 index 537dd83da9..0000000000 --- a/packages/cli/scripts/wrapper/cdk.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "app": "node run.js", - "context": { - "@aws-cdk/core:enableStackNameDuplicates": "true", - "aws-cdk:enableDiffNoFail": "true" - } -} diff --git a/packages/cli/test/base/cdk.context.json b/packages/cli/test/base/cdk.context.json index ceb5f0afc5..391c9f9a49 100644 --- a/packages/cli/test/base/cdk.context.json +++ b/packages/cli/test/base/cdk.context.json @@ -2,4 +2,4 @@ "bootstrappedEnvs": { "aws://087220554750/us-west-1": true } -} +} \ No newline at end of file diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index 3ca89f81dd..6c33175093 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -6,7 +6,8 @@ "scripts": { "build": "../../bin/scripts.js build", "remove": "../../bin/scripts.js remove", - "deploy": "../../bin/scripts.js deploy" + "deploy": "../../bin/scripts.js deploy", + "cdk": "../../bin/scripts.js cdk" }, "keywords": [], "author": "", diff --git a/packages/cli/test/base/sst.json b/packages/cli/test/base/sst.json index 30190cc1ce..3e7b463755 100644 --- a/packages/cli/test/base/sst.json +++ b/packages/cli/test/base/sst.json @@ -1,6 +1,6 @@ { "type": "@serverless-stack/resources", - "name": "notes", + "name": "cdknotes", "stage": "prod", "region": "us-west-1" } diff --git a/yarn.lock b/yarn.lock index 371db4b616..052d95cce9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2018,10 +2018,10 @@ dependencies: "@types/node" ">= 8" -"@serverless-stack/aws-cdk@1.55.0-rc.1": - version "1.55.0-rc.1" - resolved "https://registry.yarnpkg.com/@serverless-stack/aws-cdk/-/aws-cdk-1.55.0-rc.1.tgz#127e996425e08d6b3823237ee5d2f221f26445a6" - integrity sha512-OvtSB05Thi4wILSITeUdFflkGBBxZOQzqM71BnmzohXnhUDCgH38LEhIyIXZ2Fh8ueZOBJGaUjPjBLr2EL+jWw== +"@serverless-stack/aws-cdk@1.55.0-rc.9": + version "1.55.0-rc.9" + resolved "https://registry.yarnpkg.com/@serverless-stack/aws-cdk/-/aws-cdk-1.55.0-rc.9.tgz#1a17d95b8e74e9354fed7f7c36501761166a65eb" + integrity sha512-sZsc2n7A28RBqpJI13XWVqwNCHA2TWigxQJb22vnFmqam8MbXV9m2ZCC2IKilNpLso4dd0lJ+Dz9A0kbaMhQZw== dependencies: "@aws-cdk/cloud-assembly-schema" "1.55.0" "@aws-cdk/cloudformation-diff" "1.55.0" From b0d732d1e522c37bba23f8c31c87bdee7f6b3886 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 25 Aug 2020 17:56:55 -0400 Subject: [PATCH 058/481] Fixing running internal cdk commands --- packages/cli/bin/scripts.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index bb58e62875..783e879007 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -122,7 +122,7 @@ const argv = yargs ) .command(cmd.test, "Run your tests") - .command(`${cmd.cdk} [CMD]`, "Access the AWS CDK CLI") + .command(cmd.cdk, "Access the AWS CDK CLI") .example([ [`$0 ${cmd.build}`, "Build using defaults"], @@ -143,7 +143,6 @@ const argv = yargs .alias("help", "h") .epilogue("For more information, visit www.serverless-stack.com") - .strictCommands(true) .wrap(yargs.terminalWidth()) .fail((msg, err) => { From 409f15a5787964c403d0122441e403f472539e91 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 25 Aug 2020 17:57:24 -0400 Subject: [PATCH 059/481] v0.0.19 --- lerna.json | 6 ++++-- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lerna.json b/lerna.json index e1b476bfbe..0b83e6f229 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,8 @@ { - "packages": ["packages/*"], + "packages": [ + "packages/*" + ], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.18" + "version": "0.0.19" } diff --git a/packages/cli/package.json b/packages/cli/package.json index a0f7f26706..f55307a46f 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.0.18", + "version": "0.0.19", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "jest-clear-cache": "jest --clearCache", @@ -41,7 +41,7 @@ "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", "@serverless-stack/aws-cdk": "1.55.0-rc.9", - "@serverless-stack/resources": "^0.0.18", + "@serverless-stack/resources": "^0.0.19", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index c6efcdda3c..f5b41e771d 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.0.18", + "version": "0.0.19", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 5cdc6d6304..7861cc8457 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.18", + "version": "0.0.19", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 230e0f472aa17f75be45ec460bd91d4733e83a26 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 26 Aug 2020 16:38:25 -0400 Subject: [PATCH 060/481] Update README.md --- packages/resources/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/resources/README.md b/packages/resources/README.md index 65e4f33755..48a46f43f9 100644 --- a/packages/resources/README.md +++ b/packages/resources/README.md @@ -1 +1,3 @@ -# @serverless-stack/resources [![npm](https://img.shields.io/npm/v/@serverless-stack/resources.svg)](https://www.npmjs.com/package/@serverless-stack/resources) +# @serverless-stack/resources ![npm (scoped)](https://img.shields.io/npm/v/@serverless-stack/resources?style=for-the-badge) + + From 2200f4afee1273d2f92d976908c9fd48958a3f3b Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 26 Aug 2020 16:39:19 -0400 Subject: [PATCH 061/481] Update README.md --- packages/resources/README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/resources/README.md b/packages/resources/README.md index 48a46f43f9..6557cd419f 100644 --- a/packages/resources/README.md +++ b/packages/resources/README.md @@ -1,3 +1 @@ -# @serverless-stack/resources ![npm (scoped)](https://img.shields.io/npm/v/@serverless-stack/resources?style=for-the-badge) - - +# @serverless-stack/resources From 9d4695bec490cbf064dacd8ae31704d0e9c2daeb Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 26 Aug 2020 16:39:35 -0400 Subject: [PATCH 062/481] Update README.md --- packages/create-serverless-stack/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/create-serverless-stack/README.md b/packages/create-serverless-stack/README.md index 071c1e54e1..69d99c9e8c 100644 --- a/packages/create-serverless-stack/README.md +++ b/packages/create-serverless-stack/README.md @@ -1 +1 @@ -# create-serverless-stack [![npm](https://img.shields.io/npm/v/create-serverless-stack.svg)](https://www.npmjs.com/package/create-serverless-stack) +# create-serverless-stack From 78adc8c7774b52f5b7ae8229d50805ecfa6ac0c5 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 26 Aug 2020 16:39:49 -0400 Subject: [PATCH 063/481] Update README.md --- packages/cli/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/README.md b/packages/cli/README.md index 8dccc77404..b23fbd9262 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -1 +1 @@ -# @serverless-stack/cli [![npm](https://img.shields.io/npm/v/@serverless-stack/cli.svg)](https://www.npmjs.com/package/@serverless-stack/cli) +# @serverless-stack/cli From 7e98b6259096b26c8f6289c9605fd3dbe2c8d92f Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 26 Aug 2020 21:11:14 -0400 Subject: [PATCH 064/481] Fixing args parsing and lint errors --- packages/cli/bin/scripts.js | 24 +++++++++++------------ packages/cli/scripts/build.js | 2 +- packages/cli/scripts/config/cdkHelpers.js | 4 ++-- packages/cli/scripts/deploy.js | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index 783e879007..0737f2bb2b 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -29,6 +29,9 @@ const cdkVersion = getCdkVersion(); const args = process.argv.slice(2); +const script = args[0]; +const scriptArgs = args.slice(1); + const cmd = { s: "sst", cdk: "cdk", @@ -44,10 +47,6 @@ const internals = { [cmd.remove]: require("../scripts/remove"), }; -const scriptIndex = args.findIndex((x) => x === "test"); -const script = scriptIndex === -1 ? args[0] : args[scriptIndex]; -const nodeArgs = scriptIndex > 0 ? args.slice(0, scriptIndex) : []; - function getCdkVersion() { const sstCdkVersion = packageJson.dependencies["@serverless-stack/aws-cdk"]; return sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; @@ -122,7 +121,7 @@ const argv = yargs ) .command(cmd.test, "Run your tests") - .command(cmd.cdk, "Access the AWS CDK CLI") + .command(cmd.cdk, "Access the forked AWS CDK CLI") .example([ [`$0 ${cmd.build}`, "Build using defaults"], @@ -177,16 +176,17 @@ switch (script) { break; } case cmd.cdk: - const cliInfo = getCliInfo(); - - // Prepare app - const config = prepareCdk(argv, cliInfo); case cmd.test: { + + if (script === cmd.cdk) { + // Prepare app before running forked CDK commands + const cliInfo = getCliInfo(); + prepareCdk(argv, cliInfo); + } + const result = spawn.sync( "node", - nodeArgs - .concat(require.resolve("../scripts/" + script)) - .concat(args.slice(scriptIndex + 1)), + [require.resolve("../scripts/" + script)].concat(scriptArgs), { stdio: "inherit" } ); if (result.signal) { diff --git a/packages/cli/scripts/build.js b/packages/cli/scripts/build.js index f54379578f..f98440ab33 100644 --- a/packages/cli/scripts/build.js +++ b/packages/cli/scripts/build.js @@ -3,7 +3,7 @@ const chalk = require("chalk"); const logger = require("./util/logger"); -const { synth, cacheCdkContext } = require("./config/cdkHelpers"); +const { synth } = require("./config/cdkHelpers"); function printResults(results, usingYarn) { const stacks = results.stacks; diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index 1fcf57e695..6a6e42db98 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -63,8 +63,8 @@ function formatDepsForInstall(depsList, version) { function runCdkVersionMatch(cliInfo, isTs) { const usingYarn = cliInfo.usingYarn; const helpUrl = isTs - ? "https://github.com/aws/aws-cdk/issues/542#issuecomment-449694450" - : "https://github.com/aws/aws-cdk/issues/9578#issuecomment-672884639"; + ? "https://github.com/aws/aws-cdk/issues/542" + : "https://github.com/aws/aws-cdk/issues/9578"; const cdkVersion = cliInfo.cdkVersion; diff --git a/packages/cli/scripts/deploy.js b/packages/cli/scripts/deploy.js index baa2b94c49..ffbfd5ad0c 100644 --- a/packages/cli/scripts/deploy.js +++ b/packages/cli/scripts/deploy.js @@ -7,7 +7,7 @@ const { sstEnv, sstBootstrap } = require("@serverless-stack/aws-cdk"); const logger = require("./util/logger"); const paths = require("./config/paths"); -const { deploy, cacheCdkContext } = require("./config/cdkHelpers"); +const { deploy } = require("./config/cdkHelpers"); function envObjectToString(envObj) { return `aws://${envObj.account}/${envObj.region}`; From d4455e1eadf185cb3ae6c04bbde9512886dd3173 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 26 Aug 2020 21:44:13 -0400 Subject: [PATCH 065/481] Updating template READMEs --- packages/create-serverless-stack/bin/index.js | 5 ++- .../resources/javascript/README.template.md | 42 ++++++++++++++++++- .../resources/typescript/README.template.md | 42 ++++++++++++++++++- 3 files changed, 84 insertions(+), 5 deletions(-) diff --git a/packages/create-serverless-stack/bin/index.js b/packages/create-serverless-stack/bin/index.js index 62798384ec..ff2203c100 100755 --- a/packages/create-serverless-stack/bin/index.js +++ b/packages/create-serverless-stack/bin/index.js @@ -148,7 +148,8 @@ const templatePath = path.join( })(); function getUserCmd(action) { - return useYarn ? `yarn run ${action}` : `npm run ${action}`; + const run = action === "test" ? "" : "run "; + return useYarn ? `yarn ${run}${action}` : `npm ${run}${action}`; } /* eslint-disable no-unused-vars */ @@ -178,6 +179,7 @@ function processString(str) { .replace(/%cdk-version%/g, cdkVersion) .replace(/%sst-version%/g, sstVersion) .replace(/%name\.camelCased%/g, camelCase(appName)) + .replace(/%package-manager%/g, useYarn ? 'yarn' : 'npm') .replace(/%name\.PascalCased%/g, camelCase(appName, { pascalCase: true })); } @@ -212,6 +214,7 @@ function copyFiles(sourceDirectory, targetDirectory) { function printSuccess() { console.log(`Success! Created ${appName} in ${appPath}`); + console.log(""); console.log("To get started:"); console.log(""); console.log(" " + chalk.cyan("cd ") + appName); diff --git a/packages/create-serverless-stack/templates/resources/javascript/README.template.md b/packages/create-serverless-stack/templates/resources/javascript/README.template.md index 16bea40876..f60aff3d40 100644 --- a/packages/create-serverless-stack/templates/resources/javascript/README.template.md +++ b/packages/create-serverless-stack/templates/resources/javascript/README.template.md @@ -1,3 +1,41 @@ -# Getting Started with Serverless Stack Resources +# Getting Started with Serverless Stack Toolkit -This project was bootstrapped with [Create Serverless Stack](https://github.com/serverless-stack/serverless-stack). +This project was bootstrapped with [Create Serverless Stack](https://github.com/serverless-stack/serverless-stack/tree/master/packages/create-serverless-stack). + +Start by installing the dependencies. + +```bash +$ %package-manager% install +``` + +## Commands + +### `%package-manager% run build` + +Build your app and synthesize your stacks. + +Generates a `build/` directory with the compiled files and a `build/cdk.out/` directory with the synthesized CloudFormation stacks. + +### `%package-manager% run deploy [stack]` + +Deploy all your stacks to AWS. Or optionally deploys, a specific stack. + +### `%package-manager% run remove [stack]` + +Remove all your stacks and all of their resources from AWS. Or optionally removes, a specific stack. + +### `%package-manager% test` + +Runs your tests using Jest. Takes all the [Jest CLI options](https://jestjs.io/docs/en/cli). + +## Documentation + +Learn more about the Serverless Stack Toolkit. + +- [README](https://github.com/serverless-stack/serverless-stack) +- [@serverless-stack/cli](https://github.com/serverless-stack/serverless-stack/tree/master/packages/cli) +- [@serverless-stack/resources](https://github.com/serverless-stack/serverless-stack/tree/master/packages/resources) + +## Community + +[Follow us on Twitter](https://twitter.com/ServerlessStack), [join our chatroom](https://gitter.im/serverless-stack/Lobby), or [post on our forums](https://discourse.serverless-stack.com). diff --git a/packages/create-serverless-stack/templates/resources/typescript/README.template.md b/packages/create-serverless-stack/templates/resources/typescript/README.template.md index 16bea40876..f60aff3d40 100644 --- a/packages/create-serverless-stack/templates/resources/typescript/README.template.md +++ b/packages/create-serverless-stack/templates/resources/typescript/README.template.md @@ -1,3 +1,41 @@ -# Getting Started with Serverless Stack Resources +# Getting Started with Serverless Stack Toolkit -This project was bootstrapped with [Create Serverless Stack](https://github.com/serverless-stack/serverless-stack). +This project was bootstrapped with [Create Serverless Stack](https://github.com/serverless-stack/serverless-stack/tree/master/packages/create-serverless-stack). + +Start by installing the dependencies. + +```bash +$ %package-manager% install +``` + +## Commands + +### `%package-manager% run build` + +Build your app and synthesize your stacks. + +Generates a `build/` directory with the compiled files and a `build/cdk.out/` directory with the synthesized CloudFormation stacks. + +### `%package-manager% run deploy [stack]` + +Deploy all your stacks to AWS. Or optionally deploys, a specific stack. + +### `%package-manager% run remove [stack]` + +Remove all your stacks and all of their resources from AWS. Or optionally removes, a specific stack. + +### `%package-manager% test` + +Runs your tests using Jest. Takes all the [Jest CLI options](https://jestjs.io/docs/en/cli). + +## Documentation + +Learn more about the Serverless Stack Toolkit. + +- [README](https://github.com/serverless-stack/serverless-stack) +- [@serverless-stack/cli](https://github.com/serverless-stack/serverless-stack/tree/master/packages/cli) +- [@serverless-stack/resources](https://github.com/serverless-stack/serverless-stack/tree/master/packages/resources) + +## Community + +[Follow us on Twitter](https://twitter.com/ServerlessStack), [join our chatroom](https://gitter.im/serverless-stack/Lobby), or [post on our forums](https://discourse.serverless-stack.com). From 236205d66a9cd3bd1f4240c6a4adaf53bd66d7f5 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 26 Aug 2020 21:44:59 -0400 Subject: [PATCH 066/481] v0.1.0 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index 0b83e6f229..3151b7ccee 100644 --- a/lerna.json +++ b/lerna.json @@ -4,5 +4,5 @@ ], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.19" + "version": "0.1.0" } diff --git a/packages/cli/package.json b/packages/cli/package.json index f55307a46f..b825600bd5 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.0.19", + "version": "0.1.0", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "jest-clear-cache": "jest --clearCache", @@ -41,7 +41,7 @@ "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", "@serverless-stack/aws-cdk": "1.55.0-rc.9", - "@serverless-stack/resources": "^0.0.19", + "@serverless-stack/resources": "^0.1.0", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index f5b41e771d..4db6e98e2a 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.0.19", + "version": "0.1.0", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 7861cc8457..dfd78d3f57 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.0.19", + "version": "0.1.0", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From a5b30603e593d2f46ade6dfd004217c081fd21d8 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 27 Aug 2020 13:44:13 -0400 Subject: [PATCH 067/481] Adding tests for forked cdk command --- .eslintignore | 1 + packages/cli/.gitignore | 1 + packages/cli/scripts/config/cdkHelpers.js | 4 +- .../cli/test/cdk-command/cdk-command.test.js | 18 +++ packages/cli/test/cdk-command/lib/index.js | 11 ++ packages/cli/test/cdk-command/package.json | 15 +++ packages/cli/test/cdk-command/sst.json | 6 + packages/cli/test/cdk-command/yarn.lock | 109 ++++++++++++++++++ packages/cli/test/helpers/index.js | 2 + packages/cli/test/helpers/run-cdk-command.js | 27 +++++ .../resources/javascript/README.template.md | 2 +- .../resources/typescript/README.template.md | 4 +- 12 files changed, 195 insertions(+), 5 deletions(-) create mode 100644 packages/cli/test/cdk-command/cdk-command.test.js create mode 100644 packages/cli/test/cdk-command/lib/index.js create mode 100644 packages/cli/test/cdk-command/package.json create mode 100644 packages/cli/test/cdk-command/sst.json create mode 100644 packages/cli/test/cdk-command/yarn.lock create mode 100644 packages/cli/test/helpers/run-cdk-command.js diff --git a/.eslintignore b/.eslintignore index ba0443ac52..b261e96a43 100644 --- a/.eslintignore +++ b/.eslintignore @@ -6,6 +6,7 @@ dist coverage # Don't lint build outputs in test /packages/cli/test/*/build/** +/packages/cli/test/*/cdk.out/** # Don't lint templates /packages/create-serverless-stack/templates/** # Don't lint eslint tests that need to fail diff --git a/packages/cli/.gitignore b/packages/cli/.gitignore index b805726b61..888275b7ca 100644 --- a/packages/cli/.gitignore +++ b/packages/cli/.gitignore @@ -1,2 +1,3 @@ # Build outputs in test /test/*/build/** +/test/*/cdk.out/** diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index 6a6e42db98..9fb28d274b 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -57,8 +57,8 @@ function formatDepsForInstall(depsList, version) { * AWS CDK version that Serverless Stack is using. If not, then show an error * message with update instructions. * More here - * - For TS: https://github.com/aws/aws-cdk/issues/542#issuecomment-449694450 - * - For JS: https://github.com/aws/aws-cdk/issues/9578#issuecomment-672884639 + * - For TS: https://github.com/aws/aws-cdk/issues/542 + * - For JS: https://github.com/aws/aws-cdk/issues/9578 */ function runCdkVersionMatch(cliInfo, isTs) { const usingYarn = cliInfo.usingYarn; diff --git a/packages/cli/test/cdk-command/cdk-command.test.js b/packages/cli/test/cdk-command/cdk-command.test.js new file mode 100644 index 0000000000..676428adc8 --- /dev/null +++ b/packages/cli/test/cdk-command/cdk-command.test.js @@ -0,0 +1,18 @@ +const { runCdkCommand, clearBuildOutput } = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("cdk-command", async () => { + const result = await runCdkCommand(__dirname, "list"); + + expect(result).toMatch(/prod-cdknotes-sample/); +}); diff --git a/packages/cli/test/cdk-command/lib/index.js b/packages/cli/test/cdk-command/lib/index.js new file mode 100644 index 0000000000..a34548c5ca --- /dev/null +++ b/packages/cli/test/cdk-command/lib/index.js @@ -0,0 +1,11 @@ +import * as sst from "@serverless-stack/resources"; + +class MySampleStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + } +} + +export default function main(app) { + new MySampleStack(app, "sample"); +} diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json new file mode 100644 index 0000000000..1eb5d1dff1 --- /dev/null +++ b/packages/cli/test/cdk-command/package.json @@ -0,0 +1,15 @@ +{ + "name": "cdk-command", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "cdk": "../../bin/scripts.js cdk" + }, + "keywords": [], + "author": "", + "dependencies": { + "@serverless-stack/resources": "../../../resources" + }, + "license": "ISC" +} diff --git a/packages/cli/test/cdk-command/sst.json b/packages/cli/test/cdk-command/sst.json new file mode 100644 index 0000000000..3e7b463755 --- /dev/null +++ b/packages/cli/test/cdk-command/sst.json @@ -0,0 +1,6 @@ +{ + "type": "@serverless-stack/resources", + "name": "cdknotes", + "stage": "prod", + "region": "us-west-1" +} diff --git a/packages/cli/test/cdk-command/yarn.lock b/packages/cli/test/cdk-command/yarn.lock new file mode 100644 index 0000000000..7324d910a7 --- /dev/null +++ b/packages/cli/test/cdk-command/yarn.lock @@ -0,0 +1,109 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aws-cdk/cloud-assembly-schema@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" + integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/core@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" + integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cx-api" "1.55.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/cx-api@1.55.0": + version "1.55.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" + integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.55.0" + semver "^7.2.2" + +"@serverless-stack/resources@../../../resources": + version "0.1.0" + dependencies: + "@aws-cdk/core" "1.55.0" + +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== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +constructs@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" + integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" + integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +semver@^7.2.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/test/helpers/index.js b/packages/cli/test/helpers/index.js index 522256c472..f55de906a7 100644 --- a/packages/cli/test/helpers/index.js +++ b/packages/cli/test/helpers/index.js @@ -1,4 +1,5 @@ const yarnInstall = require("./yarn-install"); +const runCdkCommand = require("./run-cdk-command"); const runJestCommand = require("./run-jest-command"); const runBuildCommand = require("./run-build-command"); const clearBuildOutput = require("./clear-build-output"); @@ -11,6 +12,7 @@ module.exports = { yarnInstall, errorRegex, successRegex, + runCdkCommand, runJestCommand, runBuildCommand, clearBuildOutput, diff --git a/packages/cli/test/helpers/run-cdk-command.js b/packages/cli/test/helpers/run-cdk-command.js new file mode 100644 index 0000000000..bfc7282963 --- /dev/null +++ b/packages/cli/test/helpers/run-cdk-command.js @@ -0,0 +1,27 @@ +const { promisify } = require("util"); +const { exec } = require("child_process"); +const yarnInstall = require("./yarn-install"); + +const execPromise = promisify(exec); +const TIMEOUT = 30000; + +async function runCdkCommand(cwd, cmd) { + await yarnInstall(cwd); + + let result, error; + + try { + result = await execPromise( + `yarn cdk --app="build/run.js" --no-color ${cmd}`, + { cwd, TIMEOUT } + ); + } catch (e) { + error = e.toString() + e.stdout; + } + + return error + ? error + : result.stdout.toString("utf8") + result.stderr.toString("utf8"); +} + +module.exports = runCdkCommand; diff --git a/packages/create-serverless-stack/templates/resources/javascript/README.template.md b/packages/create-serverless-stack/templates/resources/javascript/README.template.md index f60aff3d40..073c65f1b0 100644 --- a/packages/create-serverless-stack/templates/resources/javascript/README.template.md +++ b/packages/create-serverless-stack/templates/resources/javascript/README.template.md @@ -18,7 +18,7 @@ Generates a `build/` directory with the compiled files and a `build/cdk.out/` di ### `%package-manager% run deploy [stack]` -Deploy all your stacks to AWS. Or optionally deploys, a specific stack. +Deploy all your stacks to AWS. Or optionally deploy, a specific stack. ### `%package-manager% run remove [stack]` diff --git a/packages/create-serverless-stack/templates/resources/typescript/README.template.md b/packages/create-serverless-stack/templates/resources/typescript/README.template.md index f60aff3d40..03f99672ae 100644 --- a/packages/create-serverless-stack/templates/resources/typescript/README.template.md +++ b/packages/create-serverless-stack/templates/resources/typescript/README.template.md @@ -18,11 +18,11 @@ Generates a `build/` directory with the compiled files and a `build/cdk.out/` di ### `%package-manager% run deploy [stack]` -Deploy all your stacks to AWS. Or optionally deploys, a specific stack. +Deploy all your stacks to AWS. Or optionally deploy a specific stack. ### `%package-manager% run remove [stack]` -Remove all your stacks and all of their resources from AWS. Or optionally removes, a specific stack. +Remove all your stacks and all of their resources from AWS. Or optionally remove a specific stack. ### `%package-manager% test` From 52144901c90c5c3460d2541764510ffc74c58382 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 27 Aug 2020 14:30:45 -0400 Subject: [PATCH 068/481] Adding formatted error debug messages --- packages/cli/scripts/config/cdkHelpers.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index 9fb28d274b..666daf2801 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -17,6 +17,9 @@ const DEFAULT_STAGE = "dev"; const DEFAULT_REGION = "us-east-1"; function exitWithMessage(message, withNewline) { + // Formatted error to grep + logger.debug(`SST Resources Error: ${message.trim()}`); + if (withNewline) { logger.log(""); } From 9ff4348f3d5543be6baabe6ac71c35f27652cc5b Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 27 Aug 2020 14:31:14 -0400 Subject: [PATCH 069/481] v0.1.1 --- lerna.json | 6 ++---- packages/cli/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/lerna.json b/lerna.json index 3151b7ccee..b0a859bfa0 100644 --- a/lerna.json +++ b/lerna.json @@ -1,8 +1,6 @@ { - "packages": [ - "packages/*" - ], + "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.1.0" + "version": "0.1.1" } diff --git a/packages/cli/package.json b/packages/cli/package.json index b825600bd5..8bbf7f1e81 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.1.0", + "version": "0.1.1", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "jest-clear-cache": "jest --clearCache", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 4db6e98e2a..0fcf36c734 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.1.0", + "version": "0.1.1", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { From d2faa6e17279a1549a859148ace4ffddc138bab1 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 27 Aug 2020 14:34:31 -0400 Subject: [PATCH 070/481] v0.1.2 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index b0a859bfa0..c7e1559944 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.1.1" + "version": "0.1.2" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 8bbf7f1e81..ef97eaae16 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.1.1", + "version": "0.1.2", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "jest-clear-cache": "jest --clearCache", @@ -41,7 +41,7 @@ "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", "@serverless-stack/aws-cdk": "1.55.0-rc.9", - "@serverless-stack/resources": "^0.1.0", + "@serverless-stack/resources": "^0.1.2", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 0fcf36c734..7aa4917141 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.1.1", + "version": "0.1.2", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index dfd78d3f57..235966868a 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.1.0", + "version": "0.1.2", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 52e5e42f9012d0e9b0bf643383cbf83115ab2d32 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 27 Aug 2020 17:29:31 -0400 Subject: [PATCH 071/481] Adding handling for empty app name --- packages/cli/scripts/config/cdkHelpers.js | 41 +++++++++++-------- .../config-no-name/config-no-name.test.js | 18 ++++++++ packages/cli/test/config-no-name/lib/index.js | 1 + packages/cli/test/config-no-name/package.json | 13 ++++++ packages/cli/test/config-no-name/sst.json | 5 +++ packages/cli/test/config-no-name/yarn.lock | 4 ++ .../config-no-type/config-no-type.test.js | 2 +- packages/resources/src/App.ts | 2 +- 8 files changed, 68 insertions(+), 18 deletions(-) create mode 100644 packages/cli/test/config-no-name/config-no-name.test.js create mode 100644 packages/cli/test/config-no-name/lib/index.js create mode 100644 packages/cli/test/config-no-name/package.json create mode 100644 packages/cli/test/config-no-name/sst.json create mode 100644 packages/cli/test/config-no-name/yarn.lock diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index 666daf2801..7c201cf92f 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -12,18 +12,21 @@ const { isSubProcessError } = require("../util/errors"); const isTs = fs.existsSync(path.join(paths.appPath, "tsconfig.json")); -const DEFAULT_NAME = ""; const DEFAULT_STAGE = "dev"; +const DEFAULT_NAME = "my-app"; const DEFAULT_REGION = "us-east-1"; -function exitWithMessage(message, withNewline) { +function exitWithMessage(message, shortMessage) { + shortMessage = shortMessage || message; + // Formatted error to grep - logger.debug(`SST Resources Error: ${message.trim()}`); + logger.debug(`SST Resources Error: ${shortMessage.trim()}`); - if (withNewline) { + // Move newline before message + if (message.indexOf("\n") === 0) { logger.log(""); } - logger.error(message); + logger.error(message.trimStart()); process.exit(1); } @@ -172,9 +175,8 @@ function transpile(cliInfo) { throw results.error; } else if (results.status !== 0) { exitWithMessage( - isTs ? "TypeScript compilation error" : "Babel compilation error", // Add an empty line for Babel errors to make it more clear - isTs ? false : true + isTs ? "TypeScript compilation error" : "\nBabel compilation error" ); } } @@ -198,12 +200,11 @@ function applyConfig(argv) { if (!fs.existsSync(configPath)) { exitWithMessage( - `Add the ${chalk.bold( + `\nAdd the ${chalk.bold( "sst.json" )} config file in your project root to get started. Or use the ${chalk.bold( "create-serverless-stack" - )} CLI to create a new project.\n`, - true + )} CLI to create a new project.\n` ); } @@ -214,21 +215,29 @@ function applyConfig(argv) { config = JSON.parse(configStr); } catch (e) { exitWithMessage( - `There was a problem reading the ${chalk.bold( + `\nThere was a problem reading the ${chalk.bold( "sst.json" - )} config file. Make sure it is in valid JSON format.\n`, - true + )} config file. Make sure it is in valid JSON format.\n` ); } if (!config.type || config.type.trim() !== "@serverless-stack/resources") { exitWithMessage( - `Cannot detect the ${chalk.bold( + `\nCannot detect the ${chalk.bold( "type" )} of Serverless Stack app. Make sure to set the following in your ${chalk.bold( "sst.json" )}.\n\n "type": "@serverless-stack/resources"\n`, - true + "Cannot detect the type of Serverless Stack app." + ); + } + + if (!config.name || config.name.trim() === "") { + exitWithMessage( + `\nGive your Serverless Stack app a ${chalk.bold( + "name" + )} in the ${chalk.bold("sst.json")}.\n\n "name": "my-sst-app"\n`, + "Give your Serverless Stack app a name." ); } @@ -263,7 +272,7 @@ function prepareCdk(argv, cliInfo) { function handleCdkErrors(e) { if (isSubProcessError(e)) { - exitWithMessage("There was an error synthesizing your app.", false); + exitWithMessage("There was an error synthesizing your app."); } else { throw e; } diff --git a/packages/cli/test/config-no-name/config-no-name.test.js b/packages/cli/test/config-no-name/config-no-name.test.js new file mode 100644 index 0000000000..ccbea655fa --- /dev/null +++ b/packages/cli/test/config-no-name/config-no-name.test.js @@ -0,0 +1,18 @@ +const { runBuildCommand, clearBuildOutput } = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("config-no-name", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).toMatch(/Give your Serverless Stack app a name/); +}); diff --git a/packages/cli/test/config-no-name/lib/index.js b/packages/cli/test/config-no-name/lib/index.js new file mode 100644 index 0000000000..c857a02040 --- /dev/null +++ b/packages/cli/test/config-no-name/lib/index.js @@ -0,0 +1 @@ +export default function main() {} diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json new file mode 100644 index 0000000000..0f6a33b45d --- /dev/null +++ b/packages/cli/test/config-no-name/package.json @@ -0,0 +1,13 @@ +{ + "name": "config-no-name", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "../../bin/scripts.js build" + }, + "keywords": [], + "author": "", + "dependencies": {}, + "license": "ISC" +} diff --git a/packages/cli/test/config-no-name/sst.json b/packages/cli/test/config-no-name/sst.json new file mode 100644 index 0000000000..b4c9bba6ae --- /dev/null +++ b/packages/cli/test/config-no-name/sst.json @@ -0,0 +1,5 @@ +{ + "type": "@serverless-stack/resources", + "stage": "prod", + "region": "us-west-1" +} diff --git a/packages/cli/test/config-no-name/yarn.lock b/packages/cli/test/config-no-name/yarn.lock new file mode 100644 index 0000000000..fb57ccd13a --- /dev/null +++ b/packages/cli/test/config-no-name/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + diff --git a/packages/cli/test/config-no-type/config-no-type.test.js b/packages/cli/test/config-no-type/config-no-type.test.js index 6b33704cc8..80e9d31bdb 100644 --- a/packages/cli/test/config-no-type/config-no-type.test.js +++ b/packages/cli/test/config-no-type/config-no-type.test.js @@ -11,7 +11,7 @@ afterAll(async () => { /** * Test that the synth command ran successfully */ -test("config-invalid", async () => { +test("config-no-type", async () => { const result = await runBuildCommand(__dirname); expect(result).toMatch(/Cannot detect the type of Serverless Stack app/); diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 0b190f98c7..0304e2a1ac 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -48,8 +48,8 @@ export class App extends cdk.App { constructor(deployProps: DeployProps = {}, props: AppProps = {}) { super(props); - this.name = deployProps.name || ""; this.stage = deployProps.stage || "dev"; + this.name = deployProps.name || "my-app"; this.region = deployProps.region || "us-east-1"; } From 3b0bcc44a267269fc9d2daeb915bb26cfb122e19 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 27 Aug 2020 17:30:52 -0400 Subject: [PATCH 072/481] v0.1.3 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index c7e1559944..36cf6ad525 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.1.2" + "version": "0.1.3" } diff --git a/packages/cli/package.json b/packages/cli/package.json index ef97eaae16..4f74d9dd27 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.1.2", + "version": "0.1.3", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "jest-clear-cache": "jest --clearCache", @@ -41,7 +41,7 @@ "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", "@serverless-stack/aws-cdk": "1.55.0-rc.9", - "@serverless-stack/resources": "^0.1.2", + "@serverless-stack/resources": "^0.1.3", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 7aa4917141..504f628994 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.1.2", + "version": "0.1.3", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 235966868a..93693b2627 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.1.2", + "version": "0.1.3", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 0167689d8df3eda8a2fe3c51f674dc8f208684e3 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 27 Aug 2020 17:31:29 -0400 Subject: [PATCH 073/481] Updating script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 70097f05bf..5d6d08fd73 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ ], "scripts": { "lint": "eslint . --fix --ext .js,.ts", - "npm-publish": "lerna publish", + "npm-publish": "lerna publish --force-publish", "clean": "lerna run clean", "postinstall": "lerna run prepare --scope=@serverless-stack/resources", "test": "lerna run test --stream --scope=@serverless-stack/cli" From cd88fd7ca8a7e7ab20c9cce323a8c6a9db93263a Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 31 Aug 2020 14:52:08 -0400 Subject: [PATCH 074/481] Removing bootstrap check, renaming default stack --- packages/cli/scripts/config/cdkHelpers.js | 1 + packages/cli/scripts/deploy.js | 63 +------------------ packages/create-serverless-stack/bin/index.js | 12 +++- ...s => %stack-name.PascalCased%.template.js} | 2 +- .../javascript/lib/index.template.js | 4 +- ...%stack-name.PascalCased%.test.template.js} | 6 +- ...s => %stack-name.PascalCased%.template.ts} | 2 +- .../typescript/lib/index.template.ts | 4 +- ...%stack-name.PascalCased%.test.template.ts} | 6 +- 9 files changed, 23 insertions(+), 77 deletions(-) rename packages/create-serverless-stack/templates/resources/javascript/lib/{%name.PascalCased%Stack.template.js => %stack-name.PascalCased%.template.js} (69%) rename packages/create-serverless-stack/templates/resources/javascript/test/{%name.PascalCased%Stack.test.template.js => %stack-name.PascalCased%.test.template.js} (61%) rename packages/create-serverless-stack/templates/resources/typescript/lib/{%name.PascalCased%Stack.template.ts => %stack-name.PascalCased%.template.ts} (75%) rename packages/create-serverless-stack/templates/resources/typescript/test/{%name.PascalCased%Stack.test.template.ts => %stack-name.PascalCased%.test.template.ts} (61%) diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index 7c201cf92f..4d656bafb2 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -122,6 +122,7 @@ function lint() { const results = spawn.sync( getCmdPath("eslint"), [ + "--no-error-on-unmatched-pattern", "--config", path.join(paths.ownPath, "scripts", "config", config), "--ext", diff --git a/packages/cli/scripts/deploy.js b/packages/cli/scripts/deploy.js index ffbfd5ad0c..dedb96ef6f 100644 --- a/packages/cli/scripts/deploy.js +++ b/packages/cli/scripts/deploy.js @@ -1,72 +1,11 @@ "use strict"; -const fs = require("fs"); -const path = require("path"); const chalk = require("chalk"); -const { sstEnv, sstBootstrap } = require("@serverless-stack/aws-cdk"); const logger = require("./util/logger"); -const paths = require("./config/paths"); const { deploy } = require("./config/cdkHelpers"); -function envObjectToString(envObj) { - return `aws://${envObj.account}/${envObj.region}`; -} - -function hasBootstrappedEnv(env) { - const contextPath = path.join(paths.appPath, "cdk.context.json"); - const context = fs.existsSync(contextPath) ? require(contextPath) : {}; - - return context.bootstrappedEnvs - ? context.bootstrappedEnvs[env] === true - : false; -} - -function cacheBootstrap(env) { - logger.debug("Caching bootstrapped environment in cdk.context.json"); - - const contextPath = path.join(paths.appPath, "cdk.context.json"); - const context = fs.existsSync(contextPath) ? require(contextPath) : {}; - - context.bootstrappedEnvs = context.bootstrappedEnvs || {}; - context.bootstrappedEnvs[env] = true; - - fs.writeFileSync(contextPath, JSON.stringify(context, null, 2)); -} - -async function checkAndRunBootstrap(config, cdkOptions) { - logger.log(chalk.grey("Loading environment")); - - const envResults = await sstEnv(cdkOptions); - - if (!envResults.environment.account) { - throw new Error( - "AWS profile could not be detected. Please make sure you have it configured locally." - ); - } - - // Apply region from config - envResults.environment.region = config.region; - - // Run bootstrap if not previously run - const env = envObjectToString(envResults.environment); - - if (hasBootstrappedEnv(env)) { - return; - } - - logger.log(chalk.grey("New environment detected")); - - const bsCall = await sstBootstrap(cdkOptions); - // Cache Bootstrap results - cacheBootstrap(bsCall.environment.name); -} - module.exports = async function (argv, config, cliInfo) { - const cdkOptions = cliInfo.cdkOptions; - - await checkAndRunBootstrap(config, cdkOptions); - logger.log(chalk.grey("Deploying " + (argv.stack ? argv.stack : "stacks"))); - await deploy({ ...cdkOptions, stackName: argv.stack }); + await deploy({ ...cliInfo.cdkOptions, stackName: argv.stack }); }; diff --git a/packages/create-serverless-stack/bin/index.js b/packages/create-serverless-stack/bin/index.js index ff2203c100..1966de9808 100755 --- a/packages/create-serverless-stack/bin/index.js +++ b/packages/create-serverless-stack/bin/index.js @@ -43,7 +43,7 @@ const argv = yargs function (yargs) { yargs.positional("name", { type: "string", - default: "my-serverless-resources", + default: "my-sst-app", describe: "The name of your Serverless Stack app", }); } @@ -174,13 +174,19 @@ function error(message) { } function processString(str) { + const stackName = "my-stack"; return str .replace(/%name%/g, appName) + .replace(/%stack-name%/g, stackName) .replace(/%cdk-version%/g, cdkVersion) .replace(/%sst-version%/g, sstVersion) .replace(/%name\.camelCased%/g, camelCase(appName)) - .replace(/%package-manager%/g, useYarn ? 'yarn' : 'npm') - .replace(/%name\.PascalCased%/g, camelCase(appName, { pascalCase: true })); + .replace(/%package-manager%/g, useYarn ? "yarn" : "npm") + .replace(/%name\.PascalCased%/g, camelCase(appName, { pascalCase: true })) + .replace( + /%stack-name.PascalCased%/g, + camelCase(stackName, { pascalCase: true }) + ); } function processFile(templatePath, toFile) { diff --git a/packages/create-serverless-stack/templates/resources/javascript/lib/%name.PascalCased%Stack.template.js b/packages/create-serverless-stack/templates/resources/javascript/lib/%stack-name.PascalCased%.template.js similarity index 69% rename from packages/create-serverless-stack/templates/resources/javascript/lib/%name.PascalCased%Stack.template.js rename to packages/create-serverless-stack/templates/resources/javascript/lib/%stack-name.PascalCased%.template.js index c4531ae27b..f755e45d98 100644 --- a/packages/create-serverless-stack/templates/resources/javascript/lib/%name.PascalCased%Stack.template.js +++ b/packages/create-serverless-stack/templates/resources/javascript/lib/%stack-name.PascalCased%.template.js @@ -1,6 +1,6 @@ import * as sst from "@serverless-stack/resources"; -export default class %name.PascalCased%Stack extends sst.Stack { +export default class %stack-name.PascalCased% extends sst.Stack { constructor(scope, id, props) { super(scope, id, props); diff --git a/packages/create-serverless-stack/templates/resources/javascript/lib/index.template.js b/packages/create-serverless-stack/templates/resources/javascript/lib/index.template.js index a5f9cc880b..700503f81c 100644 --- a/packages/create-serverless-stack/templates/resources/javascript/lib/index.template.js +++ b/packages/create-serverless-stack/templates/resources/javascript/lib/index.template.js @@ -1,7 +1,7 @@ -import %name.PascalCased%Stack from "./%name.PascalCased%Stack"; +import %stack-name.PascalCased% from "./%stack-name.PascalCased%"; export default function main(app) { - new %name.PascalCased%Stack(app, "%name.PascalCased%Stack"); + new %stack-name.PascalCased%(app, "%stack-name%"); // Add more stacks } diff --git a/packages/create-serverless-stack/templates/resources/javascript/test/%name.PascalCased%Stack.test.template.js b/packages/create-serverless-stack/templates/resources/javascript/test/%stack-name.PascalCased%.test.template.js similarity index 61% rename from packages/create-serverless-stack/templates/resources/javascript/test/%name.PascalCased%Stack.test.template.js rename to packages/create-serverless-stack/templates/resources/javascript/test/%stack-name.PascalCased%.test.template.js index 32945893d2..d0b4ebd09d 100644 --- a/packages/create-serverless-stack/templates/resources/javascript/test/%name.PascalCased%Stack.test.template.js +++ b/packages/create-serverless-stack/templates/resources/javascript/test/%stack-name.PascalCased%.test.template.js @@ -1,11 +1,11 @@ import { expect, matchTemplate, MatchStyle } from "@aws-cdk/assert"; import * as sst from "@serverless-stack/resources"; -import %name.PascalCased%Stack from "../lib/%name.PascalCased%Stack"; +import %stack-name.PascalCased% from "../lib/%stack-name.PascalCased%"; -test('Empty Stack', () => { +test('Test Stack', () => { const app = new sst.App(); // WHEN - const stack = new %name.PascalCased%Stack(app, 'MyTestStack'); + const stack = new %stack-name.PascalCased%(app, 'test-stack'); // THEN expect(stack).to(matchTemplate({ "Resources": {} diff --git a/packages/create-serverless-stack/templates/resources/typescript/lib/%name.PascalCased%Stack.template.ts b/packages/create-serverless-stack/templates/resources/typescript/lib/%stack-name.PascalCased%.template.ts similarity index 75% rename from packages/create-serverless-stack/templates/resources/typescript/lib/%name.PascalCased%Stack.template.ts rename to packages/create-serverless-stack/templates/resources/typescript/lib/%stack-name.PascalCased%.template.ts index c3793ba95d..405e42a6e8 100644 --- a/packages/create-serverless-stack/templates/resources/typescript/lib/%name.PascalCased%Stack.template.ts +++ b/packages/create-serverless-stack/templates/resources/typescript/lib/%stack-name.PascalCased%.template.ts @@ -1,6 +1,6 @@ import * as sst from "@serverless-stack/resources"; -export default class %name.PascalCased%Stack extends sst.Stack { +export default class %stack-name.PascalCased% extends sst.Stack { constructor(scope: sst.App, id: string, props?: sst.StackProps) { super(scope, id, props); diff --git a/packages/create-serverless-stack/templates/resources/typescript/lib/index.template.ts b/packages/create-serverless-stack/templates/resources/typescript/lib/index.template.ts index bf3e156b6b..e051b00494 100644 --- a/packages/create-serverless-stack/templates/resources/typescript/lib/index.template.ts +++ b/packages/create-serverless-stack/templates/resources/typescript/lib/index.template.ts @@ -1,8 +1,8 @@ -import %name.PascalCased%Stack from "./%name.PascalCased%Stack"; +import %stack-name.PascalCased% from "./%stack-name.PascalCased%"; import * as sst from "@serverless-stack/resources"; export default function main(app: sst.App): void { - new %name.PascalCased%Stack(app, "%name.PascalCased%Stack"); + new %stack-name.PascalCased%(app, "%stack-name%"); // Add more stacks } diff --git a/packages/create-serverless-stack/templates/resources/typescript/test/%name.PascalCased%Stack.test.template.ts b/packages/create-serverless-stack/templates/resources/typescript/test/%stack-name.PascalCased%.test.template.ts similarity index 61% rename from packages/create-serverless-stack/templates/resources/typescript/test/%name.PascalCased%Stack.test.template.ts rename to packages/create-serverless-stack/templates/resources/typescript/test/%stack-name.PascalCased%.test.template.ts index 32945893d2..d0b4ebd09d 100644 --- a/packages/create-serverless-stack/templates/resources/typescript/test/%name.PascalCased%Stack.test.template.ts +++ b/packages/create-serverless-stack/templates/resources/typescript/test/%stack-name.PascalCased%.test.template.ts @@ -1,11 +1,11 @@ import { expect, matchTemplate, MatchStyle } from "@aws-cdk/assert"; import * as sst from "@serverless-stack/resources"; -import %name.PascalCased%Stack from "../lib/%name.PascalCased%Stack"; +import %stack-name.PascalCased% from "../lib/%stack-name.PascalCased%"; -test('Empty Stack', () => { +test('Test Stack', () => { const app = new sst.App(); // WHEN - const stack = new %name.PascalCased%Stack(app, 'MyTestStack'); + const stack = new %stack-name.PascalCased%(app, 'test-stack'); // THEN expect(stack).to(matchTemplate({ "Resources": {} From ee5aa05d537ea39cbaec1e30927199cd10b834a5 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 31 Aug 2020 16:41:02 -0400 Subject: [PATCH 075/481] Updating cdk version --- package.json | 2 +- packages/cli/package.json | 6 +- packages/resources/package.json | 2 +- yarn.lock | 123 +++++++++++++++++--------------- 4 files changed, 73 insertions(+), 60 deletions(-) diff --git a/package.json b/package.json index 5d6d08fd73..ab7139a723 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "lint": "eslint . --fix --ext .js,.ts", "npm-publish": "lerna publish --force-publish", "clean": "lerna run clean", - "postinstall": "lerna run prepare --scope=@serverless-stack/resources", + "postinstall": "lerna run prepare --scope='{@serverless-stack/resources,create-serverless-stack}'", "test": "lerna run test --stream --scope=@serverless-stack/cli" }, "devDependencies": { diff --git a/packages/cli/package.json b/packages/cli/package.json index 4f74d9dd27..9f69f3b487 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -3,6 +3,7 @@ "version": "0.1.3", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { + "prepare": "node test/helpers/sync-cdk-version.js", "jest-clear-cache": "jest --clearCache", "test": "jest" }, @@ -40,7 +41,7 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/aws-cdk": "1.55.0-rc.9", + "@serverless-stack/aws-cdk": "1.61.0-rc.4", "@serverless-stack/resources": "^0.1.3", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", @@ -56,5 +57,8 @@ "ts-jest": "^26.1.4", "typescript": "^3.9.7", "yargs": "^15.4.1" + }, + "devDependencies": { + "replace-in-file": "^6.1.0" } } diff --git a/packages/resources/package.json b/packages/resources/package.json index 93693b2627..1c79cd1b98 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -25,7 +25,7 @@ "access": "public" }, "dependencies": { - "@aws-cdk/core": "1.55.0" + "@aws-cdk/core": "1.61.0" }, "devDependencies": { "@types/node": "^14.0.27", diff --git a/yarn.lock b/yarn.lock index 052d95cce9..1fdcb31dd0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,56 +2,56 @@ # yarn lockfile v1 -"@aws-cdk/cfnspec@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.55.0.tgz#6a6f78b0269ff8dae55fc2e986cca7469937e3fb" - integrity sha512-Bg4tTgtKMjBKWtyP2/V0atb3TmqshIW+j61gRigEhom1aS49QzvA6YpTjv6vzylQIH0+hdLYiCX6brBiYEXhTg== +"@aws-cdk/cfnspec@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.61.0.tgz#69e998ab83c0a478b76e1c5deb8484171dfd95f9" + integrity sha512-Ss5N3unY6iVh9SjYAYvTyvhdb7Kaz6dVFeV8K68UGewiFcHpC5tQi3YmlVBw3HCgKoRt20emiHAfmdfeGO/PUQ== dependencies: - md5 "^2.2.1" + md5 "^2.3.0" -"@aws-cdk/cloud-assembly-schema@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" - integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== +"@aws-cdk/cloud-assembly-schema@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" + integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== dependencies: jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/cloudformation-diff@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.55.0.tgz#f39fb63bd6388c2401373bf200575efe513a5045" - integrity sha512-lBFiLQXaJmf4hR+RzSXwAGun/NgANzK5p/Qm5ETgqTLVPRksJJruaFgFO/Pr0qIRpDbtxrkigoeFZxCgFkFqAQ== +"@aws-cdk/cloudformation-diff@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.61.0.tgz#8acb549fd1dd819aa61dfed47e011b44827045a8" + integrity sha512-TrrmywhYkXxGNTmDd1k2biJMVtEvb0QcbZ/IGM6biMXIJ+wsjw/n5snvwciQ8/PHZmsUYk67qulGdso1rpy06Q== dependencies: - "@aws-cdk/cfnspec" "1.55.0" + "@aws-cdk/cfnspec" "1.61.0" colors "^1.4.0" diff "^4.0.2" fast-deep-equal "^3.1.3" string-width "^4.2.0" table "^5.4.6" -"@aws-cdk/core@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" - integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== +"@aws-cdk/core@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" + integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" fs-extra "^9.0.1" minimatch "^3.0.4" -"@aws-cdk/cx-api@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" - integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== +"@aws-cdk/cx-api@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" + integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" semver "^7.2.2" -"@aws-cdk/region-info@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" - integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== +"@aws-cdk/region-info@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" + integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== "@babel/cli@^7.10.5": version "7.10.5" @@ -2018,19 +2018,19 @@ dependencies: "@types/node" ">= 8" -"@serverless-stack/aws-cdk@1.55.0-rc.9": - version "1.55.0-rc.9" - resolved "https://registry.yarnpkg.com/@serverless-stack/aws-cdk/-/aws-cdk-1.55.0-rc.9.tgz#1a17d95b8e74e9354fed7f7c36501761166a65eb" - integrity sha512-sZsc2n7A28RBqpJI13XWVqwNCHA2TWigxQJb22vnFmqam8MbXV9m2ZCC2IKilNpLso4dd0lJ+Dz9A0kbaMhQZw== +"@serverless-stack/aws-cdk@1.61.0-rc.4": + version "1.61.0-rc.4" + resolved "https://registry.yarnpkg.com/@serverless-stack/aws-cdk/-/aws-cdk-1.61.0-rc.4.tgz#aef7932ed099e74c041103d1ba181bd77ae68e8f" + integrity sha512-CMNB7M+5Ks/oSbwgm/ikrhaVeq4JxD4dHz3GKahUGIz4ulIw/YEvXe3paNa/ODCYDNcgsZQMnHXjZI8fLfZnaA== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cloudformation-diff" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - "@aws-cdk/region-info" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cloudformation-diff" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + "@aws-cdk/region-info" "1.61.0" archiver "^4.0.2" - aws-sdk "^2.715.0" + aws-sdk "^2.739.0" camelcase "^6.0.0" - cdk-assets "1.55.0" + cdk-assets "1.61.0" colors "^1.4.0" decamelize "^4.0.0" fs-extra "^9.0.1" @@ -2042,10 +2042,10 @@ semver "^7.2.2" source-map-support "^0.5.19" table "^5.4.6" - uuid "^8.2.0" + uuid "^8.3.0" wrap-ansi "^7.0.0" yaml "^1.10.0" - yargs "^15.3.1" + yargs "^15.4.1" "@sinonjs/commons@^1.7.0": version "1.8.1" @@ -2601,10 +2601,10 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -aws-sdk@^2.715.0: - version "2.736.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.736.0.tgz#7b9373d1a338288c5caeca01a6226efbade2e086" - integrity sha512-rDrLgxkiFX+9EksDx4Lc6qLA07Pf0xfqqXnM3CpLBL81aVOdmmXAiBPtz/KSgbcrR5Mxz38ah8x5RZ17stJQjw== +aws-sdk@^2.739.0: + version "2.743.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.743.0.tgz#c72a471c80cf88d78d854c780de861fb8475ae34" + integrity sha512-xujZGeA5gnbPBIlq6w/b+WYDKLXYiPWeVHvR0LKcvLLAr8IgzYYInmLx+7CU6ynXuBwVQtqGl2lZ2JSZbnMydg== dependencies: buffer "4.9.2" events "1.1.1" @@ -2994,17 +2994,17 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -cdk-assets@1.55.0: - version "1.55.0" - resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.55.0.tgz#e1b5c2b409623a50ef05e3c9617be291f59f5522" - integrity sha512-ShWqxAOFEYY4GFLQlECgZbSVyHdKqUo6bD72sIoWp+j4iQNpEFiZVSAxIehx1CIrElNaOJO5H/TUzCLOMpaKxw== +cdk-assets@1.61.0: + version "1.61.0" + resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.61.0.tgz#677d85bb23ae7aa104a1b0d5892e3cfd36580a08" + integrity sha512-nZJNQq6vktb5j8xl+IYLWbN82E6EVANJQIZvOM1H/SLuYsjyuoAlIxBp6e50XqYRApnLYJ7BpDdAnLWOmfY8MQ== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" archiver "^4.0.2" - aws-sdk "^2.715.0" + aws-sdk "^2.739.0" glob "^7.1.6" - yargs "^15.3.1" + yargs "^15.4.1" chalk@^2.0.0, chalk@^2.3.1, chalk@^2.4.2: version "2.4.2" @@ -3299,7 +3299,7 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -constructs@^3.0.2: +constructs@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== @@ -6241,7 +6241,7 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -md5@^2.2.1: +md5@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== @@ -7643,6 +7643,15 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" +replace-in-file@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/replace-in-file/-/replace-in-file-6.1.0.tgz#9f9ddd7bb70d6ad231d2ad692e1b646e73d06647" + integrity sha512-URzjyF3nucvejuY13HFd7O+Q6tFJRLKGHLYVvSh+LiZj3gFXzSYGnIkQflnJJulCAI2/RTZaZkpOtdVdW0EhQA== + dependencies: + chalk "^4.0.0" + glob "^7.1.6" + yargs "^15.3.1" + request-promise-core@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" @@ -8894,7 +8903,7 @@ uuid@^3.0.1, uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.2.0: +uuid@^8.2.0, uuid@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== From c880c20abaf2a8c8c5638922fe3c70f5c4fab3c7 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 31 Aug 2020 17:13:34 -0400 Subject: [PATCH 076/481] Adding script to sync test cdk versions --- packages/cli/test/base-ts/package.json | 6 +- packages/cli/test/base-ts/yarn.lock | 156 +-- packages/cli/test/base/package.json | 8 +- packages/cli/test/base/yarn.lock | 529 ++++----- packages/cli/test/config/package.json | 2 +- packages/cli/test/config/yarn.lock | 467 ++++---- packages/cli/test/context/package.json | 2 +- packages/cli/test/context/yarn.lock | 467 ++++---- packages/cli/test/helpers/sync-cdk-version.js | 32 + packages/cli/test/jest-ts/package.json | 12 +- packages/cli/test/jest-ts/yarn.lock | 1041 ++++++++++++----- packages/cli/test/jest/package.json | 6 +- packages/cli/test/jest/yarn.lock | 559 ++++----- .../cli/test/stack-no-prefix/package.json | 2 +- packages/cli/test/stack-no-prefix/yarn.lock | 38 +- 15 files changed, 1893 insertions(+), 1434 deletions(-) create mode 100644 packages/cli/test/helpers/sync-cdk-version.js diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index 7914d33d00..519628d1ba 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -9,12 +9,12 @@ "keywords": [], "author": "", "dependencies": { - "@aws-cdk/aws-s3": "1.55.0", - "@aws-cdk/core": "1.55.0", + "@aws-cdk/aws-s3": "1.61.0", + "@aws-cdk/core": "1.61.0", "@serverless-stack/resources": "../../../resources" }, "license": "ISC", "devDependencies": { - "@aws-cdk/assert": "1.55.0" + "@aws-cdk/assert": "1.61.0" } } diff --git a/packages/cli/test/base-ts/yarn.lock b/packages/cli/test/base-ts/yarn.lock index 97406d84bd..8f3ca49b15 100644 --- a/packages/cli/test/base-ts/yarn.lock +++ b/packages/cli/test/base-ts/yarn.lock @@ -2,110 +2,110 @@ # yarn lockfile v1 -"@aws-cdk/assert@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.55.0.tgz#04114356c911afae0c26b99f6cd91823c2676e9b" - integrity sha512-f+EXzBpFPl305EnGXH3DJLY/X51cU/u4enCE9BdCq4AnyR3/eqGpKuhav3lxZ0Yu704j9wZKd2M+3Hn2PPjWvA== +"@aws-cdk/assert@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.61.0.tgz#c1dbbf71fd64beb067a6e6237e03686319acaaa7" + integrity sha512-avvDVpyd8zLMT0HEW1K2ngP5U8CHu+BtPinUkLpLXVJ+Cr5K12plnk84+BOWe1NhM9/bqC4b1KA0c6MzIzgREA== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cloudformation-diff" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-events@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.55.0.tgz#3d784b0bf7ac2a2ebe6e52a9b89365d30bdd9398" - integrity sha512-jL9bygowe/6kYoAIApBcYi92zSjSxyn43CfOOILkplEsxdg3nNKfgnkQ4JgS1WwCuBNOhPAY6Zzc6bLKDi4Igw== + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cloudformation-diff" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-events@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" + integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-iam@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.55.0.tgz#fedac6b83a9a7ee48e4cda6d877f684f1dac0056" - integrity sha512-cAKQN1sEdDXZ2xFOOoWQskDh/GuQS81m6Qd/o6KQeFli8ftXSlD5dq5+UIs+oHBwhE8xwYJLbHDx79L3lQcMug== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-iam@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" + integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== dependencies: - "@aws-cdk/core" "1.55.0" - "@aws-cdk/region-info" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-kms@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.55.0.tgz#eaaa9b2ea9b7f65d3bdcab8109104477b2ff2baf" - integrity sha512-GSNKEn2w5QwKF+vwlz0N9TPnRh/p/tOFHb+AuNmNq4y2f3c3rTmW/anJu+ISE5qIVzTnev6bLQ+y7Iidt8aXKQ== + "@aws-cdk/core" "1.61.0" + "@aws-cdk/region-info" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-kms@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" + integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-s3@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.55.0.tgz#41a0f134608fa068d0ea2b451a5ec039da4ca372" - integrity sha512-VNBTw+ADXcNuIi+ziGpEiGN0kxE/32MGUK6esePMxRr+zv9JqE4q0YwiSSjp0FWnM1g3mufkergXfNcGCCPMrw== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-s3@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" + integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== dependencies: - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/cfnspec@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.55.0.tgz#6a6f78b0269ff8dae55fc2e986cca7469937e3fb" - integrity sha512-Bg4tTgtKMjBKWtyP2/V0atb3TmqshIW+j61gRigEhom1aS49QzvA6YpTjv6vzylQIH0+hdLYiCX6brBiYEXhTg== + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/cfnspec@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.61.0.tgz#69e998ab83c0a478b76e1c5deb8484171dfd95f9" + integrity sha512-Ss5N3unY6iVh9SjYAYvTyvhdb7Kaz6dVFeV8K68UGewiFcHpC5tQi3YmlVBw3HCgKoRt20emiHAfmdfeGO/PUQ== dependencies: - md5 "^2.2.1" + md5 "^2.3.0" -"@aws-cdk/cloud-assembly-schema@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" - integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== +"@aws-cdk/cloud-assembly-schema@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" + integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== dependencies: jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/cloudformation-diff@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.55.0.tgz#f39fb63bd6388c2401373bf200575efe513a5045" - integrity sha512-lBFiLQXaJmf4hR+RzSXwAGun/NgANzK5p/Qm5ETgqTLVPRksJJruaFgFO/Pr0qIRpDbtxrkigoeFZxCgFkFqAQ== +"@aws-cdk/cloudformation-diff@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.61.0.tgz#8acb549fd1dd819aa61dfed47e011b44827045a8" + integrity sha512-TrrmywhYkXxGNTmDd1k2biJMVtEvb0QcbZ/IGM6biMXIJ+wsjw/n5snvwciQ8/PHZmsUYk67qulGdso1rpy06Q== dependencies: - "@aws-cdk/cfnspec" "1.55.0" + "@aws-cdk/cfnspec" "1.61.0" colors "^1.4.0" diff "^4.0.2" fast-deep-equal "^3.1.3" string-width "^4.2.0" table "^5.4.6" -"@aws-cdk/core@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" - integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== +"@aws-cdk/core@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" + integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" fs-extra "^9.0.1" minimatch "^3.0.4" -"@aws-cdk/cx-api@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" - integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== +"@aws-cdk/cx-api@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" + integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" semver "^7.2.2" -"@aws-cdk/region-info@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" - integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== +"@aws-cdk/region-info@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" + integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== "@serverless-stack/resources@../../../resources": - version "0.0.15" + version "0.1.3" dependencies: - "@aws-cdk/core" "1.55.0" + "@aws-cdk/core" "1.61.0" ajv@^6.10.2: version "6.12.3" @@ -184,7 +184,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.2: +constructs@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== @@ -273,7 +273,7 @@ lodash@^4.17.14: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== -md5@^2.2.1: +md5@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index 6c33175093..c5b3fa0f54 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -13,10 +13,10 @@ "author": "", "dependencies": { "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-cognito": "1.55.0", - "@aws-cdk/aws-dynamodb": "1.55.0", - "@aws-cdk/aws-iam": "1.55.0", - "@aws-cdk/core": "1.55.0" + "@aws-cdk/aws-cognito": "1.61.0", + "@aws-cdk/aws-dynamodb": "1.61.0", + "@aws-cdk/aws-iam": "1.61.0", + "@aws-cdk/core": "1.61.0" }, "license": "ISC" } diff --git a/packages/cli/test/base/yarn.lock b/packages/cli/test/base/yarn.lock index 925f3fd94d..78a05bdeea 100644 --- a/packages/cli/test/base/yarn.lock +++ b/packages/cli/test/base/yarn.lock @@ -2,306 +2,309 @@ # yarn lockfile v1 -"@aws-cdk/assets@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.55.0.tgz#02442aea514d08b8f1fb744a3e3f944ab9a5e389" - integrity sha512-fOdk2eW8GEgS9vwgpt/BljV1IvCZ/Et7zYcL331+3XAxZpptOYDjNvV/tfhadX9fe1DhwZnsdqQqDO7eAY2+ig== +"@aws-cdk/assets@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.61.0.tgz#9702ba8ef5b3c45ec47e0530006d63dc0685a5ff" + integrity sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA== dependencies: - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-applicationautoscaling@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.55.0.tgz#ba0a1ee4b8bbe5f565c8d76d32408fcfdd8ba046" - integrity sha512-6BCvybrCYqhmtIckpAdDmNvn6B85+D1tL0ZJofiF8/0DOvuV5noZyzJwvwMO4q/WLzqavxoMSxBd7OswVX3trw== + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-applicationautoscaling@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz#8129984ba0185bbb525fd8ef6328c5c84e51e4e5" + integrity sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw== dependencies: - "@aws-cdk/aws-autoscaling-common" "1.55.0" - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-autoscaling-common@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.55.0.tgz#dc0f64351b2d388d9a195f4316a76ec349cee3f5" - integrity sha512-uQTjJmez/2QOYjmwLhQ/nQg4ywsoWvciS/y55nIlp409Ttuw/RapsrRhVAj3q58/3uTERuIUha4vpNe5C2gUKA== + "@aws-cdk/aws-autoscaling-common" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-autoscaling-common@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz#9e7f6a8669b36001b846d90fa8cb65d8b4edb27b" + integrity sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-certificatemanager@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.55.0.tgz#3b7d34e63ca47310778ed3354411bfa0c1f032af" - integrity sha512-nSJNpm1sPKhde1tvZoKiNxdK7jMrh3YSIGL8XsGE0MkNUIFJFu9NQA8JysCs1Fl+WUM2F18KX3OpmXUuzMbrug== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-certificatemanager@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.61.0.tgz#2362854c86f7b7f8344aec6dda9e84eb7017acc0" + integrity sha512-sTLmDyh8aER9ovvXuK1Q8Jcs1PY1H0W5Rg2ueCZvCNO5NktGsbt5oYZZiDFyIEtuASuArGp0XjkLP+qtPC6J3w== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/aws-route53" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-cloudformation@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.55.0.tgz#bf902768eb09623ae8e9439e1cde03619e3cd62c" - integrity sha512-Jd8ArtzRv6gKKrGlwMXnn5Gsg3xv8V0esRn3P9jfoNR7qMkH/u2O9mGJ8C2UXMdeAeDPJld0Xk5DxFYtHFrx2Q== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/aws-route53" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-cloudformation@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.61.0.tgz#6810e5327aa53b6d73cb337af340db152284aad7" + integrity sha512-e7mti0sWR6Sf4tav36bu379kkG5E33VMPLZaT8RkhXkIl97c1OaGHVx5G1Oe5DiHka08c+PA6da8ahkrR1wSkQ== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-sns" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-cloudwatch@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.55.0.tgz#3e58110d008b9dc0c0cd8a8973b4f0b1ca385fc3" - integrity sha512-WxJyDnrYHH7ox/1gWe4v+TfFR6LC7Q/bQS5jfdG1Wm3ZHzlSjOegcIw7jrkOXY5QI6N4jHM5bVwpQgX9cS8/dQ== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-sns" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-cloudwatch@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz#3c0171ca76d086da424c1b4148a53c4d68dd885a" + integrity sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-codeguruprofiler@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.55.0.tgz#9e1504db79fe469dbd1678b9ed1e020f30b816c8" - integrity sha512-MeXlEPAQjhCOs7+u1Q+Stva97E/QkE37E5EgoNRWVMoel8TPlfg3/ogYlsvJzfh2/7N11Z2jsU2kPaFw0czdfw== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-codeguruprofiler@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz#1ace4c61a4a7b916f4dbe28070b5b914949e6f06" + integrity sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" -"@aws-cdk/aws-cognito@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.55.0.tgz#a8891bc6f023c88cce8c919be509751a424e7f0b" - integrity sha512-necM/Ef7HYgExaSqRh5ximMW6AbDhtj0ARZv3jLN1VTCc7VHgUp+8kkBQ7XUwJVzAhD1D1yumpq51ymyy5vREA== +"@aws-cdk/aws-cognito@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.61.0.tgz#0fd460e4bfae70d335c02befd4f997de9f9d8ded" + integrity sha512-MiZxDVdStTX1uD6NOpeMoKtL/DMyYONG6Hh8t851bLgxjZDQw8W7ZCWTLBjDIymt7m/seFNF3bWdYD883S17fQ== dependencies: - "@aws-cdk/aws-certificatemanager" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/custom-resources" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-dynamodb@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.55.0.tgz#da2da006d03933385cd9aebf2404e175cc730cda" - integrity sha512-MqiTSZ2B1XFoQ28Y9GCtSPRyQGtTwxJxOiECXQZ3axnCz/3x3HFilvvBL31QsBmGkkRuiCNZ67u6+VUCn3J+LQ== + "@aws-cdk/aws-certificatemanager" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/custom-resources" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-dynamodb@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.61.0.tgz#3d9b1ffd6eb965152a2456de1b08625d3f3ee907" + integrity sha512-Qd87xJNTjCRBQ//H4WA6Lif3VuA9QuyKyterlmTGnmrUsAqubkKtxu/lLvMp0gQb9LzjQ5Hn9238v1s8rDBDlw== dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.55.0" - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/custom-resources" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-ec2@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.55.0.tgz#a6c2ab965bd75dd3f255027c11314775289e53a8" - integrity sha512-3FQ6X7BALEFMScsYUNCf+wAY4Zw6FE8V42S6i/OVZhZXY3/iZqiJh/BAJruj/VM1QO9nPRYdF5lnTwFssp17PQ== + "@aws-cdk/aws-applicationautoscaling" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/custom-resources" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-ec2@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz#d39b1f5356c57089b963bbe4644adc02fd12a4bf" + integrity sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ== dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-ssm" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - "@aws-cdk/region-info" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-efs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.55.0.tgz#dfff8ceb245d2cc9f03b158c9d55b64d6a57c0cf" - integrity sha512-BGbF9vby78BNAPwyqzdsErrPgkC0ZCmhIekiTpMdlmhNFuMf6GJMOXY2rr81N7mW6HaAMe6Lqd6w+Te/G0IzHA== + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/aws-ssm" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + "@aws-cdk/region-info" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-efs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz#c4d66d0d928c01c8018c1c8bc75a1c5097d649ce" + integrity sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg== dependencies: - "@aws-cdk/aws-ec2" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-events@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.55.0.tgz#3d784b0bf7ac2a2ebe6e52a9b89365d30bdd9398" - integrity sha512-jL9bygowe/6kYoAIApBcYi92zSjSxyn43CfOOILkplEsxdg3nNKfgnkQ4JgS1WwCuBNOhPAY6Zzc6bLKDi4Igw== + "@aws-cdk/aws-ec2" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-events@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" + integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-iam@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.55.0.tgz#fedac6b83a9a7ee48e4cda6d877f684f1dac0056" - integrity sha512-cAKQN1sEdDXZ2xFOOoWQskDh/GuQS81m6Qd/o6KQeFli8ftXSlD5dq5+UIs+oHBwhE8xwYJLbHDx79L3lQcMug== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-iam@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" + integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== dependencies: - "@aws-cdk/core" "1.55.0" - "@aws-cdk/region-info" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-kms@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.55.0.tgz#eaaa9b2ea9b7f65d3bdcab8109104477b2ff2baf" - integrity sha512-GSNKEn2w5QwKF+vwlz0N9TPnRh/p/tOFHb+AuNmNq4y2f3c3rTmW/anJu+ISE5qIVzTnev6bLQ+y7Iidt8aXKQ== + "@aws-cdk/core" "1.61.0" + "@aws-cdk/region-info" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-kms@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" + integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-lambda@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.55.0.tgz#751c89a64797bc4ae1ea0801fb39083752455ff9" - integrity sha512-/5df6QR3vbJr/G5/HFmxG/QvxPIjSdzSgaXjK7a/7tzxRISWPaYLN4sVZQHVDYHPe+WZ291uulYE+juiyGrvqQ== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-lambda@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz#65b2fb456f6c2d0566401bd3d265f5bae47d6346" + integrity sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg== dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-codeguruprofiler" "1.55.0" - "@aws-cdk/aws-ec2" "1.55.0" - "@aws-cdk/aws-efs" "1.55.0" - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-s3-assets" "1.55.0" - "@aws-cdk/aws-sqs" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-logs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.55.0.tgz#267aa66bff737e47be5dc3d326ea936cf73c62e6" - integrity sha512-sUflJ+MuB69MwHhtWZUY8jf2JLxXXbmGzs/T3VHnscULAsQoo6Tu5v/kXvtXU04CC8YxUG6+hQkO6bl3bF6M1Q== + "@aws-cdk/aws-applicationautoscaling" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-codeguruprofiler" "1.61.0" + "@aws-cdk/aws-ec2" "1.61.0" + "@aws-cdk/aws-efs" "1.61.0" + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/aws-sqs" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-logs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz#430bb5fc87ec606416ffb0869f04754185092a21" + integrity sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw== dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-route53@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.55.0.tgz#b6de1cb4ece3897e506ded8caefad6c14c53a033" - integrity sha512-HI0UJLa73iLUv+mnZjOPQmcfhESvqNoUCPN3PwEBAwGECVk/gKBomNV7g/dYNE1MfRHdi/4nIM3T7yC6Br+zNw== + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-route53@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.61.0.tgz#f4b50ba975f687dcbc763b1cb98eaf0c6ac22b36" + integrity sha512-VKfEtqEMXXPBel3/QQMET0jmw7qyAXWOywzSPQ1/8J6th2q9hMzLQOr6fkuf1rTdVMNjLXhHqXq/W+JinfCUqw== dependencies: - "@aws-cdk/aws-ec2" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-s3-assets@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.55.0.tgz#7243ee94f767d6686b6b9c0caaf9af3aa38a656d" - integrity sha512-zyYFRw1xFmuONiuj9ym9HsnYyAeE2a1L1q2/vpvlXARLIsk7JDG37nnnh40ccm2/YQAoVLXqKZb+VTS5cUKhgA== + "@aws-cdk/aws-ec2" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-s3-assets@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz#8512ac0e16818bc78eff010d15d6cc99a7d8fccf" + integrity sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA== dependencies: - "@aws-cdk/assets" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-s3@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.55.0.tgz#41a0f134608fa068d0ea2b451a5ec039da4ca372" - integrity sha512-VNBTw+ADXcNuIi+ziGpEiGN0kxE/32MGUK6esePMxRr+zv9JqE4q0YwiSSjp0FWnM1g3mufkergXfNcGCCPMrw== + "@aws-cdk/assets" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-s3@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" + integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== dependencies: - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-sns@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.55.0.tgz#e3a6ef9b7235e39dba8a3f172da31d63e0d961b1" - integrity sha512-WR2ogCi6ngMsZAxq1O71WTxYz1GC9oSxK/K1sj7lboDW712OJXgaz5Giat073TYosyuiZD0uUvSPRvBfxbfEIg== + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-sns@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.61.0.tgz#c82f9b224b7ebf3e48cd9433456156e5d3f1df89" + integrity sha512-jmJmZXidJAJTg4lPnxMm26QR3ovMYb/89NBWnIRwGdVGcZ7nrWUkC0JNPQMbP+EvUFdh/9xdFVP4JvvzZzoy0w== dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-sqs" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-sqs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.55.0.tgz#b70e100e941aad369557ae6ed991a40972b4e20b" - integrity sha512-CpXi33lBg8PgMJvxwRpPOQmD+DLUaUHxRpjjjLP6tfUDwk5cIGwRG+QSTd4FmNcDm3Cvb1x0WI8PSdwfgaOSiw== + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-sqs" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-sqs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz#b2d1d7a5d27d36d1580a3cb500daf417037da492" + integrity sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA== dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-ssm@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.55.0.tgz#5b51cc6875956829df499b3c9ed34b41e47c63ce" - integrity sha512-lTJj0rDZS5qVapV4WI/yfm3B235hJtMgDHMRMoOAZTNQSgHFvp2/5l1gSKOfqlanS90aeLUIfEXWlXALnwveLg== + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-ssm@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz#229308cfce757f8b3f75d12bf276ce4f8042076f" + integrity sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/cloud-assembly-schema@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" - integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/cloud-assembly-schema@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" + integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== dependencies: jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/core@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" - integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== +"@aws-cdk/core@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" + integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" fs-extra "^9.0.1" minimatch "^3.0.4" -"@aws-cdk/custom-resources@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.55.0.tgz#af33b6dc28a9431d60cd6e7774a166919a7622be" - integrity sha512-AKc9y8RYAU4J2b6rB902jq66vwOzshsgNYl5dTS8cFxdCjR4YthuaAyatxXMBJz4SepL+X6kwjxF1ed6/DFFFQ== +"@aws-cdk/custom-resources@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.61.0.tgz#03749f4122e46504fd1b3b3b9a11aa3578f269bf" + integrity sha512-etnHE7A0+J5w1L/m+KxEbPQ7LgtVYvEUV6naqRp5uIsTBaJ9sCQ+q43Y3Fj+g3NMigm8C2fKg5FmiFE6kiymDQ== dependencies: - "@aws-cdk/aws-cloudformation" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-sns" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/cx-api@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" - integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + "@aws-cdk/aws-cloudformation" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-sns" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/cx-api@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" + integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" semver "^7.2.2" -"@aws-cdk/region-info@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" - integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== +"@aws-cdk/region-info@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" + integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== "@serverless-stack/resources@../../../resources": - version "0.0.14" + version "0.1.3" dependencies: - "@aws-cdk/core" "1.55.0" + "@aws-cdk/core" "1.61.0" at-least-node@^1.0.0: version "1.0.0" @@ -326,7 +329,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.2: +constructs@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index 5a527f49c4..42af884e7f 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -12,7 +12,7 @@ "author": "", "dependencies": { "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-dynamodb": "1.55.0" + "@aws-cdk/aws-dynamodb": "1.61.0" }, "license": "ISC" } diff --git a/packages/cli/test/config/yarn.lock b/packages/cli/test/config/yarn.lock index 1ccc313014..bd5fb40701 100644 --- a/packages/cli/test/config/yarn.lock +++ b/packages/cli/test/config/yarn.lock @@ -2,272 +2,275 @@ # yarn lockfile v1 -"@aws-cdk/assets@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.55.0.tgz#02442aea514d08b8f1fb744a3e3f944ab9a5e389" - integrity sha512-fOdk2eW8GEgS9vwgpt/BljV1IvCZ/Et7zYcL331+3XAxZpptOYDjNvV/tfhadX9fe1DhwZnsdqQqDO7eAY2+ig== +"@aws-cdk/assets@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.61.0.tgz#9702ba8ef5b3c45ec47e0530006d63dc0685a5ff" + integrity sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA== dependencies: - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-applicationautoscaling@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.55.0.tgz#ba0a1ee4b8bbe5f565c8d76d32408fcfdd8ba046" - integrity sha512-6BCvybrCYqhmtIckpAdDmNvn6B85+D1tL0ZJofiF8/0DOvuV5noZyzJwvwMO4q/WLzqavxoMSxBd7OswVX3trw== + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-applicationautoscaling@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz#8129984ba0185bbb525fd8ef6328c5c84e51e4e5" + integrity sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw== dependencies: - "@aws-cdk/aws-autoscaling-common" "1.55.0" - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-autoscaling-common@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.55.0.tgz#dc0f64351b2d388d9a195f4316a76ec349cee3f5" - integrity sha512-uQTjJmez/2QOYjmwLhQ/nQg4ywsoWvciS/y55nIlp409Ttuw/RapsrRhVAj3q58/3uTERuIUha4vpNe5C2gUKA== + "@aws-cdk/aws-autoscaling-common" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-autoscaling-common@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz#9e7f6a8669b36001b846d90fa8cb65d8b4edb27b" + integrity sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-cloudformation@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.55.0.tgz#bf902768eb09623ae8e9439e1cde03619e3cd62c" - integrity sha512-Jd8ArtzRv6gKKrGlwMXnn5Gsg3xv8V0esRn3P9jfoNR7qMkH/u2O9mGJ8C2UXMdeAeDPJld0Xk5DxFYtHFrx2Q== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-cloudformation@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.61.0.tgz#6810e5327aa53b6d73cb337af340db152284aad7" + integrity sha512-e7mti0sWR6Sf4tav36bu379kkG5E33VMPLZaT8RkhXkIl97c1OaGHVx5G1Oe5DiHka08c+PA6da8ahkrR1wSkQ== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-sns" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-cloudwatch@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.55.0.tgz#3e58110d008b9dc0c0cd8a8973b4f0b1ca385fc3" - integrity sha512-WxJyDnrYHH7ox/1gWe4v+TfFR6LC7Q/bQS5jfdG1Wm3ZHzlSjOegcIw7jrkOXY5QI6N4jHM5bVwpQgX9cS8/dQ== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-sns" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-cloudwatch@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz#3c0171ca76d086da424c1b4148a53c4d68dd885a" + integrity sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-codeguruprofiler@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.55.0.tgz#9e1504db79fe469dbd1678b9ed1e020f30b816c8" - integrity sha512-MeXlEPAQjhCOs7+u1Q+Stva97E/QkE37E5EgoNRWVMoel8TPlfg3/ogYlsvJzfh2/7N11Z2jsU2kPaFw0czdfw== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-codeguruprofiler@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz#1ace4c61a4a7b916f4dbe28070b5b914949e6f06" + integrity sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" -"@aws-cdk/aws-dynamodb@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.55.0.tgz#da2da006d03933385cd9aebf2404e175cc730cda" - integrity sha512-MqiTSZ2B1XFoQ28Y9GCtSPRyQGtTwxJxOiECXQZ3axnCz/3x3HFilvvBL31QsBmGkkRuiCNZ67u6+VUCn3J+LQ== +"@aws-cdk/aws-dynamodb@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.61.0.tgz#3d9b1ffd6eb965152a2456de1b08625d3f3ee907" + integrity sha512-Qd87xJNTjCRBQ//H4WA6Lif3VuA9QuyKyterlmTGnmrUsAqubkKtxu/lLvMp0gQb9LzjQ5Hn9238v1s8rDBDlw== dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.55.0" - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/custom-resources" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-ec2@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.55.0.tgz#a6c2ab965bd75dd3f255027c11314775289e53a8" - integrity sha512-3FQ6X7BALEFMScsYUNCf+wAY4Zw6FE8V42S6i/OVZhZXY3/iZqiJh/BAJruj/VM1QO9nPRYdF5lnTwFssp17PQ== + "@aws-cdk/aws-applicationautoscaling" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/custom-resources" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-ec2@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz#d39b1f5356c57089b963bbe4644adc02fd12a4bf" + integrity sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ== dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-ssm" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - "@aws-cdk/region-info" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-efs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.55.0.tgz#dfff8ceb245d2cc9f03b158c9d55b64d6a57c0cf" - integrity sha512-BGbF9vby78BNAPwyqzdsErrPgkC0ZCmhIekiTpMdlmhNFuMf6GJMOXY2rr81N7mW6HaAMe6Lqd6w+Te/G0IzHA== + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/aws-ssm" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + "@aws-cdk/region-info" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-efs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz#c4d66d0d928c01c8018c1c8bc75a1c5097d649ce" + integrity sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg== dependencies: - "@aws-cdk/aws-ec2" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-events@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.55.0.tgz#3d784b0bf7ac2a2ebe6e52a9b89365d30bdd9398" - integrity sha512-jL9bygowe/6kYoAIApBcYi92zSjSxyn43CfOOILkplEsxdg3nNKfgnkQ4JgS1WwCuBNOhPAY6Zzc6bLKDi4Igw== + "@aws-cdk/aws-ec2" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-events@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" + integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-iam@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.55.0.tgz#fedac6b83a9a7ee48e4cda6d877f684f1dac0056" - integrity sha512-cAKQN1sEdDXZ2xFOOoWQskDh/GuQS81m6Qd/o6KQeFli8ftXSlD5dq5+UIs+oHBwhE8xwYJLbHDx79L3lQcMug== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-iam@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" + integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== dependencies: - "@aws-cdk/core" "1.55.0" - "@aws-cdk/region-info" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-kms@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.55.0.tgz#eaaa9b2ea9b7f65d3bdcab8109104477b2ff2baf" - integrity sha512-GSNKEn2w5QwKF+vwlz0N9TPnRh/p/tOFHb+AuNmNq4y2f3c3rTmW/anJu+ISE5qIVzTnev6bLQ+y7Iidt8aXKQ== + "@aws-cdk/core" "1.61.0" + "@aws-cdk/region-info" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-kms@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" + integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-lambda@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.55.0.tgz#751c89a64797bc4ae1ea0801fb39083752455ff9" - integrity sha512-/5df6QR3vbJr/G5/HFmxG/QvxPIjSdzSgaXjK7a/7tzxRISWPaYLN4sVZQHVDYHPe+WZ291uulYE+juiyGrvqQ== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-lambda@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz#65b2fb456f6c2d0566401bd3d265f5bae47d6346" + integrity sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg== dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-codeguruprofiler" "1.55.0" - "@aws-cdk/aws-ec2" "1.55.0" - "@aws-cdk/aws-efs" "1.55.0" - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-s3-assets" "1.55.0" - "@aws-cdk/aws-sqs" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-logs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.55.0.tgz#267aa66bff737e47be5dc3d326ea936cf73c62e6" - integrity sha512-sUflJ+MuB69MwHhtWZUY8jf2JLxXXbmGzs/T3VHnscULAsQoo6Tu5v/kXvtXU04CC8YxUG6+hQkO6bl3bF6M1Q== + "@aws-cdk/aws-applicationautoscaling" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-codeguruprofiler" "1.61.0" + "@aws-cdk/aws-ec2" "1.61.0" + "@aws-cdk/aws-efs" "1.61.0" + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/aws-sqs" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-logs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz#430bb5fc87ec606416ffb0869f04754185092a21" + integrity sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw== dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-s3-assets@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.55.0.tgz#7243ee94f767d6686b6b9c0caaf9af3aa38a656d" - integrity sha512-zyYFRw1xFmuONiuj9ym9HsnYyAeE2a1L1q2/vpvlXARLIsk7JDG37nnnh40ccm2/YQAoVLXqKZb+VTS5cUKhgA== + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-s3-assets@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz#8512ac0e16818bc78eff010d15d6cc99a7d8fccf" + integrity sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA== dependencies: - "@aws-cdk/assets" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-s3@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.55.0.tgz#41a0f134608fa068d0ea2b451a5ec039da4ca372" - integrity sha512-VNBTw+ADXcNuIi+ziGpEiGN0kxE/32MGUK6esePMxRr+zv9JqE4q0YwiSSjp0FWnM1g3mufkergXfNcGCCPMrw== + "@aws-cdk/assets" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-s3@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" + integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== dependencies: - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-sns@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.55.0.tgz#e3a6ef9b7235e39dba8a3f172da31d63e0d961b1" - integrity sha512-WR2ogCi6ngMsZAxq1O71WTxYz1GC9oSxK/K1sj7lboDW712OJXgaz5Giat073TYosyuiZD0uUvSPRvBfxbfEIg== + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-sns@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.61.0.tgz#c82f9b224b7ebf3e48cd9433456156e5d3f1df89" + integrity sha512-jmJmZXidJAJTg4lPnxMm26QR3ovMYb/89NBWnIRwGdVGcZ7nrWUkC0JNPQMbP+EvUFdh/9xdFVP4JvvzZzoy0w== dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-sqs" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-sqs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.55.0.tgz#b70e100e941aad369557ae6ed991a40972b4e20b" - integrity sha512-CpXi33lBg8PgMJvxwRpPOQmD+DLUaUHxRpjjjLP6tfUDwk5cIGwRG+QSTd4FmNcDm3Cvb1x0WI8PSdwfgaOSiw== + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-sqs" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-sqs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz#b2d1d7a5d27d36d1580a3cb500daf417037da492" + integrity sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA== dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-ssm@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.55.0.tgz#5b51cc6875956829df499b3c9ed34b41e47c63ce" - integrity sha512-lTJj0rDZS5qVapV4WI/yfm3B235hJtMgDHMRMoOAZTNQSgHFvp2/5l1gSKOfqlanS90aeLUIfEXWlXALnwveLg== + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-ssm@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz#229308cfce757f8b3f75d12bf276ce4f8042076f" + integrity sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/cloud-assembly-schema@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" - integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/cloud-assembly-schema@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" + integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== dependencies: jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/core@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" - integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== +"@aws-cdk/core@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" + integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" fs-extra "^9.0.1" minimatch "^3.0.4" -"@aws-cdk/custom-resources@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.55.0.tgz#af33b6dc28a9431d60cd6e7774a166919a7622be" - integrity sha512-AKc9y8RYAU4J2b6rB902jq66vwOzshsgNYl5dTS8cFxdCjR4YthuaAyatxXMBJz4SepL+X6kwjxF1ed6/DFFFQ== +"@aws-cdk/custom-resources@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.61.0.tgz#03749f4122e46504fd1b3b3b9a11aa3578f269bf" + integrity sha512-etnHE7A0+J5w1L/m+KxEbPQ7LgtVYvEUV6naqRp5uIsTBaJ9sCQ+q43Y3Fj+g3NMigm8C2fKg5FmiFE6kiymDQ== dependencies: - "@aws-cdk/aws-cloudformation" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-sns" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/cx-api@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" - integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + "@aws-cdk/aws-cloudformation" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-sns" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/cx-api@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" + integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" semver "^7.2.2" -"@aws-cdk/region-info@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" - integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== +"@aws-cdk/region-info@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" + integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== "@serverless-stack/resources@../../../resources": - version "0.0.7" + version "0.1.3" dependencies: - "@aws-cdk/core" "1.55.0" + "@aws-cdk/core" "1.61.0" at-least-node@^1.0.0: version "1.0.0" @@ -292,7 +295,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.2: +constructs@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index bb67488c3c..ccab7f2b9f 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -10,7 +10,7 @@ "author": "", "dependencies": { "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-dynamodb": "1.55.0" + "@aws-cdk/aws-dynamodb": "1.61.0" }, "license": "ISC" } diff --git a/packages/cli/test/context/yarn.lock b/packages/cli/test/context/yarn.lock index 1ccc313014..bd5fb40701 100644 --- a/packages/cli/test/context/yarn.lock +++ b/packages/cli/test/context/yarn.lock @@ -2,272 +2,275 @@ # yarn lockfile v1 -"@aws-cdk/assets@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.55.0.tgz#02442aea514d08b8f1fb744a3e3f944ab9a5e389" - integrity sha512-fOdk2eW8GEgS9vwgpt/BljV1IvCZ/Et7zYcL331+3XAxZpptOYDjNvV/tfhadX9fe1DhwZnsdqQqDO7eAY2+ig== +"@aws-cdk/assets@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.61.0.tgz#9702ba8ef5b3c45ec47e0530006d63dc0685a5ff" + integrity sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA== dependencies: - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-applicationautoscaling@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.55.0.tgz#ba0a1ee4b8bbe5f565c8d76d32408fcfdd8ba046" - integrity sha512-6BCvybrCYqhmtIckpAdDmNvn6B85+D1tL0ZJofiF8/0DOvuV5noZyzJwvwMO4q/WLzqavxoMSxBd7OswVX3trw== + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-applicationautoscaling@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz#8129984ba0185bbb525fd8ef6328c5c84e51e4e5" + integrity sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw== dependencies: - "@aws-cdk/aws-autoscaling-common" "1.55.0" - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-autoscaling-common@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.55.0.tgz#dc0f64351b2d388d9a195f4316a76ec349cee3f5" - integrity sha512-uQTjJmez/2QOYjmwLhQ/nQg4ywsoWvciS/y55nIlp409Ttuw/RapsrRhVAj3q58/3uTERuIUha4vpNe5C2gUKA== + "@aws-cdk/aws-autoscaling-common" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-autoscaling-common@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz#9e7f6a8669b36001b846d90fa8cb65d8b4edb27b" + integrity sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-cloudformation@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.55.0.tgz#bf902768eb09623ae8e9439e1cde03619e3cd62c" - integrity sha512-Jd8ArtzRv6gKKrGlwMXnn5Gsg3xv8V0esRn3P9jfoNR7qMkH/u2O9mGJ8C2UXMdeAeDPJld0Xk5DxFYtHFrx2Q== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-cloudformation@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.61.0.tgz#6810e5327aa53b6d73cb337af340db152284aad7" + integrity sha512-e7mti0sWR6Sf4tav36bu379kkG5E33VMPLZaT8RkhXkIl97c1OaGHVx5G1Oe5DiHka08c+PA6da8ahkrR1wSkQ== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-sns" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-cloudwatch@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.55.0.tgz#3e58110d008b9dc0c0cd8a8973b4f0b1ca385fc3" - integrity sha512-WxJyDnrYHH7ox/1gWe4v+TfFR6LC7Q/bQS5jfdG1Wm3ZHzlSjOegcIw7jrkOXY5QI6N4jHM5bVwpQgX9cS8/dQ== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-sns" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-cloudwatch@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz#3c0171ca76d086da424c1b4148a53c4d68dd885a" + integrity sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-codeguruprofiler@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.55.0.tgz#9e1504db79fe469dbd1678b9ed1e020f30b816c8" - integrity sha512-MeXlEPAQjhCOs7+u1Q+Stva97E/QkE37E5EgoNRWVMoel8TPlfg3/ogYlsvJzfh2/7N11Z2jsU2kPaFw0czdfw== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-codeguruprofiler@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz#1ace4c61a4a7b916f4dbe28070b5b914949e6f06" + integrity sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" -"@aws-cdk/aws-dynamodb@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.55.0.tgz#da2da006d03933385cd9aebf2404e175cc730cda" - integrity sha512-MqiTSZ2B1XFoQ28Y9GCtSPRyQGtTwxJxOiECXQZ3axnCz/3x3HFilvvBL31QsBmGkkRuiCNZ67u6+VUCn3J+LQ== +"@aws-cdk/aws-dynamodb@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.61.0.tgz#3d9b1ffd6eb965152a2456de1b08625d3f3ee907" + integrity sha512-Qd87xJNTjCRBQ//H4WA6Lif3VuA9QuyKyterlmTGnmrUsAqubkKtxu/lLvMp0gQb9LzjQ5Hn9238v1s8rDBDlw== dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.55.0" - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/custom-resources" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-ec2@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.55.0.tgz#a6c2ab965bd75dd3f255027c11314775289e53a8" - integrity sha512-3FQ6X7BALEFMScsYUNCf+wAY4Zw6FE8V42S6i/OVZhZXY3/iZqiJh/BAJruj/VM1QO9nPRYdF5lnTwFssp17PQ== + "@aws-cdk/aws-applicationautoscaling" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/custom-resources" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-ec2@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz#d39b1f5356c57089b963bbe4644adc02fd12a4bf" + integrity sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ== dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-ssm" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - "@aws-cdk/region-info" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-efs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.55.0.tgz#dfff8ceb245d2cc9f03b158c9d55b64d6a57c0cf" - integrity sha512-BGbF9vby78BNAPwyqzdsErrPgkC0ZCmhIekiTpMdlmhNFuMf6GJMOXY2rr81N7mW6HaAMe6Lqd6w+Te/G0IzHA== + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/aws-ssm" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + "@aws-cdk/region-info" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-efs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz#c4d66d0d928c01c8018c1c8bc75a1c5097d649ce" + integrity sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg== dependencies: - "@aws-cdk/aws-ec2" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-events@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.55.0.tgz#3d784b0bf7ac2a2ebe6e52a9b89365d30bdd9398" - integrity sha512-jL9bygowe/6kYoAIApBcYi92zSjSxyn43CfOOILkplEsxdg3nNKfgnkQ4JgS1WwCuBNOhPAY6Zzc6bLKDi4Igw== + "@aws-cdk/aws-ec2" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-events@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" + integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-iam@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.55.0.tgz#fedac6b83a9a7ee48e4cda6d877f684f1dac0056" - integrity sha512-cAKQN1sEdDXZ2xFOOoWQskDh/GuQS81m6Qd/o6KQeFli8ftXSlD5dq5+UIs+oHBwhE8xwYJLbHDx79L3lQcMug== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-iam@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" + integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== dependencies: - "@aws-cdk/core" "1.55.0" - "@aws-cdk/region-info" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-kms@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.55.0.tgz#eaaa9b2ea9b7f65d3bdcab8109104477b2ff2baf" - integrity sha512-GSNKEn2w5QwKF+vwlz0N9TPnRh/p/tOFHb+AuNmNq4y2f3c3rTmW/anJu+ISE5qIVzTnev6bLQ+y7Iidt8aXKQ== + "@aws-cdk/core" "1.61.0" + "@aws-cdk/region-info" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-kms@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" + integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-lambda@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.55.0.tgz#751c89a64797bc4ae1ea0801fb39083752455ff9" - integrity sha512-/5df6QR3vbJr/G5/HFmxG/QvxPIjSdzSgaXjK7a/7tzxRISWPaYLN4sVZQHVDYHPe+WZ291uulYE+juiyGrvqQ== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-lambda@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz#65b2fb456f6c2d0566401bd3d265f5bae47d6346" + integrity sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg== dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-codeguruprofiler" "1.55.0" - "@aws-cdk/aws-ec2" "1.55.0" - "@aws-cdk/aws-efs" "1.55.0" - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-s3-assets" "1.55.0" - "@aws-cdk/aws-sqs" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-logs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.55.0.tgz#267aa66bff737e47be5dc3d326ea936cf73c62e6" - integrity sha512-sUflJ+MuB69MwHhtWZUY8jf2JLxXXbmGzs/T3VHnscULAsQoo6Tu5v/kXvtXU04CC8YxUG6+hQkO6bl3bF6M1Q== + "@aws-cdk/aws-applicationautoscaling" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-codeguruprofiler" "1.61.0" + "@aws-cdk/aws-ec2" "1.61.0" + "@aws-cdk/aws-efs" "1.61.0" + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/aws-sqs" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-logs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz#430bb5fc87ec606416ffb0869f04754185092a21" + integrity sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw== dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-s3-assets@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.55.0.tgz#7243ee94f767d6686b6b9c0caaf9af3aa38a656d" - integrity sha512-zyYFRw1xFmuONiuj9ym9HsnYyAeE2a1L1q2/vpvlXARLIsk7JDG37nnnh40ccm2/YQAoVLXqKZb+VTS5cUKhgA== + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-s3-assets@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz#8512ac0e16818bc78eff010d15d6cc99a7d8fccf" + integrity sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA== dependencies: - "@aws-cdk/assets" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-s3@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.55.0.tgz#41a0f134608fa068d0ea2b451a5ec039da4ca372" - integrity sha512-VNBTw+ADXcNuIi+ziGpEiGN0kxE/32MGUK6esePMxRr+zv9JqE4q0YwiSSjp0FWnM1g3mufkergXfNcGCCPMrw== + "@aws-cdk/assets" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-s3@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" + integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== dependencies: - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-sns@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.55.0.tgz#e3a6ef9b7235e39dba8a3f172da31d63e0d961b1" - integrity sha512-WR2ogCi6ngMsZAxq1O71WTxYz1GC9oSxK/K1sj7lboDW712OJXgaz5Giat073TYosyuiZD0uUvSPRvBfxbfEIg== + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-sns@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.61.0.tgz#c82f9b224b7ebf3e48cd9433456156e5d3f1df89" + integrity sha512-jmJmZXidJAJTg4lPnxMm26QR3ovMYb/89NBWnIRwGdVGcZ7nrWUkC0JNPQMbP+EvUFdh/9xdFVP4JvvzZzoy0w== dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-sqs" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-sqs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.55.0.tgz#b70e100e941aad369557ae6ed991a40972b4e20b" - integrity sha512-CpXi33lBg8PgMJvxwRpPOQmD+DLUaUHxRpjjjLP6tfUDwk5cIGwRG+QSTd4FmNcDm3Cvb1x0WI8PSdwfgaOSiw== + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-sqs" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-sqs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz#b2d1d7a5d27d36d1580a3cb500daf417037da492" + integrity sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA== dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-ssm@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.55.0.tgz#5b51cc6875956829df499b3c9ed34b41e47c63ce" - integrity sha512-lTJj0rDZS5qVapV4WI/yfm3B235hJtMgDHMRMoOAZTNQSgHFvp2/5l1gSKOfqlanS90aeLUIfEXWlXALnwveLg== + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-ssm@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz#229308cfce757f8b3f75d12bf276ce4f8042076f" + integrity sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg== dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/cloud-assembly-schema@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" - integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/cloud-assembly-schema@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" + integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== dependencies: jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/core@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" - integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== +"@aws-cdk/core@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" + integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" fs-extra "^9.0.1" minimatch "^3.0.4" -"@aws-cdk/custom-resources@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.55.0.tgz#af33b6dc28a9431d60cd6e7774a166919a7622be" - integrity sha512-AKc9y8RYAU4J2b6rB902jq66vwOzshsgNYl5dTS8cFxdCjR4YthuaAyatxXMBJz4SepL+X6kwjxF1ed6/DFFFQ== +"@aws-cdk/custom-resources@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.61.0.tgz#03749f4122e46504fd1b3b3b9a11aa3578f269bf" + integrity sha512-etnHE7A0+J5w1L/m+KxEbPQ7LgtVYvEUV6naqRp5uIsTBaJ9sCQ+q43Y3Fj+g3NMigm8C2fKg5FmiFE6kiymDQ== dependencies: - "@aws-cdk/aws-cloudformation" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-sns" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/cx-api@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" - integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== + "@aws-cdk/aws-cloudformation" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-sns" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/cx-api@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" + integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" semver "^7.2.2" -"@aws-cdk/region-info@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" - integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== +"@aws-cdk/region-info@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" + integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== "@serverless-stack/resources@../../../resources": - version "0.0.7" + version "0.1.3" dependencies: - "@aws-cdk/core" "1.55.0" + "@aws-cdk/core" "1.61.0" at-least-node@^1.0.0: version "1.0.0" @@ -292,7 +295,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.2: +constructs@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== diff --git a/packages/cli/test/helpers/sync-cdk-version.js b/packages/cli/test/helpers/sync-cdk-version.js new file mode 100644 index 0000000000..2305663a6b --- /dev/null +++ b/packages/cli/test/helpers/sync-cdk-version.js @@ -0,0 +1,32 @@ +/** + * Gets the forked AWS CDK version from @serverless-stack/cli and writes to a temp file. + * Replaces the version in the template package.json. + */ + +const path = require("path"); +const replace = require("replace-in-file"); + +const sstCdkVersion = require(path.join(__dirname, "../../package.json")) + .dependencies["@serverless-stack/aws-cdk"]; +const cdkVersion = sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; + +try { + const results = replace.sync({ + //dry : true, + files: "test/*/package.json", + ignore: "test/mismatched-cdk-versions/package.json", + from: /"(@*aws-cdk.*)": "(\d+\.\d+\.\d+)"/g, + to: `"$1": "${cdkVersion}"`, + }); + + const changedFiles = results + .filter((result) => result.hasChanged) + .map((result) => result.file); + + if (changedFiles.length > 0) { + console.log("Updating CDK versions in tests:\n"); + console.log(" " + changedFiles.join("\n ") + "\n"); + } +} catch (error) { + console.error("Error occurred:", error); +} diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index 095f062f03..4bb43d86a3 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -12,14 +12,14 @@ "dependencies": { "@serverless-stack/cli": "../../../cli", "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-dynamodb": "1.55.0", - "@aws-cdk/aws-sns": "1.55.0", - "@aws-cdk/aws-sns-subscriptions": "1.55.0", - "@aws-cdk/aws-sqs": "1.55.0", - "@aws-cdk/core": "1.55.0" + "@aws-cdk/aws-dynamodb": "1.61.0", + "@aws-cdk/aws-sns": "1.61.0", + "@aws-cdk/aws-sns-subscriptions": "1.61.0", + "@aws-cdk/aws-sqs": "1.61.0", + "@aws-cdk/core": "1.61.0" }, "license": "ISC", "devDependencies": { - "@aws-cdk/assert": "1.55.0" + "@aws-cdk/assert": "1.61.0" } } diff --git a/packages/cli/test/jest-ts/yarn.lock b/packages/cli/test/jest-ts/yarn.lock index 0966603060..7ac73c4d04 100644 --- a/packages/cli/test/jest-ts/yarn.lock +++ b/packages/cli/test/jest-ts/yarn.lock @@ -2,252 +2,255 @@ # yarn lockfile v1 -"@aws-cdk/assert@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.55.0.tgz#04114356c911afae0c26b99f6cd91823c2676e9b" - integrity sha512-f+EXzBpFPl305EnGXH3DJLY/X51cU/u4enCE9BdCq4AnyR3/eqGpKuhav3lxZ0Yu704j9wZKd2M+3Hn2PPjWvA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cloudformation-diff" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/assets@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.55.0.tgz#02442aea514d08b8f1fb744a3e3f944ab9a5e389" - integrity sha512-fOdk2eW8GEgS9vwgpt/BljV1IvCZ/Et7zYcL331+3XAxZpptOYDjNvV/tfhadX9fe1DhwZnsdqQqDO7eAY2+ig== - dependencies: - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-applicationautoscaling@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.55.0.tgz#ba0a1ee4b8bbe5f565c8d76d32408fcfdd8ba046" - integrity sha512-6BCvybrCYqhmtIckpAdDmNvn6B85+D1tL0ZJofiF8/0DOvuV5noZyzJwvwMO4q/WLzqavxoMSxBd7OswVX3trw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.55.0" - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-autoscaling-common@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.55.0.tgz#dc0f64351b2d388d9a195f4316a76ec349cee3f5" - integrity sha512-uQTjJmez/2QOYjmwLhQ/nQg4ywsoWvciS/y55nIlp409Ttuw/RapsrRhVAj3q58/3uTERuIUha4vpNe5C2gUKA== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-cloudformation@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.55.0.tgz#bf902768eb09623ae8e9439e1cde03619e3cd62c" - integrity sha512-Jd8ArtzRv6gKKrGlwMXnn5Gsg3xv8V0esRn3P9jfoNR7qMkH/u2O9mGJ8C2UXMdeAeDPJld0Xk5DxFYtHFrx2Q== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-sns" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-cloudwatch@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.55.0.tgz#3e58110d008b9dc0c0cd8a8973b4f0b1ca385fc3" - integrity sha512-WxJyDnrYHH7ox/1gWe4v+TfFR6LC7Q/bQS5jfdG1Wm3ZHzlSjOegcIw7jrkOXY5QI6N4jHM5bVwpQgX9cS8/dQ== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-codeguruprofiler@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.55.0.tgz#9e1504db79fe469dbd1678b9ed1e020f30b816c8" - integrity sha512-MeXlEPAQjhCOs7+u1Q+Stva97E/QkE37E5EgoNRWVMoel8TPlfg3/ogYlsvJzfh2/7N11Z2jsU2kPaFw0czdfw== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - -"@aws-cdk/aws-dynamodb@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.55.0.tgz#da2da006d03933385cd9aebf2404e175cc730cda" - integrity sha512-MqiTSZ2B1XFoQ28Y9GCtSPRyQGtTwxJxOiECXQZ3axnCz/3x3HFilvvBL31QsBmGkkRuiCNZ67u6+VUCn3J+LQ== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.55.0" - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/custom-resources" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-ec2@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.55.0.tgz#a6c2ab965bd75dd3f255027c11314775289e53a8" - integrity sha512-3FQ6X7BALEFMScsYUNCf+wAY4Zw6FE8V42S6i/OVZhZXY3/iZqiJh/BAJruj/VM1QO9nPRYdF5lnTwFssp17PQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-ssm" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - "@aws-cdk/region-info" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-efs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.55.0.tgz#dfff8ceb245d2cc9f03b158c9d55b64d6a57c0cf" - integrity sha512-BGbF9vby78BNAPwyqzdsErrPgkC0ZCmhIekiTpMdlmhNFuMf6GJMOXY2rr81N7mW6HaAMe6Lqd6w+Te/G0IzHA== - dependencies: - "@aws-cdk/aws-ec2" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-events@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.55.0.tgz#3d784b0bf7ac2a2ebe6e52a9b89365d30bdd9398" - integrity sha512-jL9bygowe/6kYoAIApBcYi92zSjSxyn43CfOOILkplEsxdg3nNKfgnkQ4JgS1WwCuBNOhPAY6Zzc6bLKDi4Igw== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-iam@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.55.0.tgz#fedac6b83a9a7ee48e4cda6d877f684f1dac0056" - integrity sha512-cAKQN1sEdDXZ2xFOOoWQskDh/GuQS81m6Qd/o6KQeFli8ftXSlD5dq5+UIs+oHBwhE8xwYJLbHDx79L3lQcMug== - dependencies: - "@aws-cdk/core" "1.55.0" - "@aws-cdk/region-info" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-kms@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.55.0.tgz#eaaa9b2ea9b7f65d3bdcab8109104477b2ff2baf" - integrity sha512-GSNKEn2w5QwKF+vwlz0N9TPnRh/p/tOFHb+AuNmNq4y2f3c3rTmW/anJu+ISE5qIVzTnev6bLQ+y7Iidt8aXKQ== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-lambda@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.55.0.tgz#751c89a64797bc4ae1ea0801fb39083752455ff9" - integrity sha512-/5df6QR3vbJr/G5/HFmxG/QvxPIjSdzSgaXjK7a/7tzxRISWPaYLN4sVZQHVDYHPe+WZ291uulYE+juiyGrvqQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-codeguruprofiler" "1.55.0" - "@aws-cdk/aws-ec2" "1.55.0" - "@aws-cdk/aws-efs" "1.55.0" - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-s3-assets" "1.55.0" - "@aws-cdk/aws-sqs" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-logs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.55.0.tgz#267aa66bff737e47be5dc3d326ea936cf73c62e6" - integrity sha512-sUflJ+MuB69MwHhtWZUY8jf2JLxXXbmGzs/T3VHnscULAsQoo6Tu5v/kXvtXU04CC8YxUG6+hQkO6bl3bF6M1Q== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-s3-assets@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.55.0.tgz#7243ee94f767d6686b6b9c0caaf9af3aa38a656d" - integrity sha512-zyYFRw1xFmuONiuj9ym9HsnYyAeE2a1L1q2/vpvlXARLIsk7JDG37nnnh40ccm2/YQAoVLXqKZb+VTS5cUKhgA== - dependencies: - "@aws-cdk/assets" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-s3@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.55.0.tgz#41a0f134608fa068d0ea2b451a5ec039da4ca372" - integrity sha512-VNBTw+ADXcNuIi+ziGpEiGN0kxE/32MGUK6esePMxRr+zv9JqE4q0YwiSSjp0FWnM1g3mufkergXfNcGCCPMrw== - dependencies: - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-sns-subscriptions@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.55.0.tgz#480081c3d8abf0bb1bb7067cefecf0ca29bce433" - integrity sha512-Mk5oKUIlXnw+Uoox88IY4Jlzi09DhiDnJqtZ7p2avyofzZ99ZZihncXwm6XxFe1yCo+c+jdEK0qWklyFWaKfOg== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/aws-sns" "1.55.0" - "@aws-cdk/aws-sqs" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-sns@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.55.0.tgz#e3a6ef9b7235e39dba8a3f172da31d63e0d961b1" - integrity sha512-WR2ogCi6ngMsZAxq1O71WTxYz1GC9oSxK/K1sj7lboDW712OJXgaz5Giat073TYosyuiZD0uUvSPRvBfxbfEIg== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-sqs" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-sqs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.55.0.tgz#b70e100e941aad369557ae6ed991a40972b4e20b" - integrity sha512-CpXi33lBg8PgMJvxwRpPOQmD+DLUaUHxRpjjjLP6tfUDwk5cIGwRG+QSTd4FmNcDm3Cvb1x0WI8PSdwfgaOSiw== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-ssm@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.55.0.tgz#5b51cc6875956829df499b3c9ed34b41e47c63ce" - integrity sha512-lTJj0rDZS5qVapV4WI/yfm3B235hJtMgDHMRMoOAZTNQSgHFvp2/5l1gSKOfqlanS90aeLUIfEXWlXALnwveLg== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/cfnspec@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.55.0.tgz#6a6f78b0269ff8dae55fc2e986cca7469937e3fb" - integrity sha512-Bg4tTgtKMjBKWtyP2/V0atb3TmqshIW+j61gRigEhom1aS49QzvA6YpTjv6vzylQIH0+hdLYiCX6brBiYEXhTg== - dependencies: - md5 "^2.2.1" +"@aws-cdk/assert@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.61.0.tgz#c1dbbf71fd64beb067a6e6237e03686319acaaa7" + integrity sha512-avvDVpyd8zLMT0HEW1K2ngP5U8CHu+BtPinUkLpLXVJ+Cr5K12plnk84+BOWe1NhM9/bqC4b1KA0c6MzIzgREA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cloudformation-diff" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/assets@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.61.0.tgz#9702ba8ef5b3c45ec47e0530006d63dc0685a5ff" + integrity sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA== + dependencies: + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-applicationautoscaling@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz#8129984ba0185bbb525fd8ef6328c5c84e51e4e5" + integrity sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-autoscaling-common@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz#9e7f6a8669b36001b846d90fa8cb65d8b4edb27b" + integrity sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-cloudformation@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.61.0.tgz#6810e5327aa53b6d73cb337af340db152284aad7" + integrity sha512-e7mti0sWR6Sf4tav36bu379kkG5E33VMPLZaT8RkhXkIl97c1OaGHVx5G1Oe5DiHka08c+PA6da8ahkrR1wSkQ== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-sns" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-cloudwatch@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz#3c0171ca76d086da424c1b4148a53c4d68dd885a" + integrity sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-codeguruprofiler@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz#1ace4c61a4a7b916f4dbe28070b5b914949e6f06" + integrity sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + +"@aws-cdk/aws-dynamodb@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.61.0.tgz#3d9b1ffd6eb965152a2456de1b08625d3f3ee907" + integrity sha512-Qd87xJNTjCRBQ//H4WA6Lif3VuA9QuyKyterlmTGnmrUsAqubkKtxu/lLvMp0gQb9LzjQ5Hn9238v1s8rDBDlw== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/custom-resources" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-ec2@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz#d39b1f5356c57089b963bbe4644adc02fd12a4bf" + integrity sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/aws-ssm" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + "@aws-cdk/region-info" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-efs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz#c4d66d0d928c01c8018c1c8bc75a1c5097d649ce" + integrity sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg== + dependencies: + "@aws-cdk/aws-ec2" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-events@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" + integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-iam@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" + integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== + dependencies: + "@aws-cdk/core" "1.61.0" + "@aws-cdk/region-info" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-kms@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" + integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-lambda@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz#65b2fb456f6c2d0566401bd3d265f5bae47d6346" + integrity sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-codeguruprofiler" "1.61.0" + "@aws-cdk/aws-ec2" "1.61.0" + "@aws-cdk/aws-efs" "1.61.0" + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/aws-sqs" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-logs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz#430bb5fc87ec606416ffb0869f04754185092a21" + integrity sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-s3-assets@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz#8512ac0e16818bc78eff010d15d6cc99a7d8fccf" + integrity sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA== + dependencies: + "@aws-cdk/assets" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-s3@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" + integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== + dependencies: + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-sns-subscriptions@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.61.0.tgz#839f37ae5b206a6c9b773775dbed7439425eeb0c" + integrity sha512-XhRJlbaNKrl5+cIhSf8fIeV1gcWyg25O86k5j6dt4KOGYWa4fpYkxF4KwUKKYtugk0F887K7F4/DmDOtqm5JuQ== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/aws-sns" "1.61.0" + "@aws-cdk/aws-sqs" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-sns@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.61.0.tgz#c82f9b224b7ebf3e48cd9433456156e5d3f1df89" + integrity sha512-jmJmZXidJAJTg4lPnxMm26QR3ovMYb/89NBWnIRwGdVGcZ7nrWUkC0JNPQMbP+EvUFdh/9xdFVP4JvvzZzoy0w== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-sqs" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-sqs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz#b2d1d7a5d27d36d1580a3cb500daf417037da492" + integrity sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-ssm@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz#229308cfce757f8b3f75d12bf276ce4f8042076f" + integrity sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/cfnspec@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.61.0.tgz#69e998ab83c0a478b76e1c5deb8484171dfd95f9" + integrity sha512-Ss5N3unY6iVh9SjYAYvTyvhdb7Kaz6dVFeV8K68UGewiFcHpC5tQi3YmlVBw3HCgKoRt20emiHAfmdfeGO/PUQ== + dependencies: + md5 "^2.3.0" "@aws-cdk/cloud-assembly-schema@1.55.0": version "1.55.0" @@ -257,12 +260,20 @@ jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/cloudformation-diff@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.55.0.tgz#f39fb63bd6388c2401373bf200575efe513a5045" - integrity sha512-lBFiLQXaJmf4hR+RzSXwAGun/NgANzK5p/Qm5ETgqTLVPRksJJruaFgFO/Pr0qIRpDbtxrkigoeFZxCgFkFqAQ== +"@aws-cdk/cloud-assembly-schema@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" + integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/cloudformation-diff@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.61.0.tgz#8acb549fd1dd819aa61dfed47e011b44827045a8" + integrity sha512-TrrmywhYkXxGNTmDd1k2biJMVtEvb0QcbZ/IGM6biMXIJ+wsjw/n5snvwciQ8/PHZmsUYk67qulGdso1rpy06Q== dependencies: - "@aws-cdk/cfnspec" "1.55.0" + "@aws-cdk/cfnspec" "1.61.0" colors "^1.4.0" diff "^4.0.2" fast-deep-equal "^3.1.3" @@ -280,18 +291,29 @@ fs-extra "^9.0.1" minimatch "^3.0.4" -"@aws-cdk/custom-resources@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.55.0.tgz#af33b6dc28a9431d60cd6e7774a166919a7622be" - integrity sha512-AKc9y8RYAU4J2b6rB902jq66vwOzshsgNYl5dTS8cFxdCjR4YthuaAyatxXMBJz4SepL+X6kwjxF1ed6/DFFFQ== - dependencies: - "@aws-cdk/aws-cloudformation" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-sns" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" +"@aws-cdk/core@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" + integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/custom-resources@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.61.0.tgz#03749f4122e46504fd1b3b3b9a11aa3578f269bf" + integrity sha512-etnHE7A0+J5w1L/m+KxEbPQ7LgtVYvEUV6naqRp5uIsTBaJ9sCQ+q43Y3Fj+g3NMigm8C2fKg5FmiFE6kiymDQ== + dependencies: + "@aws-cdk/aws-cloudformation" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-sns" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" "@aws-cdk/cx-api@1.55.0": version "1.55.0" @@ -301,10 +323,18 @@ "@aws-cdk/cloud-assembly-schema" "1.55.0" semver "^7.2.2" -"@aws-cdk/region-info@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" - integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== +"@aws-cdk/cx-api@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" + integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.61.0" + semver "^7.2.2" + +"@aws-cdk/region-info@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" + integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== "@babel/cli@^7.10.5": version "7.10.5" @@ -360,6 +390,22 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/eslint-parser@^7.11.3": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.11.5.tgz#398192b8d1cd3678efb709f5ab09d9aa2a2218fd" + integrity sha512-DZ3maD3ciwRg1pOzEpJ1outlV1DA/A8XHDQoyL69fC3RIJMlMq1UPudgfRkW0YFqmQPR6OPvu8chaT7Yq2Mm8A== + dependencies: + eslint-scope "5.1.0" + eslint-visitor-keys "^1.3.0" + semver "^6.3.0" + +"@babel/eslint-plugin@^7.11.3": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/eslint-plugin/-/eslint-plugin-7.11.5.tgz#651fed485493cee8ae803d6a22e3b4f21315f328" + integrity sha512-klliWjB6CeMeqZ7IeJporPr7raD3Ttc8MF9HPNyTvddmBB9Bg7gbiN43rZvaqvsYiktPQLHZrD/Of7vtl6EYpw== + dependencies: + eslint-rule-composer "^0.3.0" + "@babel/generator@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.0.tgz#4b90c78d8c12825024568cbe83ee6c9af193585c" @@ -1374,19 +1420,19 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@serverless-stack/aws-cdk@1.55.0-rc.1": - version "1.55.0-rc.1" - resolved "https://registry.yarnpkg.com/@serverless-stack/aws-cdk/-/aws-cdk-1.55.0-rc.1.tgz#127e996425e08d6b3823237ee5d2f221f26445a6" - integrity sha512-OvtSB05Thi4wILSITeUdFflkGBBxZOQzqM71BnmzohXnhUDCgH38LEhIyIXZ2Fh8ueZOBJGaUjPjBLr2EL+jWw== +"@serverless-stack/aws-cdk@1.61.0-rc.4": + version "1.61.0-rc.4" + resolved "https://registry.yarnpkg.com/@serverless-stack/aws-cdk/-/aws-cdk-1.61.0-rc.4.tgz#aef7932ed099e74c041103d1ba181bd77ae68e8f" + integrity sha512-CMNB7M+5Ks/oSbwgm/ikrhaVeq4JxD4dHz3GKahUGIz4ulIw/YEvXe3paNa/ODCYDNcgsZQMnHXjZI8fLfZnaA== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cloudformation-diff" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - "@aws-cdk/region-info" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cloudformation-diff" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + "@aws-cdk/region-info" "1.61.0" archiver "^4.0.2" - aws-sdk "^2.715.0" + aws-sdk "^2.739.0" camelcase "^6.0.0" - cdk-assets "1.55.0" + cdk-assets "1.61.0" colors "^1.4.0" decamelize "^4.0.0" fs-extra "^9.0.1" @@ -1398,25 +1444,30 @@ semver "^7.2.2" source-map-support "^0.5.19" table "^5.4.6" - uuid "^8.2.0" + uuid "^8.3.0" wrap-ansi "^7.0.0" yaml "^1.10.0" - yargs "^15.3.1" + yargs "^15.4.1" "@serverless-stack/cli@../../../cli": - version "0.0.11" + version "0.1.3" dependencies: "@babel/cli" "^7.10.5" "@babel/core" "^7.10.5" + "@babel/eslint-parser" "^7.11.3" + "@babel/eslint-plugin" "^7.11.3" "@babel/plugin-proposal-class-properties" "^7.10.4" "@babel/preset-env" "^7.10.4" - "@serverless-stack/aws-cdk" "1.55.0-rc.1" - "@serverless-stack/resources" "^0.0.11" + "@serverless-stack/aws-cdk" "1.61.0-rc.4" + "@serverless-stack/resources" "^0.1.3" "@types/jest" "^26.0.7" "@types/node" "^14.0.27" + "@typescript-eslint/eslint-plugin" "^3.9.1" + "@typescript-eslint/parser" "^3.9.1" chalk "^4.1.0" core-js "^3.6.5" cross-spawn "^7.0.3" + eslint "^7.7.0" fs-extra "^9.0.1" jest "^26.1.0" source-map-support "^0.5.19" @@ -1425,14 +1476,14 @@ yargs "^15.4.1" "@serverless-stack/resources@../../../resources": - version "0.0.11" + version "0.1.3" dependencies: - "@aws-cdk/core" "1.55.0" + "@aws-cdk/core" "1.61.0" -"@serverless-stack/resources@^0.0.11": - version "0.0.11" - resolved "https://registry.yarnpkg.com/@serverless-stack/resources/-/resources-0.0.11.tgz#dcd5df3dce8b819a10ff0907de888a3a98b6df65" - integrity sha512-+13xtHWhoNWYHTRQ6rWkATv1Cf+mUqe8HP9138GI8rjuEan9krPUrZhpbwdMvTiSw8bQzFJcFZUFwYWHgjiO7A== +"@serverless-stack/resources@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@serverless-stack/resources/-/resources-0.1.3.tgz#8a2caf287e79b3b14e071beaa8ccdfb423b9e840" + integrity sha512-ix6r+XyhTatY/sLrz9TR2Rn+orhQkR8ky13RtNhGKR1U5KXfFg0XwoGnvGP9gviIRakWMEAoO0857+w37+z9mw== dependencies: "@aws-cdk/core" "1.55.0" @@ -1488,6 +1539,11 @@ resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== +"@types/eslint-visitor-keys@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== + "@types/graceful-fs@^4.1.2": version "4.1.3" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.3.tgz#039af35fe26bec35003e8d86d2ee9c586354348f" @@ -1523,6 +1579,11 @@ jest-diff "^25.2.1" pretty-format "^25.2.1" +"@types/json-schema@^7.0.3": + version "7.0.5" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" + integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== + "@types/node@*", "@types/node@^14.0.27": version "14.0.27" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1" @@ -1555,6 +1616,66 @@ dependencies: "@types/yargs-parser" "*" +"@typescript-eslint/eslint-plugin@^3.9.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz#7e061338a1383f59edc204c605899f93dc2e2c8f" + integrity sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ== + dependencies: + "@typescript-eslint/experimental-utils" "3.10.1" + debug "^4.1.1" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686" + integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/types" "3.10.1" + "@typescript-eslint/typescript-estree" "3.10.1" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@^3.9.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.10.1.tgz#1883858e83e8b442627e1ac6f408925211155467" + integrity sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "3.10.1" + "@typescript-eslint/types" "3.10.1" + "@typescript-eslint/typescript-estree" "3.10.1" + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/types@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" + integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== + +"@typescript-eslint/typescript-estree@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853" + integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w== + dependencies: + "@typescript-eslint/types" "3.10.1" + "@typescript-eslint/visitor-keys" "3.10.1" + debug "^4.1.1" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/visitor-keys@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931" + integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ== + dependencies: + eslint-visitor-keys "^1.1.0" + abab@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.4.tgz#6dfa57b417ca06d21b2478f0e638302f99c2405c" @@ -1568,12 +1689,17 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" +acorn-jsx@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== + acorn-walk@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^7.1.1: +acorn@^7.1.1, acorn@^7.4.0: version "7.4.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== @@ -1592,6 +1718,16 @@ agent-base@~4.2.1: dependencies: es6-promisify "^5.0.0" +ajv@^6.10.0: + version "6.12.4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" + integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + ajv@^6.10.2, ajv@^6.12.3: version "6.12.3" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" @@ -1602,6 +1738,11 @@ ajv@^6.10.2, ajv@^6.12.3: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-escapes@^4.2.1: version "4.3.1" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" @@ -1758,10 +1899,10 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -aws-sdk@^2.715.0: - version "2.729.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.729.0.tgz#3d850f7825b94b5d8b2aca58ec096973bc4c7e34" - integrity sha512-x5q/+9wM37tBYCmYNGMj+aU9qeXqhbUH0Dz3wlSpAW55+N4NwlBbpqhyCV3oF9bePEJtEnxLGWNXpb9BNWNhew== +aws-sdk@^2.739.0: + version "2.743.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.743.0.tgz#c72a471c80cf88d78d854c780de861fb8475ae34" + integrity sha512-xujZGeA5gnbPBIlq6w/b+WYDKLXYiPWeVHvR0LKcvLLAr8IgzYYInmLx+7CU6ynXuBwVQtqGl2lZ2JSZbnMydg== dependencies: buffer "4.9.2" events "1.1.1" @@ -2040,17 +2181,17 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -cdk-assets@1.55.0: - version "1.55.0" - resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.55.0.tgz#e1b5c2b409623a50ef05e3c9617be291f59f5522" - integrity sha512-ShWqxAOFEYY4GFLQlECgZbSVyHdKqUo6bD72sIoWp+j4iQNpEFiZVSAxIehx1CIrElNaOJO5H/TUzCLOMpaKxw== +cdk-assets@1.61.0: + version "1.61.0" + resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.61.0.tgz#677d85bb23ae7aa104a1b0d5892e3cfd36580a08" + integrity sha512-nZJNQq6vktb5j8xl+IYLWbN82E6EVANJQIZvOM1H/SLuYsjyuoAlIxBp6e50XqYRApnLYJ7BpDdAnLWOmfY8MQ== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" archiver "^4.0.2" - aws-sdk "^2.715.0" + aws-sdk "^2.739.0" glob "^7.1.6" - yargs "^15.3.1" + yargs "^15.4.1" chalk@^2.0.0: version "2.4.2" @@ -2216,7 +2357,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.2: +constructs@^3.0.2, constructs@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== @@ -2277,7 +2418,7 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -2343,7 +2484,7 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1: +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== @@ -2377,7 +2518,7 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -deep-is@~0.1.3: +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= @@ -2462,6 +2603,13 @@ difflib@~0.2.1: dependencies: heap ">= 0.2.0" +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + domexception@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" @@ -2511,6 +2659,13 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2562,6 +2717,82 @@ escodegen@1.x.x, escodegen@^1.14.1: optionalDependencies: source-map "~0.6.1" +eslint-rule-composer@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" + integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== + +eslint-scope@5.1.0, eslint-scope@^5.0.0, eslint-scope@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" + integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^2.0.0, eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint@^7.7.0: + version "7.7.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.7.0.tgz#18beba51411927c4b64da0a8ceadefe4030d6073" + integrity sha512-1KUxLzos0ZVsyL81PnRN335nDtQ8/vZUD6uMtWbF+5zDtjKcsklIi78XoE0MVL93QvWTu+E5y44VyyCsOMBrIg== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.0" + eslint-utils "^2.1.0" + eslint-visitor-keys "^1.3.0" + espree "^7.2.0" + esquery "^1.2.0" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.19" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.2.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" + integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.3.0" + esprima@3.x.x: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" @@ -2572,11 +2803,30 @@ esprima@^4.0.0, esprima@^4.0.1: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -estraverse@^4.2.0: +esquery@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -2704,7 +2954,7 @@ fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -2716,6 +2966,13 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + file-uri-to-path@1, file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" @@ -2746,6 +3003,20 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -2823,6 +3094,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + gensync@^1.0.0-beta.1: version "1.0.0-beta.1" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" @@ -2884,6 +3160,13 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob-parent@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -2901,6 +3184,13 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + graceful-fs@^4.1.11, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" @@ -3045,6 +3335,19 @@ ieee754@1.1.13, ieee754@^1.1.4: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +import-fresh@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + import-local@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" @@ -3202,7 +3505,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0: +is-glob@^4.0.0, is-glob@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -3807,6 +4110,11 @@ json-schema@0.2.3: resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -3891,6 +4199,14 @@ levenary@^1.1.1: dependencies: leven "^3.1.0" +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -3951,6 +4267,11 @@ lodash@^4.17.14, lodash@^4.17.19: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== +lodash@^4.17.15: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -4004,7 +4325,7 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -md5@^2.2.1: +md5@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== @@ -4087,6 +4408,13 @@ mkdirp@1.x: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mkdirp@^0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -4276,6 +4604,18 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + p-each-series@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" @@ -4330,6 +4670,13 @@ pac-resolver@^3.0.0: netmask "^1.0.6" thunkify "^2.1.2" +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + parse-json@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.1.tgz#7cfe35c1ccd641bce3981467e6c2ece61b3b3878" @@ -4419,6 +4766,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -4449,6 +4801,11 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + promptly@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/promptly/-/promptly-3.0.3.tgz#e178f722e73d82c60d019462044bccfdd9872f42" @@ -4631,6 +4988,11 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexpp@^3.0.0, regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + regexpu-core@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" @@ -4729,6 +5091,11 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + resolve-from@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" @@ -4751,6 +5118,13 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + rimraf@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -4827,7 +5201,7 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@7.x, semver@^7.2.2, semver@^7.3.2: +semver@7.x, semver@^7.2.1, semver@^7.2.2, semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== @@ -5157,6 +5531,11 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-json-comments@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -5184,7 +5563,7 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^5.4.6: +table@^5.2.3, table@^5.4.6: version "5.4.6" resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== @@ -5222,6 +5601,11 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + throat@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" @@ -5319,6 +5703,18 @@ ts-jest@^26.1.4: semver "7.x" yargs-parser "18.x" +tslib@^1.8.1: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== + dependencies: + tslib "^1.8.1" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -5331,6 +5727,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -5466,11 +5869,16 @@ uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.2.0: +uuid@^8.2.0, uuid@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== +v8-compile-cache@^2.0.3: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" + integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== + v8-to-istanbul@^4.1.3: version "4.1.4" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6" @@ -5568,7 +5976,7 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -word-wrap@~1.2.3: +word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== @@ -5611,6 +6019,13 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + ws@^7.2.3: version "7.3.1" resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index da3df1a261..f9adc08a2c 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -10,11 +10,11 @@ "author": "", "dependencies": { "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-dynamodb": "1.55.0", - "@aws-cdk/core": "1.55.0" + "@aws-cdk/aws-dynamodb": "1.61.0", + "@aws-cdk/core": "1.61.0" }, "license": "ISC", "devDependencies": { - "@aws-cdk/assert": "1.55.0" + "@aws-cdk/assert": "1.61.0" } } diff --git a/packages/cli/test/jest/yarn.lock b/packages/cli/test/jest/yarn.lock index 4cee59d999..df51708c58 100644 --- a/packages/cli/test/jest/yarn.lock +++ b/packages/cli/test/jest/yarn.lock @@ -2,302 +2,305 @@ # yarn lockfile v1 -"@aws-cdk/assert@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.55.0.tgz#04114356c911afae0c26b99f6cd91823c2676e9b" - integrity sha512-f+EXzBpFPl305EnGXH3DJLY/X51cU/u4enCE9BdCq4AnyR3/eqGpKuhav3lxZ0Yu704j9wZKd2M+3Hn2PPjWvA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cloudformation-diff" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/assets@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.55.0.tgz#02442aea514d08b8f1fb744a3e3f944ab9a5e389" - integrity sha512-fOdk2eW8GEgS9vwgpt/BljV1IvCZ/Et7zYcL331+3XAxZpptOYDjNvV/tfhadX9fe1DhwZnsdqQqDO7eAY2+ig== - dependencies: - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-applicationautoscaling@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.55.0.tgz#ba0a1ee4b8bbe5f565c8d76d32408fcfdd8ba046" - integrity sha512-6BCvybrCYqhmtIckpAdDmNvn6B85+D1tL0ZJofiF8/0DOvuV5noZyzJwvwMO4q/WLzqavxoMSxBd7OswVX3trw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.55.0" - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-autoscaling-common@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.55.0.tgz#dc0f64351b2d388d9a195f4316a76ec349cee3f5" - integrity sha512-uQTjJmez/2QOYjmwLhQ/nQg4ywsoWvciS/y55nIlp409Ttuw/RapsrRhVAj3q58/3uTERuIUha4vpNe5C2gUKA== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-cloudformation@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.55.0.tgz#bf902768eb09623ae8e9439e1cde03619e3cd62c" - integrity sha512-Jd8ArtzRv6gKKrGlwMXnn5Gsg3xv8V0esRn3P9jfoNR7qMkH/u2O9mGJ8C2UXMdeAeDPJld0Xk5DxFYtHFrx2Q== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-sns" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-cloudwatch@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.55.0.tgz#3e58110d008b9dc0c0cd8a8973b4f0b1ca385fc3" - integrity sha512-WxJyDnrYHH7ox/1gWe4v+TfFR6LC7Q/bQS5jfdG1Wm3ZHzlSjOegcIw7jrkOXY5QI6N4jHM5bVwpQgX9cS8/dQ== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-codeguruprofiler@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.55.0.tgz#9e1504db79fe469dbd1678b9ed1e020f30b816c8" - integrity sha512-MeXlEPAQjhCOs7+u1Q+Stva97E/QkE37E5EgoNRWVMoel8TPlfg3/ogYlsvJzfh2/7N11Z2jsU2kPaFw0czdfw== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - -"@aws-cdk/aws-dynamodb@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.55.0.tgz#da2da006d03933385cd9aebf2404e175cc730cda" - integrity sha512-MqiTSZ2B1XFoQ28Y9GCtSPRyQGtTwxJxOiECXQZ3axnCz/3x3HFilvvBL31QsBmGkkRuiCNZ67u6+VUCn3J+LQ== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.55.0" - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/custom-resources" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-ec2@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.55.0.tgz#a6c2ab965bd75dd3f255027c11314775289e53a8" - integrity sha512-3FQ6X7BALEFMScsYUNCf+wAY4Zw6FE8V42S6i/OVZhZXY3/iZqiJh/BAJruj/VM1QO9nPRYdF5lnTwFssp17PQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-ssm" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - "@aws-cdk/region-info" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-efs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.55.0.tgz#dfff8ceb245d2cc9f03b158c9d55b64d6a57c0cf" - integrity sha512-BGbF9vby78BNAPwyqzdsErrPgkC0ZCmhIekiTpMdlmhNFuMf6GJMOXY2rr81N7mW6HaAMe6Lqd6w+Te/G0IzHA== - dependencies: - "@aws-cdk/aws-ec2" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-events@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.55.0.tgz#3d784b0bf7ac2a2ebe6e52a9b89365d30bdd9398" - integrity sha512-jL9bygowe/6kYoAIApBcYi92zSjSxyn43CfOOILkplEsxdg3nNKfgnkQ4JgS1WwCuBNOhPAY6Zzc6bLKDi4Igw== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-iam@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.55.0.tgz#fedac6b83a9a7ee48e4cda6d877f684f1dac0056" - integrity sha512-cAKQN1sEdDXZ2xFOOoWQskDh/GuQS81m6Qd/o6KQeFli8ftXSlD5dq5+UIs+oHBwhE8xwYJLbHDx79L3lQcMug== - dependencies: - "@aws-cdk/core" "1.55.0" - "@aws-cdk/region-info" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-kms@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.55.0.tgz#eaaa9b2ea9b7f65d3bdcab8109104477b2ff2baf" - integrity sha512-GSNKEn2w5QwKF+vwlz0N9TPnRh/p/tOFHb+AuNmNq4y2f3c3rTmW/anJu+ISE5qIVzTnev6bLQ+y7Iidt8aXKQ== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-lambda@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.55.0.tgz#751c89a64797bc4ae1ea0801fb39083752455ff9" - integrity sha512-/5df6QR3vbJr/G5/HFmxG/QvxPIjSdzSgaXjK7a/7tzxRISWPaYLN4sVZQHVDYHPe+WZ291uulYE+juiyGrvqQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-codeguruprofiler" "1.55.0" - "@aws-cdk/aws-ec2" "1.55.0" - "@aws-cdk/aws-efs" "1.55.0" - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/aws-s3-assets" "1.55.0" - "@aws-cdk/aws-sqs" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-logs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.55.0.tgz#267aa66bff737e47be5dc3d326ea936cf73c62e6" - integrity sha512-sUflJ+MuB69MwHhtWZUY8jf2JLxXXbmGzs/T3VHnscULAsQoo6Tu5v/kXvtXU04CC8YxUG6+hQkO6bl3bF6M1Q== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-s3-assets@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.55.0.tgz#7243ee94f767d6686b6b9c0caaf9af3aa38a656d" - integrity sha512-zyYFRw1xFmuONiuj9ym9HsnYyAeE2a1L1q2/vpvlXARLIsk7JDG37nnnh40ccm2/YQAoVLXqKZb+VTS5cUKhgA== - dependencies: - "@aws-cdk/assets" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-s3" "1.55.0" - "@aws-cdk/core" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-s3@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.55.0.tgz#41a0f134608fa068d0ea2b451a5ec039da4ca372" - integrity sha512-VNBTw+ADXcNuIi+ziGpEiGN0kxE/32MGUK6esePMxRr+zv9JqE4q0YwiSSjp0FWnM1g3mufkergXfNcGCCPMrw== - dependencies: - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-sns@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.55.0.tgz#e3a6ef9b7235e39dba8a3f172da31d63e0d961b1" - integrity sha512-WR2ogCi6ngMsZAxq1O71WTxYz1GC9oSxK/K1sj7lboDW712OJXgaz5Giat073TYosyuiZD0uUvSPRvBfxbfEIg== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-events" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/aws-sqs" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-sqs@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.55.0.tgz#b70e100e941aad369557ae6ed991a40972b4e20b" - integrity sha512-CpXi33lBg8PgMJvxwRpPOQmD+DLUaUHxRpjjjLP6tfUDwk5cIGwRG+QSTd4FmNcDm3Cvb1x0WI8PSdwfgaOSiw== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/aws-ssm@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.55.0.tgz#5b51cc6875956829df499b3c9ed34b41e47c63ce" - integrity sha512-lTJj0rDZS5qVapV4WI/yfm3B235hJtMgDHMRMoOAZTNQSgHFvp2/5l1gSKOfqlanS90aeLUIfEXWlXALnwveLg== - dependencies: - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-kms" "1.55.0" - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/cfnspec@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.55.0.tgz#6a6f78b0269ff8dae55fc2e986cca7469937e3fb" - integrity sha512-Bg4tTgtKMjBKWtyP2/V0atb3TmqshIW+j61gRigEhom1aS49QzvA6YpTjv6vzylQIH0+hdLYiCX6brBiYEXhTg== - dependencies: - md5 "^2.2.1" - -"@aws-cdk/cloud-assembly-schema@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" - integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== +"@aws-cdk/assert@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.61.0.tgz#c1dbbf71fd64beb067a6e6237e03686319acaaa7" + integrity sha512-avvDVpyd8zLMT0HEW1K2ngP5U8CHu+BtPinUkLpLXVJ+Cr5K12plnk84+BOWe1NhM9/bqC4b1KA0c6MzIzgREA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cloudformation-diff" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/assets@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.61.0.tgz#9702ba8ef5b3c45ec47e0530006d63dc0685a5ff" + integrity sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA== + dependencies: + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-applicationautoscaling@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz#8129984ba0185bbb525fd8ef6328c5c84e51e4e5" + integrity sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-autoscaling-common@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz#9e7f6a8669b36001b846d90fa8cb65d8b4edb27b" + integrity sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-cloudformation@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.61.0.tgz#6810e5327aa53b6d73cb337af340db152284aad7" + integrity sha512-e7mti0sWR6Sf4tav36bu379kkG5E33VMPLZaT8RkhXkIl97c1OaGHVx5G1Oe5DiHka08c+PA6da8ahkrR1wSkQ== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-sns" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-cloudwatch@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz#3c0171ca76d086da424c1b4148a53c4d68dd885a" + integrity sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-codeguruprofiler@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz#1ace4c61a4a7b916f4dbe28070b5b914949e6f06" + integrity sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + +"@aws-cdk/aws-dynamodb@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.61.0.tgz#3d9b1ffd6eb965152a2456de1b08625d3f3ee907" + integrity sha512-Qd87xJNTjCRBQ//H4WA6Lif3VuA9QuyKyterlmTGnmrUsAqubkKtxu/lLvMp0gQb9LzjQ5Hn9238v1s8rDBDlw== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/custom-resources" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-ec2@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz#d39b1f5356c57089b963bbe4644adc02fd12a4bf" + integrity sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/aws-ssm" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + "@aws-cdk/region-info" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-efs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz#c4d66d0d928c01c8018c1c8bc75a1c5097d649ce" + integrity sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg== + dependencies: + "@aws-cdk/aws-ec2" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-events@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" + integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-iam@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" + integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== + dependencies: + "@aws-cdk/core" "1.61.0" + "@aws-cdk/region-info" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-kms@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" + integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-lambda@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz#65b2fb456f6c2d0566401bd3d265f5bae47d6346" + integrity sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-codeguruprofiler" "1.61.0" + "@aws-cdk/aws-ec2" "1.61.0" + "@aws-cdk/aws-efs" "1.61.0" + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/aws-sqs" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-logs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz#430bb5fc87ec606416ffb0869f04754185092a21" + integrity sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-s3-assets@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz#8512ac0e16818bc78eff010d15d6cc99a7d8fccf" + integrity sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA== + dependencies: + "@aws-cdk/assets" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-s3@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" + integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== + dependencies: + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-sns@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.61.0.tgz#c82f9b224b7ebf3e48cd9433456156e5d3f1df89" + integrity sha512-jmJmZXidJAJTg4lPnxMm26QR3ovMYb/89NBWnIRwGdVGcZ7nrWUkC0JNPQMbP+EvUFdh/9xdFVP4JvvzZzoy0w== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-sqs" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-sqs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz#b2d1d7a5d27d36d1580a3cb500daf417037da492" + integrity sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-ssm@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz#229308cfce757f8b3f75d12bf276ce4f8042076f" + integrity sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/cfnspec@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.61.0.tgz#69e998ab83c0a478b76e1c5deb8484171dfd95f9" + integrity sha512-Ss5N3unY6iVh9SjYAYvTyvhdb7Kaz6dVFeV8K68UGewiFcHpC5tQi3YmlVBw3HCgKoRt20emiHAfmdfeGO/PUQ== + dependencies: + md5 "^2.3.0" + +"@aws-cdk/cloud-assembly-schema@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" + integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== dependencies: jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/cloudformation-diff@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.55.0.tgz#f39fb63bd6388c2401373bf200575efe513a5045" - integrity sha512-lBFiLQXaJmf4hR+RzSXwAGun/NgANzK5p/Qm5ETgqTLVPRksJJruaFgFO/Pr0qIRpDbtxrkigoeFZxCgFkFqAQ== +"@aws-cdk/cloudformation-diff@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.61.0.tgz#8acb549fd1dd819aa61dfed47e011b44827045a8" + integrity sha512-TrrmywhYkXxGNTmDd1k2biJMVtEvb0QcbZ/IGM6biMXIJ+wsjw/n5snvwciQ8/PHZmsUYk67qulGdso1rpy06Q== dependencies: - "@aws-cdk/cfnspec" "1.55.0" + "@aws-cdk/cfnspec" "1.61.0" colors "^1.4.0" diff "^4.0.2" fast-deep-equal "^3.1.3" string-width "^4.2.0" table "^5.4.6" -"@aws-cdk/core@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" - integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== +"@aws-cdk/core@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" + integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" fs-extra "^9.0.1" minimatch "^3.0.4" -"@aws-cdk/custom-resources@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.55.0.tgz#af33b6dc28a9431d60cd6e7774a166919a7622be" - integrity sha512-AKc9y8RYAU4J2b6rB902jq66vwOzshsgNYl5dTS8cFxdCjR4YthuaAyatxXMBJz4SepL+X6kwjxF1ed6/DFFFQ== - dependencies: - "@aws-cdk/aws-cloudformation" "1.55.0" - "@aws-cdk/aws-iam" "1.55.0" - "@aws-cdk/aws-lambda" "1.55.0" - "@aws-cdk/aws-logs" "1.55.0" - "@aws-cdk/aws-sns" "1.55.0" - "@aws-cdk/core" "1.55.0" - constructs "^3.0.2" - -"@aws-cdk/cx-api@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" - integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" +"@aws-cdk/custom-resources@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.61.0.tgz#03749f4122e46504fd1b3b3b9a11aa3578f269bf" + integrity sha512-etnHE7A0+J5w1L/m+KxEbPQ7LgtVYvEUV6naqRp5uIsTBaJ9sCQ+q43Y3Fj+g3NMigm8C2fKg5FmiFE6kiymDQ== + dependencies: + "@aws-cdk/aws-cloudformation" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-sns" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/cx-api@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" + integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.61.0" semver "^7.2.2" -"@aws-cdk/region-info@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.55.0.tgz#963bacb8c96eced6fe8c607b3dee7a3085aa02ee" - integrity sha512-SYHSb4/pqokjZIuf7WIncy4IkWbAasAtqe/lsGT+GML6lgH0A2sSMMg9H4tPh1ovxvDGSGhE4FJrMyRVtAbmeQ== +"@aws-cdk/region-info@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" + integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== "@serverless-stack/resources@../../../resources": - version "0.0.7" + version "0.1.3" dependencies: - "@aws-cdk/core" "1.55.0" + "@aws-cdk/core" "1.61.0" ajv@^6.10.2: version "6.12.3" @@ -376,7 +379,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.2: +constructs@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== @@ -465,7 +468,7 @@ lodash@^4.17.14: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== -md5@^2.2.1: +md5@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index 649e2560e4..be56b87a0a 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -10,7 +10,7 @@ "author": "", "dependencies": { "@serverless-stack/resources": "../../../resources", - "@aws-cdk/core": "1.55.0" + "@aws-cdk/core": "1.61.0" }, "license": "ISC" } diff --git a/packages/cli/test/stack-no-prefix/yarn.lock b/packages/cli/test/stack-no-prefix/yarn.lock index 1027e73245..4d69cef265 100644 --- a/packages/cli/test/stack-no-prefix/yarn.lock +++ b/packages/cli/test/stack-no-prefix/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@aws-cdk/cloud-assembly-schema@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" - integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== +"@aws-cdk/cloud-assembly-schema@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" + integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== dependencies: jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/core@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" - integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== +"@aws-cdk/core@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" + integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" fs-extra "^9.0.1" minimatch "^3.0.4" -"@aws-cdk/cx-api@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" - integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== +"@aws-cdk/cx-api@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" + integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" semver "^7.2.2" "@serverless-stack/resources@../../../resources": - version "0.0.10" + version "0.1.3" dependencies: - "@aws-cdk/core" "1.55.0" + "@aws-cdk/core" "1.61.0" at-least-node@^1.0.0: version "1.0.0" @@ -57,7 +57,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.2: +constructs@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== From 9412386398db1ea5e15056a95b7b65122d4d87fe Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 31 Aug 2020 17:14:15 -0400 Subject: [PATCH 077/481] v0.1.4 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index 36cf6ad525..19728af2bf 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.1.3" + "version": "0.1.4" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 9f69f3b487..1b78e4ac65 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.1.3", + "version": "0.1.4", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "node test/helpers/sync-cdk-version.js", @@ -42,7 +42,7 @@ "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", "@serverless-stack/aws-cdk": "1.61.0-rc.4", - "@serverless-stack/resources": "^0.1.3", + "@serverless-stack/resources": "^0.1.4", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 504f628994..a83e927ad3 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.1.3", + "version": "0.1.4", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 1c79cd1b98..0dcd819215 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.1.3", + "version": "0.1.4", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 2cf6ea1636fca3e3a46973a2e6ad854aea7d66af Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 31 Aug 2020 17:15:57 -0400 Subject: [PATCH 078/481] Ignoring test dir in npm packages --- packages/cli/.npmignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/.npmignore b/packages/cli/.npmignore index f5b2fd56b1..6453e09014 100644 --- a/packages/cli/.npmignore +++ b/packages/cli/.npmignore @@ -1,5 +1,5 @@ node_modules -tests +test *.test.js yarn.lock yarn-error.log From 8e3bc59c8705e4901ee78739c2831b30ab960100 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 31 Aug 2020 17:16:21 -0400 Subject: [PATCH 079/481] v0.1.5 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index 19728af2bf..d0d181a26e 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.1.4" + "version": "0.1.5" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 1b78e4ac65..4b1f7834be 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.1.4", + "version": "0.1.5", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "node test/helpers/sync-cdk-version.js", @@ -42,7 +42,7 @@ "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", "@serverless-stack/aws-cdk": "1.61.0-rc.4", - "@serverless-stack/resources": "^0.1.4", + "@serverless-stack/resources": "^0.1.5", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index a83e927ad3..97fa1ca34f 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.1.4", + "version": "0.1.5", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 0dcd819215..6dba22ee65 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.1.4", + "version": "0.1.5", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 9cffa3b2207dffa74d7c71b04d139b973cee4eff Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 1 Sep 2020 16:22:46 -0400 Subject: [PATCH 080/481] Updating to new fork package --- packages/cli/package.json | 2 +- packages/cli/test/helpers/sync-cdk-version.js | 4 +- .../scripts/get-cdk-version.js | 2 +- .../scripts/aws-cdk-version-check.js | 2 +- yarn.lock | 58 +++++++++---------- 5 files changed, 34 insertions(+), 34 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index 4b1f7834be..3fdd423a4b 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -41,7 +41,6 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/aws-cdk": "1.61.0-rc.4", "@serverless-stack/resources": "^0.1.5", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", @@ -54,6 +53,7 @@ "fs-extra": "^9.0.1", "jest": "^26.1.0", "source-map-support": "^0.5.19", + "sst-cdk": "1.61.0-rc.7", "ts-jest": "^26.1.4", "typescript": "^3.9.7", "yargs": "^15.4.1" diff --git a/packages/cli/test/helpers/sync-cdk-version.js b/packages/cli/test/helpers/sync-cdk-version.js index 2305663a6b..456ce12818 100644 --- a/packages/cli/test/helpers/sync-cdk-version.js +++ b/packages/cli/test/helpers/sync-cdk-version.js @@ -7,7 +7,7 @@ const path = require("path"); const replace = require("replace-in-file"); const sstCdkVersion = require(path.join(__dirname, "../../package.json")) - .dependencies["@serverless-stack/aws-cdk"]; + .dependencies["sst-cdk"]; const cdkVersion = sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; try { @@ -15,7 +15,7 @@ try { //dry : true, files: "test/*/package.json", ignore: "test/mismatched-cdk-versions/package.json", - from: /"(@*aws-cdk.*)": "(\d+\.\d+\.\d+)"/g, + from: /"(@?aws-cdk.*)": "[^~]?(\d+\.\d+\.\d+)"/g, to: `"$1": "${cdkVersion}"`, }); diff --git a/packages/create-serverless-stack/scripts/get-cdk-version.js b/packages/create-serverless-stack/scripts/get-cdk-version.js index 719ac935b0..061987c0ef 100644 --- a/packages/create-serverless-stack/scripts/get-cdk-version.js +++ b/packages/create-serverless-stack/scripts/get-cdk-version.js @@ -7,7 +7,7 @@ const fs = require("fs"); const path = require("path"); const sstCdkVersion = require(path.join(__dirname, "../../cli/package.json")) - .dependencies["@serverless-stack/aws-cdk"]; + .dependencies["sst-cdk"]; const cdkVersion = sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; fs.writeFileSync(path.join(__dirname, "../CDK_VERSION"), cdkVersion); diff --git a/packages/resources/scripts/aws-cdk-version-check.js b/packages/resources/scripts/aws-cdk-version-check.js index 86cda091eb..fa58727e14 100644 --- a/packages/resources/scripts/aws-cdk-version-check.js +++ b/packages/resources/scripts/aws-cdk-version-check.js @@ -23,7 +23,7 @@ function formatDepsForInstall(depsList, version) { } const sstCdkVersion = require(path.join(__dirname, "../../cli/package.json")) - .dependencies["@serverless-stack/aws-cdk"]; + .dependencies["sst-cdk"]; const cdkVersion = sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; const packageJson = require(path.join(__dirname, "../package.json")); diff --git a/yarn.lock b/yarn.lock index 1fdcb31dd0..81c5143008 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2018,35 +2018,6 @@ dependencies: "@types/node" ">= 8" -"@serverless-stack/aws-cdk@1.61.0-rc.4": - version "1.61.0-rc.4" - resolved "https://registry.yarnpkg.com/@serverless-stack/aws-cdk/-/aws-cdk-1.61.0-rc.4.tgz#aef7932ed099e74c041103d1ba181bd77ae68e8f" - integrity sha512-CMNB7M+5Ks/oSbwgm/ikrhaVeq4JxD4dHz3GKahUGIz4ulIw/YEvXe3paNa/ODCYDNcgsZQMnHXjZI8fLfZnaA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cloudformation-diff" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - archiver "^4.0.2" - aws-sdk "^2.739.0" - camelcase "^6.0.0" - cdk-assets "1.61.0" - colors "^1.4.0" - decamelize "^4.0.0" - fs-extra "^9.0.1" - glob "^7.1.6" - json-diff "^0.5.4" - minimatch ">=3.0" - promptly "^3.0.3" - proxy-agent "^3.1.1" - semver "^7.2.2" - source-map-support "^0.5.19" - table "^5.4.6" - uuid "^8.3.0" - wrap-ansi "^7.0.0" - yaml "^1.10.0" - yargs "^15.4.1" - "@sinonjs/commons@^1.7.0": version "1.8.1" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" @@ -8179,6 +8150,35 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" +sst-cdk@1.61.0-rc.7: + version "1.61.0-rc.7" + resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.61.0-rc.7.tgz#0bc4b142d8dcd0416b2249d5578f84b63e57c1e0" + integrity sha512-CeY+gmWBaQKdz83R6kGT6dLquQWYofXjTfyfOsuSRXUZWnCgVfxIq+byWBOxPoh7u9V0249gikq3231LWSM7tQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cloudformation-diff" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + "@aws-cdk/region-info" "1.61.0" + archiver "^4.0.2" + aws-sdk "^2.739.0" + camelcase "^6.0.0" + cdk-assets "1.61.0" + colors "^1.4.0" + decamelize "^4.0.0" + fs-extra "^9.0.1" + glob "^7.1.6" + json-diff "^0.5.4" + minimatch ">=3.0" + promptly "^3.0.3" + proxy-agent "^3.1.1" + semver "^7.2.2" + source-map-support "^0.5.19" + table "^5.4.6" + uuid "^8.3.0" + wrap-ansi "^7.0.0" + yaml "^1.10.0" + yargs "^15.4.1" + stack-utils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593" From 5ff1ef74aa52108ce9f42d96cef5469422d55034 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 1 Sep 2020 16:23:16 -0400 Subject: [PATCH 081/481] v0.1.6 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index d0d181a26e..738a6a1a06 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.1.5" + "version": "0.1.6" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 3fdd423a4b..e34fe3649e 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.1.5", + "version": "0.1.6", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "node test/helpers/sync-cdk-version.js", @@ -41,7 +41,7 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/resources": "^0.1.5", + "@serverless-stack/resources": "^0.1.6", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 97fa1ca34f..67d95951a4 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.1.5", + "version": "0.1.6", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 6dba22ee65..fc7515d1bb 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.1.5", + "version": "0.1.6", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From c590248b584a559a5d45285f1dc22c19673ccaef Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 1 Sep 2020 16:36:22 -0400 Subject: [PATCH 082/481] Using sst-cdk in the imports --- packages/cli/bin/scripts.js | 3 +-- packages/cli/scripts/config/cdkHelpers.js | 2 +- packages/cli/test/base/yarn.lock | 2 +- packages/create-serverless-stack/scripts/get-cdk-version.js | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index 0737f2bb2b..c6d1fdfa82 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -48,7 +48,7 @@ const internals = { }; function getCdkVersion() { - const sstCdkVersion = packageJson.dependencies["@serverless-stack/aws-cdk"]; + const sstCdkVersion = packageJson.dependencies["sst-cdk"]; return sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; } @@ -177,7 +177,6 @@ switch (script) { } case cmd.cdk: case cmd.test: { - if (script === cmd.cdk) { // Prepare app before running forked CDK commands const cliInfo = getCliInfo(); diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index 4d656bafb2..a15cf954c9 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -4,7 +4,7 @@ const path = require("path"); const fs = require("fs-extra"); const chalk = require("chalk"); const spawn = require("cross-spawn"); -const cdk = require("@serverless-stack/aws-cdk"); +const cdk = require("sst-cdk"); const paths = require("./paths"); const logger = require("../util/logger"); diff --git a/packages/cli/test/base/yarn.lock b/packages/cli/test/base/yarn.lock index 78a05bdeea..1ca56e6ec4 100644 --- a/packages/cli/test/base/yarn.lock +++ b/packages/cli/test/base/yarn.lock @@ -302,7 +302,7 @@ integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== "@serverless-stack/resources@../../../resources": - version "0.1.3" + version "0.1.6" dependencies: "@aws-cdk/core" "1.61.0" diff --git a/packages/create-serverless-stack/scripts/get-cdk-version.js b/packages/create-serverless-stack/scripts/get-cdk-version.js index 061987c0ef..2c95b89b22 100644 --- a/packages/create-serverless-stack/scripts/get-cdk-version.js +++ b/packages/create-serverless-stack/scripts/get-cdk-version.js @@ -12,4 +12,4 @@ const cdkVersion = sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; fs.writeFileSync(path.join(__dirname, "../CDK_VERSION"), cdkVersion); -console.log(`Syncing with @serverless-stack/aws-cdk version ${cdkVersion}`); +console.log(`Syncing with sst-cdk version ${cdkVersion}`); From 881ebac2e084fe5b0915f7997e04e68196146888 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 1 Sep 2020 16:36:44 -0400 Subject: [PATCH 083/481] v0.1.7 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index 738a6a1a06..fde48275e0 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.1.6" + "version": "0.1.7" } diff --git a/packages/cli/package.json b/packages/cli/package.json index e34fe3649e..ad901adea8 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.1.6", + "version": "0.1.7", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "node test/helpers/sync-cdk-version.js", @@ -41,7 +41,7 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/resources": "^0.1.6", + "@serverless-stack/resources": "^0.1.7", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 67d95951a4..bc5845129d 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.1.6", + "version": "0.1.7", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index fc7515d1bb..b5d3277ce4 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.1.6", + "version": "0.1.7", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From e95bf661da91f1717fb0018bfcf4f6be955302fb Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 1 Sep 2020 16:55:21 -0400 Subject: [PATCH 084/481] Adding READMEs --- README.md | 289 ++++++++++++++++++++- packages/cli/README.md | 74 +++++- packages/create-serverless-stack/README.md | 48 +++- packages/resources/README.md | 84 +++++- 4 files changed, 491 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index cc5a263f3a..d136304e2a 100644 --- a/README.md +++ b/README.md @@ -1 +1,288 @@ -# serverless-stack [![Build Status](https://github.com/serverless-stack/serverless-stack/workflows/CI/badge.svg)](https://github.com/serverless-stack/serverless-stack/actions) [![npm](https://img.shields.io/npm/v/@serverless-stack/cli.svg)](https://www.npmjs.com/package/@serverless-stack/cli) +# Serverless Stack Toolkit (SST) [![npm](https://img.shields.io/npm/v/@serverless-stack/cli.svg)](https://www.npmjs.com/package/@serverless-stack/cli) [![Build Status](https://github.com/serverless-stack/serverless-stack/workflows/CI/badge.svg)](https://github.com/serverless-stack/serverless-stack/actions) + +Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.com/cdk/) that: + +- Allows you to use **CDK with Serverless Framework** +- And speeds up your deployments by **deploying all your stacks concurrently**! + +## Quick Start + +Create and deploy your first SST app. + +```bash +$ npx create-serverless-stack resources my-sst-app +$ cd my-sst-app +$ npx sst deploy +``` + +## Background + +Serverless Framework is great for deploying your Lambda functions. But deploying any other AWS resources requires you to write CloudFormation templates in YAML. CloudFormation templates are incredibly verbose and even creating simple resources can take hundreds of lines of YAML. AWS CDK solves this by allowing you to generate CloudFormation templates using modern programming languages. Making it truly, _infrastructure as code_. + +### Using Serverless Framework with CDK + +However, to use AWS CDK (to define your non-Lambda resources) alongside your Serverless Framework services, requires you to follow certain conventions. + +- **Deploying all the stacks to the same region and AWS account** + + Serverless Framework apps are deployed multiple times to each environment. Where each deployment uses the same region and AWS account. This is done using the `--region` and `AWS_PROFILE=profile` options as a part of the deploy command. CDK apps on the other hand, contains CloudFormation stacks that are deployed to multiple regions and AWS accounts simultaneously. + +- **Prefixing stage and resource names** + + Since the same app is deployed to multiple environments, the AWS resource names might thrash if you are using the same AWS account across environments. To avoid this, Serverless Framework adopts the practice of prefixing the stack (and other resource) names with the stage name. On the other hand, to deploy a CDK app to the multiple stages, you'd need to manually ensure that the stack names and resource names don't thrash. + +SST provides the above out-of-the-box. So you can deploy your Lambda functions using: + +```bash +$ AWS_PROFILE=production serverless deploy --stage prod --region us-east-1 +``` + +And use CDK for the rest of your AWS infrastructure: + +```bash +$ AWS_PROFILE=production npx sst deploy --stage prod --region us-east-1 +``` + +Making it really easy for you to start using CDK to create your AWS infrastructure. While still continuing to use Serverless Framework for your Lambda functions. + +### Speeding up CDK + +Finally, AWS CDK deployments are currently very slow. CDK deploys your CloudFormation stacks in sequence. It'll submit a CloudFormation template for deployment and wait till it completes before starting the next one. This means that CDK deployments for large apps can easily take at least half an hour. SST fixes this by deploying your CloudFormation stacks concurrently. It uses [a forked version of AWS CDK](https://github.com/serverless-stack/aws-cdk) internally to do this. + +### And more + +As a bonus, SST also supports deploying your CloudFormation stacks asynchronously. So you don't have to waste CI build minutes waiting for CloudFormation to complete. [Seed](https://seed.run) natively supports concurrent asynchronous deployments for your SST apps. Making it really fast and virtually free to deploy! + +SST also comes with a few other niceties: + +- Supports ES6 (and TypeScript) out-of-the-box +- Automatically lints your CDK code using [ESLint](https://eslint.org/) +- Runs your CDK unit tests using [Jest](https://jestjs.io/) + +--- + +## Usage + +### Creating an app + +Create a new project using. + +```bash +$ npx create-serverless-stack resources my-sst-app +``` + +Or alternatively, with a newer version of npm or Yarn. + +```bash +# With npm 6+ +$ npm init serverless-stack resources my-sst-app +# Or with Yarn 0.25+ +$ yarn create serverless-stack resources my-sst-app +``` + +This by default creates a JavaScript/ES6 project. If you instead want to use **TypeScript**. + +```bash +$ npm init serverless-stack resources my-sst-app --language typescript +``` + +By default your project is using npm as the package manager, if you'd like to use **Yarn**. + +```bash +$ npm init serverless-stack resources my-sst-app --use-yarn +``` + +You can read more about the [**create-serverless-stack** CLI here](https://github.com/serverless-stack/serverless-stack/tree/master/packages/create-serverless-stack). + +### Working on your app + +Your app starts with a simple project structure. + +``` +my-sst-app +├── README.md +├── node_modules +├── .gitignore +├── package.json +├── sst.json +├── test +│ └── MyStack.test.js +└── lib + ├── MyStack.js + └── index.js +``` + +It includes a config file in `sst.json`. + +```json +{ + "name": "my-sst-app", + "type": "@serverless-stack/resources", + "stage": "dev", + "region": "us-east-1" +} +``` + +The **stage** and the **region** are defaults for your app and can be overridden using the `--stage` and `--region` options. The **name** is used while prefixing your stack and resource names. And the **type** just tells the CLI to know which type of SST app this is. + +The `lib/index.js` file is the entry point for your app. It has a default export function to add your stacks. + +```jsx +import MyStack from "./MyStack"; + +export default function main(app) { + new MyStack(app, "my-stack"); + + // Add more stacks +} +``` + +In the sample `lib/MyStack.js` you can add the resources to your stack. + +```jsx +import * as sst from "@serverless-stack/resources"; + +export default class MyStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + // Define your stack + } +} +``` + +Note that the stacks in SST use `sst.Stack` as imported from `@serverless-stack/resources`. As opposed to `cdk.Stack`. This is what allows SST to make sure that your stack names are prefixed with the stage names and are deployed to the region and AWS account that's specified through the CLI. + +If you need to prefix certain resource names so that they don't thrash when deployed to multiple stages, you can do the following in your stacks. + +```jsx +this.node.root.logicalPrefixedName("MyResource"); +``` + +You can read more about [**@serverless-stack/resources** here](https://github.com/serverless-stack/serverless-stack/tree/master/packages/resources). + +### Building your app + +Once you are ready to build your app and convert your CDK code to CloudFormation, run the following from your project root. + +```bash +# With npm +$ npx sst build +# Or with Yarn +$ yarn sst build +``` + +This will compile your ES6 (or TS) code to the `build/` directory in your app. And the synthesized CloudFormation templates are outputted to `build/cdk.out/`. Note that, you shouldn't commit the `build/` directory to source control and it's ignored by default in your project's `.gitignore`. + +### Deploying your app + +Once your app has been built and tested successfully. You are ready to deploy it to AWS. + +```bash +# With npm +$ npx sst deploy +# Or with Yarn +$ yarn sst deploy +``` + +This uses your **default AWS Profile**. And the **region** and **stage** specified in your `sst.json`. You can deploy using a specific AWS profile, stage, and region by running. + +```bash +$ AWS_PROFILE=my-profile npx sst deploy --stage prod --region eu-west-1 +``` + +### Removing your app + +Finally, you can remove all your stacks and their resources from AWS using. + +```bash +# With npm +$ npx sst remove +# Or with Yarn +$ yarn sst remove +``` + +Note that, this permanently removes your resources from AWS. + +### Package scripts + +The above commands (`build`, `deploy`, and `remove`) are also available in your `package.json`. So you can run them using. + +```bash +# With npm +$ npm run +# Or with Yarn +$ yarn run +``` + +Just note that for `npm run`, you'll need to use an extra `--` for the options. For example: + +```bash +$ npm run build -- --stage alpha +``` + +### Testing your app + +You can run your tests using. + +```bash +# With npm +$ npm test +# Or with Yarn +$ yarn test +``` + +### Linting your code + +Your code is automatically linted when building or deploying. If you'd like to customize the lint rules, add a `.eslintrc.json` in your project root. If you'd like to turn off linting, add `*` to an `.eslintignore` file in your project root. + +## Known Issues + +There is a known issue in AWS CDK when using mismatched versions of their NPM packages. This means that all your AWS CDK packages in your `package.json` should use the same exact version. And since sst uses a forked version of AWS CDK internally, this means that your app needs to use the same versions as well. + +To help with this, sst will show a message to let you know if you might potentially run into this issue. And help you fix it. + +```bash +Mismatched versions of AWS CDK packages. Serverless Stack currently supports 1.55.0. Fix using: + + npm install @aws-cdk/aws-cognito@1.55.0 --save-exact +``` + +You can learn more about these issues [here](https://github.com/aws/aws-cdk/issues/9578) and [here](https://github.com/aws/aws-cdk/issues/542). + +## Future Roadmap + +- Add support for other AWS CDK languages + +## Contributing + +- Open [a new issue](https://github.com/serverless-stack/serverless-stack/issues/new) if you've found a bug or have some suggestions. +- Or submit a pull request! + +## Running Locally + +To run this project locally, clone the repo and initialize the project. + +```bash +$ git clone https://github.com/serverless-stack/serverless-stack.git +$ cd serverless-stack +$ yarn +``` + +Run all the tests. + +```bash +$ yarn test +``` + +## Community + +[Follow us on Twitter](https://twitter.com/ServerlessStack), [join our chatroom](https://gitter.im/serverless-stack/Lobby), or [post on our forums](https://discourse.serverless-stack.com). + +## Thanks + +This project extends [AWS CDK](https://github.com/aws/aws-cdk) and is based on the ideas from [Create React App](https://www.github.com/facebook/create-react-app). + +--- + +Brought to you by [Anomaly Innovations](https://anoma.ly/); makers of [Seed](https://seed.run/) and the [Serverless Stack Guide](https://serverless-stack.com/). diff --git a/packages/cli/README.md b/packages/cli/README.md index b23fbd9262..6f70378d03 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -1 +1,73 @@ -# @serverless-stack/cli +# @serverless-stack/cli [![npm](https://img.shields.io/npm/v/@serverless-stack/cli.svg)](https://www.npmjs.com/package/@serverless-stack/cli) + +Part of the **[Serverless Stack Toolkit](https://github.com/serverless-stack/serverless-stack)**. The `sst` CLI allows you to build, deploy, test, and remove Serverless Stack apps. + +## Installation + +While it can be installed globally, it's recommended to install it locally in your project instead. + +```bash +# With npm +$ npm install @serverless-stack/cli --save-exact +# Or with Yarn +$ yarn add @serverless-stack/cli --exact +``` + +## Usage + +Once installed locally, you can run the commands using. + +```bash +# With npm +$ npx sst +# Or with Yarn +$ yarn sst +``` + +## Commands + +### `build` + +Build your app and synthesize your stacks. + +Generates a `build/` directory with the compiled files and a `build/cdk.out/` directory with the synthesized CloudFormation stacks. + +### `deploy [stack]` + +Deploy all your stacks to AWS. Or optionally deploy a specific stack. + +### `remove [stack]` + +Remove all your stacks and all of their resources from AWS. Or optionally remove a specific stack. + +### `test` + +Runs your tests using Jest. Takes all the [Jest CLI options](https://jestjs.io/docs/en/cli). + +### `cdk` + +The sst CLI comes with [a forked version of AWS CDK](https://github.com/serverless-stack/aws-cdk) that it uses internally. This command gives direct access to it. To use this command you'll need to pass in the location of the CDK app. In our cases this is going to be generated in `build/run.js`. For example, to run the CDK `list` command you'll need to. + +```bash +$ npx sst cdk --app=build/run.js list +``` + +## Options + +### `--stage` + +The stage you want to deploy to. Defaults to the one specified in your `sst.json`. Or uses `dev`. + +### `--region` + +The region you want to deploy to. Defaults to the one specified in your `sst.json`. Or uses `us-east-1`. + +## AWS Profile + +Specify the AWS account you want to deploy to by using the `AWS_PROFILE` CLI environment variable. If not specified, uses the default AWS profile. [Read more about AWS profiles here](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html). For example: + +```bash +$ AWS_PROFILE=production npx sst deploy +``` + +Where `production` is a profile defined locally in your `~/.aws/credentials`. diff --git a/packages/create-serverless-stack/README.md b/packages/create-serverless-stack/README.md index 69d99c9e8c..b29db91335 100644 --- a/packages/create-serverless-stack/README.md +++ b/packages/create-serverless-stack/README.md @@ -1 +1,47 @@ -# create-serverless-stack +# create-serverless-stack [![npm](https://img.shields.io/npm/v/create-serverless-stack)](https://www.npmjs.com/package/create-serverless-stack) + +Part of the **[Serverless Stack Toolkit](https://github.com/serverless-stack/serverless-stack)**. A simple CLI (`create-serverless-stack`) that helps you create your Serverless Stack projects. + +## Usage + +There's no need install this CLI. Just use it directly to create your projects. + +With npx. + +```bash +$ npx create-serverless-stack resources my-sst-app +``` + +Or with npm 6+ + +```bash +$ npm init serverless-stack resources my-sst-app +``` + +Or with Yarn 0.25+ + +```bash +$ yarn create serverless-stack resources my-sst-app +``` + +This will create an app in the `my-sst-app/` directory. + +## Options + +Pass in the following (optional) options. + +### `--language` + +The language of the project: `javascript` or `typescript`. Defaults to `javascript`. For example: + +```bash +$ npm init serverless-stack resources my-sst-app --language typescript +``` + +### `--use-yarn` + +Use Yarn instead of npm as the packager. Defaults to npm. For example: + +```bash +$ yarn create serverless-stack resources my-sst-app --use-yarn +``` diff --git a/packages/resources/README.md b/packages/resources/README.md index 6557cd419f..0af098c93f 100644 --- a/packages/resources/README.md +++ b/packages/resources/README.md @@ -1 +1,83 @@ -# @serverless-stack/resources +# @serverless-stack/resources [![npm](https://img.shields.io/npm/v/@serverless-stack/resources.svg)](https://www.npmjs.com/package/@serverless-stack/resources) + +Part of the **[Serverless Stack Toolkit](https://github.com/serverless-stack/serverless-stack)**. Provides a couple of simple AWS CDK Constructs that allow you to: + +- Automatically prefix stack names with the stage +- Optionally prefix resource names with the stage +- Deploy the entire app using the same AWS profile and region + +## Usage + +### Creating a new stack + +Create a new stack by adding this in `lib/MyStack.js`. + +```jsx +import * as sst from "@serverless-stack/resources"; + +export default class MyStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + // Define your stack + } +} +``` + +Here `sst.Stack` is a simple extension of `cdk.Stack` that prefixes the stack name with the stage and enforces using the global region and AWS profile. + +### Adding to an app + +Add it to your app in `lib/index.js`. + +```jsx +import MyStack from "./MyStack"; + +export default function main(app) { + new MyStack(app, "my-stack"); + + // Add more stacks +} +``` + +Here `app` is an instance of `sst.App`. It's a simple extension of `cdk.App`. + +Note that, setting the env for an individual stack is not allowed. + +```jsx +new MyStack(app, "my-stack", { env: { account: "1234", region: "us-east-1" } }); +``` + +It will throw this error. + +``` +Error: Do not directly set the environment for a stack +``` + +This is by design. The stacks in SST are meant to be re-deployed for multiple stages (like Serverless Framework). And so they depend on the region and AWS profile that's passed in through the CLI. If a stack is hardcoded to be deployed to a specific account or region, it can break your deployment pipeline. + +### Prefixing resource names + +You can optionally prefix resource names to make sure they don't thrash when deployed to different stages in the same AWS account. + +You can do so in your stacks. + +```jsx +this.node.root.logicalPrefixedName("MyResource"); +``` + +This invokes the `logicalPrefixedName` method in `sst.App` that your stack is added to. + +You can also get the stage name using. + +```jsx +this.node.root.stage; +``` + +And the app name using. + +```jsx +this.node.root.name; +``` + +Again these access the `sst.App` that your stacks are added to. From 22680129ab17e594151b436d815dd02315423e84 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 1 Sep 2020 17:11:58 -0400 Subject: [PATCH 085/481] v0.1.8 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index fde48275e0..cbfbb503f6 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.1.7" + "version": "0.1.8" } diff --git a/packages/cli/package.json b/packages/cli/package.json index ad901adea8..b8c23b9888 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.1.7", + "version": "0.1.8", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "node test/helpers/sync-cdk-version.js", @@ -41,7 +41,7 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/resources": "^0.1.7", + "@serverless-stack/resources": "^0.1.8", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index bc5845129d..b0693ac022 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.1.7", + "version": "0.1.8", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index b5d3277ce4..bc4110fde6 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.1.7", + "version": "0.1.8", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From b0f0505820534adf8850c544317367bbef3a192d Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 1 Sep 2020 19:43:10 -0400 Subject: [PATCH 086/481] Updating link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d136304e2a..bb162df773 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ Making it really easy for you to start using CDK to create your AWS infrastructu ### Speeding up CDK -Finally, AWS CDK deployments are currently very slow. CDK deploys your CloudFormation stacks in sequence. It'll submit a CloudFormation template for deployment and wait till it completes before starting the next one. This means that CDK deployments for large apps can easily take at least half an hour. SST fixes this by deploying your CloudFormation stacks concurrently. It uses [a forked version of AWS CDK](https://github.com/serverless-stack/aws-cdk) internally to do this. +Finally, AWS CDK deployments are currently very slow. CDK deploys your CloudFormation stacks in sequence. It'll submit a CloudFormation template for deployment and wait till it completes before starting the next one. This means that CDK deployments for large apps can easily take at least half an hour. SST fixes this by deploying your CloudFormation stacks concurrently. It uses [a forked version of AWS CDK](https://github.com/serverless-stack/sst-cdk) internally to do this. ### And more From 85b15eeb615efcc07f32fc31347cd94dfea1e8d8 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 1 Sep 2020 19:55:41 -0400 Subject: [PATCH 087/481] Fixing typo --- packages/cli/scripts/build.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/scripts/build.js b/packages/cli/scripts/build.js index f98440ab33..aeca40c707 100644 --- a/packages/cli/scripts/build.js +++ b/packages/cli/scripts/build.js @@ -9,7 +9,7 @@ function printResults(results, usingYarn) { const stacks = results.stacks; const l = stacks.length; const stacksCopy = l === 1 ? "stack" : "stacks"; - const deployCmd = usingYarn ? "yarn sst deploy" : "npm sst deploy"; + const deployCmd = usingYarn ? "yarn sst deploy" : "npx sst deploy"; logger.log( `\nSuccessfully compiled ${l} ${stacksCopy} to ${chalk.cyan( From 7d2ea812c20e38e9a8855751c4444cc965dcc039 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 1 Sep 2020 19:56:40 -0400 Subject: [PATCH 088/481] v0.1.9 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index cbfbb503f6..d7b8ee041c 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.1.8" + "version": "0.1.9" } diff --git a/packages/cli/package.json b/packages/cli/package.json index b8c23b9888..dc7c3d79de 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.1.8", + "version": "0.1.9", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "node test/helpers/sync-cdk-version.js", @@ -41,7 +41,7 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/resources": "^0.1.8", + "@serverless-stack/resources": "^0.1.9", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index b0693ac022..c0dc3343f8 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.1.8", + "version": "0.1.9", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index bc4110fde6..c27716ac8c 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.1.8", + "version": "0.1.9", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 08e4315f29c9ffa609f7072ff95be6660e343771 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 1 Sep 2020 21:30:33 -0400 Subject: [PATCH 089/481] Adding ToC --- README.md | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bb162df773..c644e3f045 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,27 @@ $ cd my-sst-app $ npx sst deploy ``` +## Table of Contents + +- [Background](#background) +- [Usage](#usage) + - [Creating an app](#creating-an-app) + - [Working on your app](#working-on-your-app) + - [Building your app](#building-your-app) + - [Deploying your app](#deploying-your-app) + - [Removing your app](#removing-your-app) + - [Package scripts](#package-scripts) + - [Testing your app](#testing-your-app) + - [Linting your code](#linting-your-code) +- [Known Issues](#known-issues) +- [Future Roadmap](#future-roadmap) +- [Contributing](#contributing) +- [Running Locally](#running-locally) +- [Community](#community) +- [Thanks](#thanks) + +--- + ## Background Serverless Framework is great for deploying your Lambda functions. But deploying any other AWS resources requires you to write CloudFormation templates in YAML. CloudFormation templates are incredibly verbose and even creating simple resources can take hundreds of lines of YAML. AWS CDK solves this by allowing you to generate CloudFormation templates using modern programming languages. Making it truly, _infrastructure as code_. @@ -59,8 +80,6 @@ SST also comes with a few other niceties: - Automatically lints your CDK code using [ESLint](https://eslint.org/) - Runs your CDK unit tests using [Jest](https://jestjs.io/) ---- - ## Usage ### Creating an app From 0c3d70138d596af8b5c0974a15bd35c1bed843f3 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 1 Sep 2020 21:31:38 -0400 Subject: [PATCH 090/481] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index c644e3f045..00213e42ee 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,6 @@ $ npx sst deploy - [Contributing](#contributing) - [Running Locally](#running-locally) - [Community](#community) -- [Thanks](#thanks) --- From 5dd237db5d016aee2f5e6e8a924f722c3a81b1db Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 2 Sep 2020 14:56:01 -0400 Subject: [PATCH 091/481] Adding migration steps to README --- README.md | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 70 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 00213e42ee..343cb15391 100644 --- a/README.md +++ b/README.md @@ -23,14 +23,19 @@ $ npx sst deploy - [Working on your app](#working-on-your-app) - [Building your app](#building-your-app) - [Deploying your app](#deploying-your-app) - - [Removing your app](#removing-your-app) + - [Removing an app](#removing-an-app) - [Package scripts](#package-scripts) - [Testing your app](#testing-your-app) - [Linting your code](#linting-your-code) +- [Migrating From CDK](#migrating-from-cdk) - [Known Issues](#known-issues) - [Future Roadmap](#future-roadmap) - [Contributing](#contributing) - [Running Locally](#running-locally) +- [References](#references) + - [`@serverless-stack/cli`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/cli) + - [`create-serverless-stack`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/create-serverless-stack) + - [`@serverless-stack/resources`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/resources) - [Community](#community) --- @@ -209,7 +214,7 @@ This uses your **default AWS Profile**. And the **region** and **stage** specifi $ AWS_PROFILE=my-profile npx sst deploy --stage prod --region eu-west-1 ``` -### Removing your app +### Removing an app Finally, you can remove all your stacks and their resources from AWS using. @@ -254,6 +259,63 @@ $ yarn test Your code is automatically linted when building or deploying. If you'd like to customize the lint rules, add a `.eslintrc.json` in your project root. If you'd like to turn off linting, add `*` to an `.eslintignore` file in your project root. +## Migrating From CDK + +It's fairly simple to move a CDK app to SST. There are a couple of small differences between the two: + +1. There is no `cdk.json` + + If you have a `context` block in your `cdk.json`, you can move it to a `cdk.context.json`. You can [read more about this here](https://docs.aws.amazon.com/cdk/latest/guide/context.html). You'll also need to add a `sst.json` config file, as talked about above. Here is a sample config for reference. + + ``` json + { + "name": "my-sst-app", + "type": "@serverless-stack/resources", + "stage": "dev", + "region": "us-east-1" + } + ``` + +2. There is no `bin/*.js` + + Instead there is a `lib/index.js` that has a default export function where you can add your stacks. SST creates the App object for you. This is what allows SST to ensure that the stage, region, and AWS accounts are set uniformly across all the stacks. Here is a sample `lib/index.js` for reference. + + ``` js + import MyStack from "./MyStack"; + + export default function main(app) { + new MyStack(app, "my-stack"); + + // Add more stacks + } + ``` + +3. Stacks extend `sst.Stack` + + Your stack classes extend `sst.Stack` instead of `cdk.Stack`. Here is what the JavaScript version looks like. + + ``` js + import * as sst from "@serverless-stack/resources"; + + export default class MyStack extends sst.Stack { + constructor(scope, id, props) { } + } + ``` + + And in TypeScript. + + ``` ts + import * as sst from "@serverless-stack/resources"; + + export class MyStack extends sst.Stack { + constructor(scope: sst.App, id: string, props?: sst.StackProps) { } + } + ``` + +4. Include the right packages + + You don't need the `aws-cdk` package in your `package.json`. Instead you'll need `@serverless-stack/cli` and `@serverless-stack/resources`. + ## Known Issues There is a known issue in AWS CDK when using mismatched versions of their NPM packages. This means that all your AWS CDK packages in your `package.json` should use the same exact version. And since sst uses a forked version of AWS CDK internally, this means that your app needs to use the same versions as well. @@ -293,6 +355,12 @@ Run all the tests. $ yarn test ``` +## References + +- [`@serverless-stack/cli`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/cli) +- [`create-serverless-stack`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/create-serverless-stack) +- [`@serverless-stack/resources`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/resources) + ## Community [Follow us on Twitter](https://twitter.com/ServerlessStack), [join our chatroom](https://gitter.im/serverless-stack/Lobby), or [post on our forums](https://discourse.serverless-stack.com). From 4b0816c71042cb396e6f91805677db9679e999c4 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 2 Sep 2020 17:02:57 -0400 Subject: [PATCH 092/481] Updating README with app samples --- README.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 343cb15391..9fc250acc3 100644 --- a/README.md +++ b/README.md @@ -160,6 +160,14 @@ export default function main(app) { } ``` +Here you'll be able to access the stage, region, and name of your app using. + +``` js +app.stage // "dev" +app.region // "us-east-1" +app.name // "my-sst-app" +``` + In the sample `lib/MyStack.js` you can add the resources to your stack. ```jsx @@ -176,10 +184,18 @@ export default class MyStack extends sst.Stack { Note that the stacks in SST use `sst.Stack` as imported from `@serverless-stack/resources`. As opposed to `cdk.Stack`. This is what allows SST to make sure that your stack names are prefixed with the stage names and are deployed to the region and AWS account that's specified through the CLI. -If you need to prefix certain resource names so that they don't thrash when deployed to multiple stages, you can do the following in your stacks. +You can access the stage, region, and name of your app using. + +``` js +this.node.root.stage // "dev" +this.node.root.region // "us-east-1" +this.node.root.name // "my-sst-app" +``` + +And if you need to prefix certain resource names so that they don't thrash when deployed to multiple stages, you can do the following in your stacks. ```jsx -this.node.root.logicalPrefixedName("MyResource"); +this.node.root.logicalPrefixedName("MyResource") // "dev-my-sst-app-MyResource" ``` You can read more about [**@serverless-stack/resources** here](https://github.com/serverless-stack/serverless-stack/tree/master/packages/resources). From 67e63f363e2981268dea7bacc21f22d4358ca0e2 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 2 Sep 2020 17:11:22 -0400 Subject: [PATCH 093/481] Adding to docs on accessing app info --- packages/resources/README.md | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/packages/resources/README.md b/packages/resources/README.md index 0af098c93f..a5f2e7866e 100644 --- a/packages/resources/README.md +++ b/packages/resources/README.md @@ -56,28 +56,37 @@ Error: Do not directly set the environment for a stack This is by design. The stacks in SST are meant to be re-deployed for multiple stages (like Serverless Framework). And so they depend on the region and AWS profile that's passed in through the CLI. If a stack is hardcoded to be deployed to a specific account or region, it can break your deployment pipeline. -### Prefixing resource names -You can optionally prefix resource names to make sure they don't thrash when deployed to different stages in the same AWS account. +### Accessing app info -You can do so in your stacks. +The stage, region, and app name can be accessed through the app object. -```jsx -this.node.root.logicalPrefixedName("MyResource"); -``` +So in the `lib/index.js` you can access it using. -This invokes the `logicalPrefixedName` method in `sst.App` that your stack is added to. +``` js +app.stage +app.region +app.name +``` -You can also get the stage name using. +And in your stack classes (for example, `lib/MyStack.js`) you can use. -```jsx -this.node.root.stage; +``` js +this.node.root.stage +this.node.root.region +this.node.root.name ``` -And the app name using. +You can use this to conditionally add stacks or resources to your app. + +### Prefixing resource names + +You can optionally prefix resource names to make sure they don't thrash when deployed to different stages in the same AWS account. + +You can do so in your stacks. ```jsx -this.node.root.name; +this.node.root.logicalPrefixedName("MyResource") // Returns "dev-my-sst-app-MyResource" ``` -Again these access the `sst.App` that your stacks are added to. +This invokes the `logicalPrefixedName` method in `sst.App` that your stack is added to. This'll return `dev-my-sst-app-MyResource`, where `dev` is the current stage and `my-sst-app` is the name of the app. From 2591eece020ee96b0a5487203f049b794569a6b8 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 11 Sep 2020 17:37:12 -0400 Subject: [PATCH 094/481] Upgrading sst-cdk --- packages/cli/package.json | 2 +- packages/cli/test/base/sst.json | 2 +- yarn.lock | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index dc7c3d79de..912c92ee6b 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -53,7 +53,7 @@ "fs-extra": "^9.0.1", "jest": "^26.1.0", "source-map-support": "^0.5.19", - "sst-cdk": "1.61.0-rc.7", + "sst-cdk": "1.61.0-rc.12", "ts-jest": "^26.1.4", "typescript": "^3.9.7", "yargs": "^15.4.1" diff --git a/packages/cli/test/base/sst.json b/packages/cli/test/base/sst.json index 3e7b463755..550b59d5db 100644 --- a/packages/cli/test/base/sst.json +++ b/packages/cli/test/base/sst.json @@ -2,5 +2,5 @@ "type": "@serverless-stack/resources", "name": "cdknotes", "stage": "prod", - "region": "us-west-1" + "region": "us-east-1" } diff --git a/yarn.lock b/yarn.lock index 81c5143008..51f1561acb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8150,10 +8150,10 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -sst-cdk@1.61.0-rc.7: - version "1.61.0-rc.7" - resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.61.0-rc.7.tgz#0bc4b142d8dcd0416b2249d5578f84b63e57c1e0" - integrity sha512-CeY+gmWBaQKdz83R6kGT6dLquQWYofXjTfyfOsuSRXUZWnCgVfxIq+byWBOxPoh7u9V0249gikq3231LWSM7tQ== +sst-cdk@1.61.0-rc.12: + version "1.61.0-rc.12" + resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.61.0-rc.12.tgz#e7748148333f04c76e2b449b3e5e4e58bfaa2154" + integrity sha512-07AFUadh3uN/Hz8Q5cge/gcktqg2PQGlcV2/2tvDkliXCYbbpWgGUSdn2u6auXO1r9EOlrSzXAFwbEl458OC8Q== dependencies: "@aws-cdk/cloud-assembly-schema" "1.61.0" "@aws-cdk/cloudformation-diff" "1.61.0" From 997ee41d2c35f69ccf25cb6aa2b8fb44dbf5dc42 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 11 Sep 2020 17:38:08 -0400 Subject: [PATCH 095/481] v0.1.10 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index d7b8ee041c..db8bd93eac 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.1.9" + "version": "0.1.10" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 912c92ee6b..92657139c1 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.1.9", + "version": "0.1.10", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "node test/helpers/sync-cdk-version.js", @@ -41,7 +41,7 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/resources": "^0.1.9", + "@serverless-stack/resources": "^0.1.10", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index c0dc3343f8..45518a91b9 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.1.9", + "version": "0.1.10", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index c27716ac8c..ff724ff81f 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.1.9", + "version": "0.1.10", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 39172556b2e198833e570b73a94820970936391c Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 15 Sep 2020 15:20:04 -0400 Subject: [PATCH 096/481] Update README.md --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 9fc250acc3..6dabd85796 100644 --- a/README.md +++ b/README.md @@ -285,10 +285,10 @@ It's fairly simple to move a CDK app to SST. There are a couple of small differe ``` json { - "name": "my-sst-app", - "type": "@serverless-stack/resources", - "stage": "dev", - "region": "us-east-1" + "name": "my-sst-app", + "type": "@serverless-stack/resources", + "stage": "dev", + "region": "us-east-1" } ``` @@ -300,9 +300,9 @@ It's fairly simple to move a CDK app to SST. There are a couple of small differe import MyStack from "./MyStack"; export default function main(app) { - new MyStack(app, "my-stack"); + new MyStack(app, "my-stack"); - // Add more stacks + // Add more stacks } ``` @@ -314,7 +314,7 @@ It's fairly simple to move a CDK app to SST. There are a couple of small differe import * as sst from "@serverless-stack/resources"; export default class MyStack extends sst.Stack { - constructor(scope, id, props) { } + constructor(scope, id, props) { } } ``` @@ -324,7 +324,7 @@ It's fairly simple to move a CDK app to SST. There are a couple of small differe import * as sst from "@serverless-stack/resources"; export class MyStack extends sst.Stack { - constructor(scope: sst.App, id: string, props?: sst.StackProps) { } + constructor(scope: sst.App, id: string, props?: sst.StackProps) { } } ``` From 945fbbf867c236fd008e1ab019986e2fd30fffcc Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 24 Sep 2020 20:48:02 -0400 Subject: [PATCH 097/481] Adding add-cdk command to help with cdk mismatch issue --- README.md | 70 ++++++++++++------- packages/cli/README.md | 30 ++++++++ packages/cli/bin/scripts.js | 24 +++++++ packages/cli/scripts/add-cdk.js | 32 +++++++++ packages/cli/scripts/config/cdkHelpers.js | 9 ++- packages/cli/scripts/wrapper/include.js | 3 - packages/cli/test/add-cdk/add-cdk.test.js | 23 ++++++ packages/cli/test/add-cdk/package.json | 13 ++++ packages/cli/test/add-cdk/yarn.lock | 4 ++ packages/cli/test/base/package.json | 6 +- packages/cli/test/base/yarn.lock | 2 +- packages/cli/test/helpers/index.js | 6 ++ .../cli/test/helpers/run-add-cdk-command.js | 27 +++++++ 13 files changed, 211 insertions(+), 38 deletions(-) create mode 100644 packages/cli/scripts/add-cdk.js delete mode 100644 packages/cli/scripts/wrapper/include.js create mode 100644 packages/cli/test/add-cdk/add-cdk.test.js create mode 100644 packages/cli/test/add-cdk/package.json create mode 100644 packages/cli/test/add-cdk/yarn.lock create mode 100644 packages/cli/test/helpers/run-add-cdk-command.js diff --git a/README.md b/README.md index 6dabd85796..16434f1ec8 100644 --- a/README.md +++ b/README.md @@ -162,10 +162,10 @@ export default function main(app) { Here you'll be able to access the stage, region, and name of your app using. -``` js -app.stage // "dev" -app.region // "us-east-1" -app.name // "my-sst-app" +```js +app.stage; // "dev" +app.region; // "us-east-1" +app.name; // "my-sst-app" ``` In the sample `lib/MyStack.js` you can add the resources to your stack. @@ -186,16 +186,16 @@ Note that the stacks in SST use `sst.Stack` as imported from `@serverless-stack/ You can access the stage, region, and name of your app using. -``` js -this.node.root.stage // "dev" -this.node.root.region // "us-east-1" -this.node.root.name // "my-sst-app" +```js +this.node.root.stage; // "dev" +this.node.root.region; // "us-east-1" +this.node.root.name; // "my-sst-app" ``` And if you need to prefix certain resource names so that they don't thrash when deployed to multiple stages, you can do the following in your stacks. ```jsx -this.node.root.logicalPrefixedName("MyResource") // "dev-my-sst-app-MyResource" +this.node.root.logicalPrefixedName("MyResource"); // "dev-my-sst-app-MyResource" ``` You can read more about [**@serverless-stack/resources** here](https://github.com/serverless-stack/serverless-stack/tree/master/packages/resources). @@ -282,8 +282,8 @@ It's fairly simple to move a CDK app to SST. There are a couple of small differe 1. There is no `cdk.json` If you have a `context` block in your `cdk.json`, you can move it to a `cdk.context.json`. You can [read more about this here](https://docs.aws.amazon.com/cdk/latest/guide/context.html). You'll also need to add a `sst.json` config file, as talked about above. Here is a sample config for reference. - - ``` json + + ```json { "name": "my-sst-app", "type": "@serverless-stack/resources", @@ -291,12 +291,12 @@ It's fairly simple to move a CDK app to SST. There are a couple of small differe "region": "us-east-1" } ``` - + 2. There is no `bin/*.js` Instead there is a `lib/index.js` that has a default export function where you can add your stacks. SST creates the App object for you. This is what allows SST to ensure that the stage, region, and AWS accounts are set uniformly across all the stacks. Here is a sample `lib/index.js` for reference. - - ``` js + + ```js import MyStack from "./MyStack"; export default function main(app) { @@ -309,34 +309,36 @@ It's fairly simple to move a CDK app to SST. There are a couple of small differe 3. Stacks extend `sst.Stack` Your stack classes extend `sst.Stack` instead of `cdk.Stack`. Here is what the JavaScript version looks like. - - ``` js + + ```js import * as sst from "@serverless-stack/resources"; - + export default class MyStack extends sst.Stack { - constructor(scope, id, props) { } + constructor(scope, id, props) {} } ``` - + And in TypeScript. - - ``` ts + + ```ts import * as sst from "@serverless-stack/resources"; - + export class MyStack extends sst.Stack { - constructor(scope: sst.App, id: string, props?: sst.StackProps) { } + constructor(scope: sst.App, id: string, props?: sst.StackProps) {} } ``` - + 4. Include the right packages You don't need the `aws-cdk` package in your `package.json`. Instead you'll need `@serverless-stack/cli` and `@serverless-stack/resources`. ## Known Issues -There is a known issue in AWS CDK when using mismatched versions of their NPM packages. This means that all your AWS CDK packages in your `package.json` should use the same exact version. And since sst uses a forked version of AWS CDK internally, this means that your app needs to use the same versions as well. +### CDK Version Mismatch + +There is a known issue in AWS CDK when using mismatched versions of their NPM packages. This means that all your AWS CDK packages in your `package.json` should use the same exact version. And since SST uses a forked version of AWS CDK internally, this means that your app needs to use the same versions as well. -To help with this, sst will show a message to let you know if you might potentially run into this issue. And help you fix it. +To help with this, SST will show a message to let you know if you might potentially run into this issue. And help you fix it. ```bash Mismatched versions of AWS CDK packages. Serverless Stack currently supports 1.55.0. Fix using: @@ -344,6 +346,22 @@ Mismatched versions of AWS CDK packages. Serverless Stack currently supports 1.5 npm install @aws-cdk/aws-cognito@1.55.0 --save-exact ``` +We also created a convenience method to help install the CDK npm packages with the right version — [`sst add-cdk`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/cli#add-cdk-packages). + +So instead of: + +```bash +$ npm install @aws-cdk/aws-s3 @aws-cdk/aws-iam +``` + +You can do: + +```bash +$ npx sst add-cdk @aws-cdk/aws-s3 @aws-cdk/aws-iam +``` + +And it'll install those packages using the right CDK versions. + You can learn more about these issues [here](https://github.com/aws/aws-cdk/issues/9578) and [here](https://github.com/aws/aws-cdk/issues/542). ## Future Roadmap diff --git a/packages/cli/README.md b/packages/cli/README.md index 6f70378d03..c8eacf80b4 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -40,6 +40,36 @@ Deploy all your stacks to AWS. Or optionally deploy a specific stack. Remove all your stacks and all of their resources from AWS. Or optionally remove a specific stack. +### `add-cdk [packages..]` + +Installs the given AWS CDK npm packages with the appropriate CDK version. This convenience method helps get around the [known CDK issue of version mismatches](https://github.com/serverless-stack/serverless-stack#cdk-version-mismatch). This command internally simply does and `npm install` or `yarn add`. + +So instead of installing the CDK npm packages directly: + +```bash +$ npm install @aws-cdk/aws-s3 @aws-cdk/aws-iam +``` + +Use the `add-cdk` command instead. + +```bash +$ npx sst add-cdk @aws-cdk/aws-s3 @aws-cdk/aws-iam +``` + +Which in turn does: + +```bash +$ npm install @aws-cdk/aws-s3@x.x.x @aws-cdk/aws-iam@x.x.x +``` + +Where `x.x.x` is the version of CDK that's being used internally. Note, that it'll use Yarn instead if it detects a `yarn.lock` file in your project. + +#### Options + +- `--dev` + + You can also pass in the `--dev` option if you need the packages to be installed as `devDependencies`. + ### `test` Runs your tests using Jest. Takes all the [Jest CLI options](https://jestjs.io/docs/en/cli). diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index c6d1fdfa82..e82d5c4cdf 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -39,12 +39,14 @@ const cmd = { build: "build", deploy: "deploy", remove: "remove", + addCdk: "add-cdk", }; const internals = { [cmd.build]: require("../scripts/build"), [cmd.deploy]: require("../scripts/deploy"), [cmd.remove]: require("../scripts/remove"), + [cmd.addCdk]: require("../scripts/add-cdk"), }; function getCdkVersion() { @@ -119,6 +121,22 @@ const argv = yargs "Remove all your stacks and all of their resources from AWS", addOptions(cmd.remove) ) + .command( + `${cmd.addCdk} [packages..]`, + "Installs the given CDK package(s) in your app", + { + dev: { + default: false, + type: "boolean", + desc: "Install as a dev dependency", + }, + "dry-run": { + default: false, + type: "boolean", + desc: "Do not install, but show the install command", + }, + } + ) .command(cmd.test, "Run your tests") .command(cmd.cdk, "Access the forked AWS CDK CLI") @@ -175,6 +193,12 @@ switch (script) { Promise.resolve(internals[script](argv, config, cliInfo)); break; } + case cmd.addCdk: { + const cliInfo = getCliInfo(); + + Promise.resolve(internals[script](argv, cliInfo)); + break; + } case cmd.cdk: case cmd.test: { if (script === cmd.cdk) { diff --git a/packages/cli/scripts/add-cdk.js b/packages/cli/scripts/add-cdk.js new file mode 100644 index 0000000000..c0020d5ebd --- /dev/null +++ b/packages/cli/scripts/add-cdk.js @@ -0,0 +1,32 @@ +"use strict"; + +const chalk = require("chalk"); +const spawn = require("cross-spawn"); + +const logger = require("./util/logger"); + +module.exports = async function (argv, cliInfo) { + const npm = cliInfo.npm; + const dryRun = argv.dryRun; + const cdkVersion = cliInfo.cdkVersion; + const packages = argv.packages.map((pkg) => `${pkg}@${cdkVersion}`); + + const command = npm ? "npm" : "yarn"; + const helperCopy = dryRun ? "Dry run" : "Running"; + + let args = npm ? ["install", "--save-exact"] : ["add", "--exact"]; + + if (argv.dev) { + args = args.concat(npm ? "--save-dev" : "--dev"); + } + + args = args.concat(packages); + + logger.log(chalk.grey(`${helperCopy}: ${command} ${args.join(" ")}`)); + + if (dryRun) { + return; + } + + spawn.sync(command, args, { stdio: "inherit" }); +}; diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index a15cf954c9..acd21cd30f 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -66,11 +66,10 @@ function formatDepsForInstall(depsList, version) { * - For TS: https://github.com/aws/aws-cdk/issues/542 * - For JS: https://github.com/aws/aws-cdk/issues/9578 */ -function runCdkVersionMatch(cliInfo, isTs) { +function runCdkVersionMatch(cliInfo) { const usingYarn = cliInfo.usingYarn; - const helpUrl = isTs - ? "https://github.com/aws/aws-cdk/issues/542" - : "https://github.com/aws/aws-cdk/issues/9578"; + const helpUrl = + "https://github.com/serverless-stack/serverless-stack#cdk-version-mismatch"; const cdkVersion = cliInfo.cdkVersion; @@ -145,7 +144,7 @@ function transpile(cliInfo) { let args; let opts = { stdio: "inherit" }; - runCdkVersionMatch(cliInfo, isTs); + runCdkVersionMatch(cliInfo); if (isTs) { logger.log(chalk.grey("Detected tsconfig.json")); diff --git a/packages/cli/scripts/wrapper/include.js b/packages/cli/scripts/wrapper/include.js deleted file mode 100644 index 6959ed6a3c..0000000000 --- a/packages/cli/scripts/wrapper/include.js +++ /dev/null @@ -1,3 +0,0 @@ -import { App } from "@serverless-stack/resources"; - -export default App; diff --git a/packages/cli/test/add-cdk/add-cdk.test.js b/packages/cli/test/add-cdk/add-cdk.test.js new file mode 100644 index 0000000000..f8661dd051 --- /dev/null +++ b/packages/cli/test/add-cdk/add-cdk.test.js @@ -0,0 +1,23 @@ +const { runAddCdkCommand, clearBuildOutput } = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the add-cdk command ran successfully + */ +test("add-cdk", async () => { + const result = await runAddCdkCommand( + __dirname, + "@aws-cdk/aws-s3 @aws-cdk/aws-iam" + ); + + expect(result).toMatch( + /yarn add --exact @aws-cdk\/aws-s3@\d+.\d+.\d+ @aws-cdk\/aws-iam@\d+.\d+.\d+/ + ); +}); diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json new file mode 100644 index 0000000000..a4be7b3346 --- /dev/null +++ b/packages/cli/test/add-cdk/package.json @@ -0,0 +1,13 @@ +{ + "name": "add-cdk", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "add-cdk": "../../bin/scripts.js add-cdk" + }, + "keywords": [], + "author": "", + "dependencies": {}, + "license": "ISC" +} diff --git a/packages/cli/test/add-cdk/yarn.lock b/packages/cli/test/add-cdk/yarn.lock new file mode 100644 index 0000000000..fb57ccd13a --- /dev/null +++ b/packages/cli/test/add-cdk/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index c5b3fa0f54..b22cc68627 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -7,16 +7,16 @@ "build": "../../bin/scripts.js build", "remove": "../../bin/scripts.js remove", "deploy": "../../bin/scripts.js deploy", + "add-cdk": "../../bin/scripts.js add-cdk", "cdk": "../../bin/scripts.js cdk" }, "keywords": [], "author": "", "dependencies": { - "@serverless-stack/resources": "../../../resources", "@aws-cdk/aws-cognito": "1.61.0", "@aws-cdk/aws-dynamodb": "1.61.0", - "@aws-cdk/aws-iam": "1.61.0", - "@aws-cdk/core": "1.61.0" + "@aws-cdk/core": "1.61.0", + "@serverless-stack/resources": "../../../resources" }, "license": "ISC" } diff --git a/packages/cli/test/base/yarn.lock b/packages/cli/test/base/yarn.lock index 1ca56e6ec4..5fc447868c 100644 --- a/packages/cli/test/base/yarn.lock +++ b/packages/cli/test/base/yarn.lock @@ -302,7 +302,7 @@ integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== "@serverless-stack/resources@../../../resources": - version "0.1.6" + version "0.1.10" dependencies: "@aws-cdk/core" "1.61.0" diff --git a/packages/cli/test/helpers/index.js b/packages/cli/test/helpers/index.js index f55de906a7..d43ea9bba6 100644 --- a/packages/cli/test/helpers/index.js +++ b/packages/cli/test/helpers/index.js @@ -1,7 +1,10 @@ const yarnInstall = require("./yarn-install"); + const runCdkCommand = require("./run-cdk-command"); const runJestCommand = require("./run-jest-command"); const runBuildCommand = require("./run-build-command"); +const runAddCdkCommand = require("./run-add-cdk-command"); + const clearBuildOutput = require("./clear-build-output"); const removeNodeModules = require("./remove-node-modules"); @@ -12,9 +15,12 @@ module.exports = { yarnInstall, errorRegex, successRegex, + runCdkCommand, runJestCommand, runBuildCommand, + runAddCdkCommand, + clearBuildOutput, removeNodeModules, }; diff --git a/packages/cli/test/helpers/run-add-cdk-command.js b/packages/cli/test/helpers/run-add-cdk-command.js new file mode 100644 index 0000000000..c08d0e4592 --- /dev/null +++ b/packages/cli/test/helpers/run-add-cdk-command.js @@ -0,0 +1,27 @@ +const { promisify } = require("util"); +const { exec } = require("child_process"); +const yarnInstall = require("./yarn-install"); + +const execPromise = promisify(exec); +const TIMEOUT = 30000; + +async function runAddCdkCommand(cwd, packages) { + await yarnInstall(cwd); + + let result, error; + + try { + result = await execPromise( + `yarn add-cdk --no-color --dry-run ${packages}`, + { cwd, TIMEOUT } + ); + } catch (e) { + error = e.toString() + e.stdout; + } + + return error + ? error + : result.stdout.toString("utf8") + result.stderr.toString("utf8"); +} + +module.exports = runAddCdkCommand; From 0c25fa7ba05de8acaf8b6fbe2ea593732887ef96 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 24 Sep 2020 20:56:37 -0400 Subject: [PATCH 098/481] v0.2.0 --- lerna.json | 2 +- packages/cli/package.json | 4 ++-- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index db8bd93eac..13e9aa977d 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.1.10" + "version": "0.2.0" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 92657139c1..8ddbbc58ca 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.1.10", + "version": "0.2.0", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "node test/helpers/sync-cdk-version.js", @@ -41,7 +41,7 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/resources": "^0.1.10", + "@serverless-stack/resources": "^0.2.0", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 45518a91b9..6306c4d33d 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.1.10", + "version": "0.2.0", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index ff724ff81f..a0d4ccb12d 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.1.10", + "version": "0.2.0", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 8a0981ec4fabb394dce3cfc3277eeef341ec3645 Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 26 Sep 2020 22:42:13 -0400 Subject: [PATCH 099/481] Implement --- .gitignore | 3 + packages/cli/package.json | 3 +- packages/cli/scripts/config/cdkHelpers.js | 38 +- packages/cli/scripts/deploy.js | 491 +++++++++++++++++++++- packages/cli/scripts/remove.js | 391 ++++++++++++++++- packages/cli/test/base/lib/index.js | 11 +- yarn.lock | 23 +- 7 files changed, 944 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 67045665db..ceef839c7f 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,6 @@ dist # TernJS port file .tern-port + +# Vim +.*.sw* diff --git a/packages/cli/package.json b/packages/cli/package.json index 92657139c1..fbe4a26433 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -46,6 +46,7 @@ "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", "@typescript-eslint/parser": "^3.9.1", + "aws-sdk": "^2.761.0", "chalk": "^4.1.0", "core-js": "^3.6.5", "cross-spawn": "^7.0.3", @@ -53,7 +54,7 @@ "fs-extra": "^9.0.1", "jest": "^26.1.0", "source-map-support": "^0.5.19", - "sst-cdk": "1.61.0-rc.12", + "sst-cdk": "1.61.0-rc.20", "ts-jest": "^26.1.4", "typescript": "^3.9.7", "yargs": "^15.4.1" diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index a15cf954c9..fc03967afa 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -279,6 +279,18 @@ function handleCdkErrors(e) { } } +async function list(options) { + let results; + + try { + results = await cdk.sstList(options); + } catch (e) { + handleCdkErrors(e); + } + + return results; +} + async function synth(options) { let results; @@ -291,25 +303,47 @@ async function synth(options) { return results; } +async function bootstrap(options) { + let results; + + try { + results = await cdk.sstBootstrap(options); + } catch (e) { + handleCdkErrors(e); + } + + return results; +} + async function deploy(options) { + let results; + try { - await cdk.sstDeploy(options); + results = await cdk.sstDeploy(options); } catch (e) { handleCdkErrors(e); } + + return results; } async function destroy(options) { + let results; + try { - await cdk.sstDestroy(options); + results = await cdk.sstDestroy(options); } catch (e) { handleCdkErrors(e); } + + return results; } module.exports = { + list, synth, deploy, destroy, + bootstrap, prepareCdk, }; diff --git a/packages/cli/scripts/deploy.js b/packages/cli/scripts/deploy.js index dedb96ef6f..1dec9d46e8 100644 --- a/packages/cli/scripts/deploy.js +++ b/packages/cli/scripts/deploy.js @@ -1,11 +1,498 @@ "use strict"; +const aws = require("aws-sdk"); const chalk = require("chalk"); const logger = require("./util/logger"); -const { deploy } = require("./config/cdkHelpers"); +const { list, bootstrap, deploy } = require("./config/cdkHelpers"); module.exports = async function (argv, config, cliInfo) { logger.log(chalk.grey("Deploying " + (argv.stack ? argv.stack : "stacks"))); - await deploy({ ...cliInfo.cdkOptions, stackName: argv.stack }); + + // Wait for deploy to complete + let stackStates; + let isCompleted; + do { + // Get CFN events before update + const prevEventCount = stackStates ? getEventCount(stackStates) : 0; + + // Update deploy status + const cdkOptions = { ...cliInfo.cdkOptions, stackName: argv.stack }; + const response = await parallelDeploy( + cdkOptions, + config.region, + stackStates + ); + stackStates = response.stackStates; + isCompleted = response.isCompleted; + + // Wait for 5 seconds + if (!response.isCompleted) { + // Get CFN events after update. If events count did not change, we need to print out a + // message to let users know we are still checking. + const currEventCount = getEventCount(stackStates); + if (currEventCount === prevEventCount) { + logger.log("Checking deploy status..."); + } + + await new Promise((resolve) => setTimeout(resolve, 5000)); + } + } while (!isCompleted); + + // Print deploy result + stackStates.forEach(({ name, status, errorMessage, outputs, exports }) => { + logger.log(`\nStack ${name}`); + logger.log(` Status: ${formatStackStatus(status)}`); + if (errorMessage) { + logger.log(` Error: ${errorMessage}`); + } + + if (Object.keys(outputs || {}).length > 0) { + logger.log(" Outputs:"); + Object.keys(outputs).forEach((name) => + logger.log(` - ${name}: ${outputs[name]}`) + ); + } + + if (Object.keys(exports || {}).length > 0) { + logger.log(" Exports:"); + Object.keys(exports).forEach((name) => + logger.log(` - ${name}: ${exports[name]}`) + ); + } + }); + logger.log(""); + + return stackStates.map((stackState) => ({ + name: stackState.name, + status: stackState.status, + })); }; + +function getEventCount(stackStates) { + return stackStates.reduce( + (acc, stackState) => acc + (stackState.events || []).length, + 0 + ); +} + +function formatStackStatus(status) { + return { + succeeded: "deployed", + unchanged: "no changes", + failed: "failed", + skipped: "not deployed", + }[status]; +} + +async function parallelDeploy(cdkOptions, region, stackStates) { + const STACK_DEPLOY_STATUS_PENDING = "pending"; + const STACK_DEPLOY_STATUS_DEPLOYING = "deploying"; + const STACK_DEPLOY_STATUS_SUCCEEDED = "succeeded"; + const STACK_DEPLOY_STATUS_UNCHANGED = "unchanged"; + const STACK_DEPLOY_STATUS_FAILED = "failed"; + const STACK_DEPLOY_STATUS_SKIPPED = "skipped"; + + const deployStacks = async () => { + let hasSucceededStack = false; + + const statusesByStackName = {}; + stackStates.forEach(({ name, status }) => { + statusesByStackName[name] = status; + }); + + await Promise.all( + stackStates + .filter( + (stackState) => stackState.status === STACK_DEPLOY_STATUS_PENDING + ) + .filter((stackState) => + stackState.dependencies.every( + (dep) => + ![ + STACK_DEPLOY_STATUS_PENDING, + STACK_DEPLOY_STATUS_DEPLOYING, + ].includes(statusesByStackName[dep]) + ) + ) + .map(async (stackState) => { + try { + logger.debug(`Deploying stack ${stackState.name}`); + const { status, account, region, outputs, exports } = await deploy({ + ...cdkOptions, + stackName: stackState.name, + }); + stackState.startedAt = Date.now(); + stackState.account = account; + stackState.region = region; + stackState.outputs = outputs; + stackState.exports = exports; + logger.debug( + `Deploying stack ${stackState.name} status: ${status}` + ); + + if (status === "unchanged") { + stackState.status = STACK_DEPLOY_STATUS_UNCHANGED; + stackState.endedAt = stackState.startedAt; + hasSucceededStack = true; + logger.log( + chalk.green(`\n ✅ ${stackState.name} (no changes)\n`) + ); + } else if (status === "no_resources") { + stackState.status = STACK_DEPLOY_STATUS_FAILED; + stackState.endedAt = stackState.startedAt; + stackState.errorMessage = `The ${stackState.name} stack contains no resources.`; + skipPendingStacks(); + logger.log( + chalk.red( + `\n ❌ ${chalk.bold(stackState.name)} failed: ${ + stackState.errorMessage + }\n` + ) + ); + } else if (status === "deploying") { + stackState.status = STACK_DEPLOY_STATUS_DEPLOYING; + } else { + stackState.status = STACK_DEPLOY_STATUS_FAILED; + stackState.endedAt = stackState.startedAt; + stackState.errorMessage = `The ${stackState.name} stack failed to deploy.`; + skipPendingStacks(); + logger.log( + chalk.red( + `\n ❌ ${chalk.bold(stackState.name)} failed: ${ + stackState.errorMessage + }\n` + ) + ); + } + } catch (deployEx) { + logger.debug( + `Deploy stack ${stackState.name} exception ${deployEx}` + ); + if (isRetryableException(deployEx)) { + // retry + } else if (isBootstrapException(deployEx)) { + try { + logger.debug(`Bootstraping stack ${stackState.name}`); + await bootstrap(cdkOptions); + logger.debug(`Bootstraped stack ${stackState.name}`); + } catch (bootstrapEx) { + logger.debug( + `Bootstrap stack ${stackState.name} exception ${bootstrapEx}` + ); + if (isRetryableException(bootstrapEx)) { + // retry + } else { + stackState.status = STACK_DEPLOY_STATUS_FAILED; + stackState.startedAt = Date.now(); + stackState.endedAt = stackState.startedAt; + stackState.errorMessage = bootstrapEx.message; + skipPendingStacks(); + logger.log( + chalk.red( + `\n ❌ ${chalk.bold( + stackState.name + )} failed: ${bootstrapEx}\n` + ) + ); + } + } + } else { + stackState.status = STACK_DEPLOY_STATUS_FAILED; + stackState.startedAt = Date.now(); + stackState.endedAt = stackState.startedAt; + stackState.errorMessage = deployEx.message; + skipPendingStacks(); + logger.log( + chalk.red( + `\n ❌ ${chalk.bold(stackState.name)} failed: ${deployEx}\n` + ) + ); + } + } + }) + ); + + if (hasSucceededStack) { + logger.debug( + "At least 1 stack successfully deployed, call deployStacks() again" + ); + await deployStacks(); + } + }; + + const updateDeployStatuses = async () => { + await Promise.all( + stackStates + .filter( + (stackState) => stackState.status === STACK_DEPLOY_STATUS_DEPLOYING + ) + .map(async (stackState) => { + // Get stack events + try { + logger.debug(`Fetching stack events ${stackState.name}`); + await getStackEvents(stackState); + } catch (e) { + logger.debug(e); + if (isRetryableException(e)) { + // retry + return; + } + // ignore error + } + + // Get stack status + try { + logger.debug(`Checking stack status ${stackState.name}`); + const { isDeployed, outputs, exports } = await getDeployStatus( + stackState + ); + stackState.outputs = outputs; + stackState.exports = exports; + + if (isDeployed) { + stackState.status = STACK_DEPLOY_STATUS_SUCCEEDED; + stackState.endedAt = Date.now(); + logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); + } + } catch (statusEx) { + logger.debug(statusEx); + if (isRetryableException(statusEx)) { + // retry + } else { + stackState.status = STACK_DEPLOY_STATUS_FAILED; + stackState.endedAt = Date.now(); + stackState.errorMessage = + stackState.eventsLatestErrorMessage || statusEx.message; + skipPendingStacks(); + logger.log( + chalk.red( + `\n ❌ ${chalk.bold(stackState.name)} failed: ${ + stackState.errorMessage + }\n` + ) + ); + } + } + }) + ); + }; + + const skipPendingStacks = () => { + stackStates + .filter((stackState) => stackState.status === STACK_DEPLOY_STATUS_PENDING) + .forEach((stackState) => { + stackState.status = STACK_DEPLOY_STATUS_SKIPPED; + }); + }; + + const getDeployStatus = async (stackState) => { + const stackName = stackState.name; + const ret = await cfn.describeStacks({ StackName: stackName }).promise(); + + // Handle no stack found + if (ret.Stacks.length === 0) { + throw new Error( + `The stack named ${stackName} failed to deploy, it is removed while deploying.` + ); + } + + const { StackStatus, Outputs } = ret.Stacks[0]; + let isDeployed; + + // Case: in progress + if (StackStatus.endsWith("_IN_PROGRESS")) { + isDeployed = false; + } + // Case: stack creation failed + else if ( + StackStatus === "ROLLBACK_COMPLETE" || + StackStatus === "ROLLBACK_FAILED" + ) { + throw new Error( + `The stack named ${stackName} failed creation, it may need to be manually deleted from the AWS console: ${StackStatus}` + ); + } + // Case: stack deploy failed + else if ( + StackStatus !== "CREATE_COMPLETE" && + StackStatus !== "UPDATE_COMPLETE" + ) { + throw new Error( + `The stack named ${stackName} failed to deploy: ${StackStatus}` + ); + } + // Case: deploy suceeded + else { + isDeployed = true; + } + + const outputs = []; + const exports = []; + (Outputs || []).forEach(({ OutputKey, OutputValue, ExportName }) => { + OutputKey && (outputs[OutputKey] = OutputValue); + ExportName && (exports[ExportName] = OutputValue); + }); + + return { isDeployed, outputs, exports }; + }; + + const getStackEvents = async (stackState) => { + // Note: should probably switch to use CDK's built in StackActivity class at some point + + // Stack state props will be modified: + // - stackState.events + // - stackState.eventsLatestErrorMessage + // - stackState.eventsFirstEventAt + + // Get events + const ret = await cfn + .describeStackEvents({ StackName: stackState.name }) + .promise(); + const stackEvents = ret.StackEvents || []; + + // look through all the stack events and find the first relevant + // event which is a "Stack" event and has a CREATE, UPDATE or DELETE status + const firstRelevantEvent = stackEvents.find((event) => { + const isStack = "AWS::CloudFormation::Stack"; + const updateIsInProgress = "UPDATE_IN_PROGRESS"; + const createIsInProgress = "CREATE_IN_PROGRESS"; + const deleteIsInProgress = "DELETE_IN_PROGRESS"; + + return ( + event.ResourceType === isStack && + (event.ResourceStatus === updateIsInProgress || + event.ResourceStatus === createIsInProgress || + event.ResourceStatus === deleteIsInProgress) + ); + }); + + // set the date some time before the first found + // stack event of recently issued stack modification + if (firstRelevantEvent) { + const eventDate = new Date(firstRelevantEvent.Timestamp); + const updatedDate = eventDate.setSeconds(eventDate.getSeconds() - 5); + stackState.eventsFirstEventAt = new Date(updatedDate); + } + + // Loop through stack events + const events = stackState.events || []; + stackEvents.reverse().forEach((event) => { + const eventInRange = + stackState.eventsFirstEventAt && + stackState.eventsFirstEventAt <= event.Timestamp; + const eventNotLogged = events.every( + (loggedEvent) => loggedEvent.eventId !== event.EventId + ); + let eventStatus = event.ResourceStatus; + if (eventInRange && eventNotLogged) { + let isFirstError = false; + // Keep track of first failed event + if ( + eventStatus && + (eventStatus.endsWith("FAILED") || + eventStatus.endsWith("ROLLBACK_IN_PROGRESS")) && + !stackState.eventsLatestErrorMessage + ) { + stackState.eventsLatestErrorMessage = event.ResourceStatusReason; + isFirstError = true; + } + // Print new events + const statusColor = colorFromStatusResult(event.ResourceStatus); + logger.log( + `${stackState.name}` + + ` | ${statusColor(event.ResourceStatus || "")}` + + ` | ${event.ResourceType}` + + ` | ${statusColor(chalk.bold(event.LogicalResourceId || ""))}` + + ` ${ + isFirstError ? statusColor(event.ResourceStatusReason || "") : "" + }` + ); + // Prepare for next monitoring action + events.push({ + eventId: event.EventId, + timestamp: event.Timestamp, + resourceType: event.ResourceType, + resourceStatus: event.ResourceStatus, + resourceStatusReason: event.ResourceStatusReason, + logicalResourceId: event.LogicalResourceId, + }); + } + }); + stackState.events = events; + }; + + function isRetryableException(e) { + return ( + (e.code === "ThrottlingException" && e.message === "Rate exceeded") || + (e.code === "Throttling" && e.message === "Rate exceeded") || + (e.code === "TooManyRequestsException" && + e.message === "Too Many Requests") || + e.code === "OperationAbortedException" || + e.code === "TimeoutError" || + e.code === "NetworkingError" + ); + } + + function isBootstrapException(e) { + return ( + e.message && + e.message.startsWith( + "This stack uses assets, so the toolkit stack must be deployed to the environment" + ) + ); + } + + const colorFromStatusResult = (status) => { + if (!status) { + return chalk.reset; + } + + if (status.indexOf("FAILED") !== -1) { + return chalk.red; + } + if (status.indexOf("ROLLBACK") !== -1) { + return chalk.yellow; + } + if (status.indexOf("COMPLETE") !== -1) { + return chalk.green; + } + + return chalk.reset; + }; + + // Case: initial call + if (!stackStates) { + const { stacks } = await list(cdkOptions); + stackStates = stacks.map(({ name, dependencies }) => ({ + name, + status: STACK_DEPLOY_STATUS_PENDING, + dependencies: dependencies.map((d) => d.id), + account: undefined, + region: undefined, + startedAt: undefined, + endedAt: undefined, + events: [], + eventsLatestErrorMessage: undefined, + eventsFirstEventAt: undefined, + errorMessage: undefined, + outputs: undefined, + })); + } + + const cfn = new aws.CloudFormation({ region }); + logger.debug(`Initial stack states: ${JSON.stringify(stackStates)}`); + await updateDeployStatuses(); + logger.debug(`After update deploy statuses: ${JSON.stringify(stackStates)}`); + await deployStacks(); + logger.debug(`After deploy stacks: ${JSON.stringify(stackStates)}`); + + const isCompleted = stackStates.every( + (stackState) => + ![STACK_DEPLOY_STATUS_PENDING, STACK_DEPLOY_STATUS_DEPLOYING].includes( + stackState.status + ) + ); + + return { stackStates, isCompleted }; +} diff --git a/packages/cli/scripts/remove.js b/packages/cli/scripts/remove.js index 222cfa566f..d41dc9df81 100644 --- a/packages/cli/scripts/remove.js +++ b/packages/cli/scripts/remove.js @@ -1,11 +1,398 @@ "use strict"; +const aws = require("aws-sdk"); const chalk = require("chalk"); const logger = require("./util/logger"); -const { destroy } = require("./config/cdkHelpers"); +const { list, destroy } = require("./config/cdkHelpers"); module.exports = async function (argv, config, cliInfo) { logger.log(chalk.grey("Removing " + (argv.stack ? argv.stack : "stacks"))); - await destroy({ ...cliInfo.cdkOptions, stackName: argv.stack }); + + // Wait for remove to complete + let stackStates; + let isCompleted; + do { + // Update remove status + const cdkOptions = { ...cliInfo.cdkOptions, stackName: argv.stack }; + const response = await parallelDestroy( + cdkOptions, + config.region, + stackStates + ); + stackStates = response.stackStates; + isCompleted = response.isCompleted; + + // Wait for 5 seconds + if (!isCompleted) { + logger.log("Checking remove status..."); + await new Promise((resolve) => setTimeout(resolve, 5000)); + } + } while (!isCompleted); + + // Print remove result + stackStates.forEach(({ name, status, errorMessage }) => { + logger.log(`\nStack ${name}`); + logger.log(` Status: ${formatStackStatus(status)}`); + if (errorMessage) { + logger.log(` Error: ${errorMessage}`); + } + }); + logger.log(""); + + return stackStates.map((stackState) => ({ + name: stackState.name, + status: stackState.status, + })); }; + +function formatStackStatus(status) { + return { + succeeded: "removed", + failed: "failed", + skipped: "not removed", + }[status]; +} + +async function parallelDestroy(cdkOptions, region, stackStates) { + const STACK_DESTROY_STATUS_PENDING = "pending"; + const STACK_DESTROY_STATUS_REMOVING = "removing"; + const STACK_DESTROY_STATUS_SUCCEEDED = "succeeded"; + const STACK_DESTROY_STATUS_FAILED = "failed"; + const STACK_DESTROY_STATUS_SKIPPED = "skipped"; + + const destroyStacks = async () => { + let hasSucceededStack = false; + + const statusesByStackName = {}; + stackStates.forEach(({ name, status }) => { + statusesByStackName[name] = status; + }); + + await Promise.all( + stackStates + .filter( + (stackState) => stackState.status === STACK_DESTROY_STATUS_PENDING + ) + .filter((stackState) => + stackState.dependencies.every( + (dep) => statusesByStackName[dep] === STACK_DESTROY_STATUS_SUCCEEDED + ) + ) + .map(async (stackState) => { + try { + logger.debug(`Destroying stack ${stackState.name}`); + const { status } = await destroy({ + ...cdkOptions, + stackName: stackState.name, + }); + logger.debug( + `Destroying stack ${stackState.name} status: ${status}` + ); + + if (status === "destroyed") { + stackState.status = STACK_DESTROY_STATUS_SUCCEEDED; + hasSucceededStack = true; + logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); + } else if (status === "destroying") { + stackState.status = STACK_DESTROY_STATUS_REMOVING; + } else { + stackState.status = STACK_DESTROY_STATUS_FAILED; + stackState.errorMessage = `The ${stackState.name} stack failed to destroy.`; + skipPendingStacks(); + logger.log( + chalk.red( + `\n ❌ ${chalk.bold(stackState.name)} failed: ${ + stackState.errorMessage + }\n` + ) + ); + } + } catch (e) { + logger.debug(`Destroy stack ${stackState.name} exception ${e}`); + if (isRetryableException(e)) { + // retry + } else { + stackState.status = STACK_DESTROY_STATUS_FAILED; + stackState.errorMessage = e.message; + skipPendingStacks(); + logger.log( + chalk.red( + `\n ❌ ${chalk.bold(stackState.name)} failed: ${e}\n` + ) + ); + } + } + }) + ); + + if (hasSucceededStack) { + logger.debug( + "At least 1 stack successfully destroyed, call destroyStacks() again" + ); + await destroyStacks(); + } + }; + + const updateDestroyStatuses = async () => { + await Promise.all( + stackStates + .filter( + (stackState) => stackState.status === STACK_DESTROY_STATUS_REMOVING + ) + .map(async (stackState) => { + // Get stack events + try { + logger.debug(`Fetching stack events ${stackState.name}`); + await getStackEvents(stackState); + } catch (eventsEx) { + logger.debug(eventsEx); + if (isRetryableException(eventsEx)) { + // retry + return; + } else if (isStackNotExistException(eventsEx)) { + // ignore + stackState.status = STACK_DESTROY_STATUS_SUCCEEDED; + logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); + return; + } + // ignore error + } + + // Get stack status + try { + logger.debug(`Checking stack status ${stackState.name}`); + const { isDestroyed } = await getDestroyStatus(stackState); + + if (isDestroyed) { + stackState.status = STACK_DESTROY_STATUS_SUCCEEDED; + logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); + } + } catch (statusEx) { + logger.debug(statusEx); + if (isRetryableException(statusEx)) { + // retry + } else if (isStackNotExistException(statusEx)) { + stackState.status = STACK_DESTROY_STATUS_SUCCEEDED; + logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); + } else { + stackState.status = STACK_DESTROY_STATUS_FAILED; + stackState.errorMessage = + stackState.eventsLatestErrorMessage || statusEx.message; + skipPendingStacks(); + logger.log( + chalk.red( + `\n ❌ ${chalk.bold(stackState.name)} failed: ${ + stackState.errorMessage + }\n` + ) + ); + } + } + }) + ); + }; + + const skipPendingStacks = () => { + stackStates + .filter( + (stackState) => stackState.status === STACK_DESTROY_STATUS_PENDING + ) + .forEach((stackState) => { + stackState.status = STACK_DESTROY_STATUS_SKIPPED; + }); + }; + + const getDestroyStatus = async (stackState) => { + let isDestroyed; + const stackName = stackState.name; + const ret = await cfn.describeStacks({ StackName: stackName }).promise(); + + // Handle no stack found + if (ret.Stacks.length === 0) { + isDestroyed = true; + } else { + const { StackStatus } = ret.Stacks[0]; + + // Case: in progress + if (StackStatus.endsWith("_IN_PROGRESS")) { + isDestroyed = false; + } + // Case: destroy succeeded + else if (StackStatus === "DELETE_COMPLETE") { + isDestroyed = true; + } + // Case: destroy failed + else { + throw new Error( + `The stack named ${stackName} failed to destroy: ${StackStatus}` + ); + } + } + + return { isDestroyed }; + }; + + const getStackEvents = async (stackState) => { + // Note: should probably switch to use CDK's built in StackActivity class at some point + + // Stack state props will be modified: + // - stackState.events + // - stackState.eventsLatestErrorMessage + // - stackState.eventsFirstEventAt + + // Get events + const ret = await cfn + .describeStackEvents({ StackName: stackState.name }) + .promise(); + const stackEvents = ret.StackEvents || []; + + // look through all the stack events and find the first relevant + // event which is a "Stack" event and has a CREATE, UPDATE or DELETE status + const firstRelevantEvent = stackEvents.find((event) => { + const isStack = "AWS::CloudFormation::Stack"; + const updateIsInProgress = "UPDATE_IN_PROGRESS"; + const createIsInProgress = "CREATE_IN_PROGRESS"; + const deleteIsInProgress = "DELETE_IN_PROGRESS"; + + return ( + event.ResourceType === isStack && + (event.ResourceStatus === updateIsInProgress || + event.ResourceStatus === createIsInProgress || + event.ResourceStatus === deleteIsInProgress) + ); + }); + + // set the date some time before the first found + // stack event of recently issued stack modification + if (firstRelevantEvent) { + const eventDate = new Date(firstRelevantEvent.Timestamp); + const updatedDate = eventDate.setSeconds(eventDate.getSeconds() - 5); + stackState.eventsFirstEventAt = new Date(updatedDate); + } + + // Loop through stack events + const events = stackState.events || []; + stackEvents.reverse().forEach((event) => { + const eventInRange = + stackState.eventsFirstEventAt && + stackState.eventsFirstEventAt <= event.Timestamp; + const eventNotLogged = events.every( + (loggedEvent) => loggedEvent.eventId !== event.EventId + ); + let eventStatus = event.ResourceStatus; + if (eventInRange && eventNotLogged) { + let isFirstError = false; + // Keep track of first failed event + if ( + eventStatus && + (eventStatus.endsWith("FAILED") || + eventStatus.endsWith("ROLLBACK_IN_PROGRESS")) && + !stackState.eventsLatestErrorMessage + ) { + stackState.eventsLatestErrorMessage = event.ResourceStatusReason; + isFirstError = true; + } + // Print new events + const statusColor = colorFromStatusResult(event.ResourceStatus); + logger.log( + `${stackState.name}` + + ` | ${statusColor(event.ResourceStatus || "")}` + + ` | ${event.ResourceType}` + + ` | ${statusColor(chalk.bold(event.LogicalResourceId || ""))}` + + ` ${ + isFirstError ? statusColor(event.ResourceStatusReason || "") : "" + }` + ); + // Prepare for next monitoring action + events.push({ + eventId: event.EventId, + timestamp: event.Timestamp, + resourceType: event.ResourceType, + resourceStatus: event.ResourceStatus, + resourceStatusReason: event.ResourceStatusReason, + logicalResourceId: event.LogicalResourceId, + }); + } + }); + stackState.events = events; + }; + + function isRetryableException(e) { + return ( + (e.code === "ThrottlingException" && e.message === "Rate exceeded") || + (e.code === "Throttling" && e.message === "Rate exceeded") || + (e.code === "TooManyRequestsException" && + e.message === "Too Many Requests") || + e.code === "OperationAbortedException" || + e.code === "TimeoutError" || + e.code === "NetworkingError" + ); + } + + function isStackNotExistException(e) { + return ( + e.code === "ValidationError" && + e.message.startsWith("Stack [") && + e.message.endsWith("] does not exist") + ); + } + + const colorFromStatusResult = (status) => { + if (!status) { + return chalk.reset; + } + + if (status.indexOf("FAILED") !== -1) { + return chalk.red; + } + if (status.indexOf("ROLLBACK") !== -1) { + return chalk.yellow; + } + if (status.indexOf("COMPLETE") !== -1) { + return chalk.green; + } + + return chalk.reset; + }; + + // Case: initial call + if (!stackStates) { + const { stacks } = await list(cdkOptions); + + // Generate reverse dependency map + const reverseDependencyMapping = {}; + stacks.forEach(({ name, dependencies }) => + dependencies.forEach((dep) => { + reverseDependencyMapping[dep] = reverseDependencyMapping[dep] || []; + reverseDependencyMapping[dep].push(name); + }) + ); + + stackStates = stacks.map(({ name }) => ({ + name, + status: STACK_DESTROY_STATUS_PENDING, + dependencies: reverseDependencyMapping[name] || [], + events: [], + eventsLatestErrorMessage: undefined, + eventsFirstEventAt: undefined, + errorMessage: undefined, + })); + } + + const cfn = new aws.CloudFormation({ region }); + logger.debug(`Initial stack states: ${JSON.stringify(stackStates)}`); + await updateDestroyStatuses(); + logger.debug(`After update destroy statuses: ${JSON.stringify(stackStates)}`); + await destroyStacks(); + logger.debug(`After destroy stacks: ${JSON.stringify(stackStates)}`); + + const isCompleted = stackStates.every( + (stackState) => + ![STACK_DESTROY_STATUS_PENDING, STACK_DESTROY_STATUS_REMOVING].includes( + stackState.status + ) + ); + + return { stackStates, isCompleted }; +} diff --git a/packages/cli/test/base/lib/index.js b/packages/cli/test/base/lib/index.js index 7aca5c8b0a..e33afcff47 100644 --- a/packages/cli/test/base/lib/index.js +++ b/packages/cli/test/base/lib/index.js @@ -1,15 +1,16 @@ import S3Stack from "./s3"; -import CognitoStack from "./cognito"; +//import CognitoStack from "./cognito"; import DynamoDBStack from "./dynamodb"; -import MyParentStack from "./nested-stack"; +//import MyParentStack from "./nested-stack"; // Add stacks export default function main(app) { new DynamoDBStack(app, "dynamodb"); - const s3 = new S3Stack(app, "s3"); + // const s3 = new S3Stack(app, "s3"); + new S3Stack(app, "s3"); - new CognitoStack(app, "cognito", { bucketArn: s3.bucket.bucketArn }); + // new CognitoStack(app, "cognito", { bucketArn: s3.bucket.bucketArn }); - new MyParentStack(app, "nested"); + // new MyParentStack(app, "nested"); } diff --git a/yarn.lock b/yarn.lock index 51f1561acb..e4b885ffd6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2587,6 +2587,21 @@ aws-sdk@^2.739.0: uuid "3.3.2" xml2js "0.4.19" +aws-sdk@^2.761.0: + version "2.761.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.761.0.tgz#a677e3755fe84550de780e9be61190e8898cc032" + integrity sha512-mSzdiqlnruFlJYrQVWPMyPQ8ynJe9P5QVD+edv8HFlYDQNOwpPCjlqI9kE1VE3cVcxkh0j2Q2kfLQa/pAY2w7Q== + dependencies: + buffer "4.9.2" + events "1.1.1" + ieee754 "1.1.13" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "3.3.2" + xml2js "0.4.19" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -8150,10 +8165,10 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -sst-cdk@1.61.0-rc.12: - version "1.61.0-rc.12" - resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.61.0-rc.12.tgz#e7748148333f04c76e2b449b3e5e4e58bfaa2154" - integrity sha512-07AFUadh3uN/Hz8Q5cge/gcktqg2PQGlcV2/2tvDkliXCYbbpWgGUSdn2u6auXO1r9EOlrSzXAFwbEl458OC8Q== +sst-cdk@1.61.0-rc.20: + version "1.61.0-rc.20" + resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.61.0-rc.20.tgz#140484fce2190df51682af79abc755fee7035764" + integrity sha512-18Pz0WSfja5HU206tmOUI7zrWMwVh2scZaXAe7dz0NNCE94q0R4x2F6QEWNgOgzujrRThDiQWe6bZBD8bIO4zg== dependencies: "@aws-cdk/cloud-assembly-schema" "1.61.0" "@aws-cdk/cloudformation-diff" "1.61.0" From 1f58f293a49b8e309314bb45d944d0d6a4bbe804 Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 26 Sep 2020 23:05:40 -0400 Subject: [PATCH 100/481] Setting up the core package --- packages/cli/package.json | 1 + packages/core/index.js | 0 packages/core/package.json | 22 ++++++++++++++++++++++ 3 files changed, 23 insertions(+) create mode 100644 packages/core/index.js create mode 100644 packages/core/package.json diff --git a/packages/cli/package.json b/packages/cli/package.json index fbe4a26433..8ae329de98 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -41,6 +41,7 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", + "@serverless-stack/core": "^0.1.10", "@serverless-stack/resources": "^0.1.10", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", diff --git a/packages/core/index.js b/packages/core/index.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/core/package.json b/packages/core/package.json new file mode 100644 index 0000000000..e5830054f3 --- /dev/null +++ b/packages/core/package.json @@ -0,0 +1,22 @@ +{ + "name": "@serverless-stack/core", + "version": "0.1.10", + "homepage": "https://serverless-stack.com", + "description": "Core of the Serverless Stack Toolkit.", + "main": "index.js", + "author": { + "name": "Anomaly Innovations", + "url": "https://anoma.ly" + }, + "repository": { + "type": "git", + "url": "https://github.com/serverless-stack/serverless-stack.git", + "directory": "packages/core" + }, + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "dependencies": {}, + "devDependencies": {} +} From 3ac7360f2d5385a9d7a20c765098bba1c434dcad Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 28 Sep 2020 00:20:45 -0400 Subject: [PATCH 101/481] Implement --- packages/cli/package.json | 1 - packages/cli/scripts/deploy.js | 415 +----------------- packages/cli/scripts/remove.js | 346 +-------------- packages/core/index.js | 772 +++++++++++++++++++++++++++++++++ packages/core/package.json | 6 +- packages/core/util/logger.js | 24 + 6 files changed, 803 insertions(+), 761 deletions(-) create mode 100644 packages/core/util/logger.js diff --git a/packages/cli/package.json b/packages/cli/package.json index 8ae329de98..cb47276b65 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -47,7 +47,6 @@ "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", "@typescript-eslint/parser": "^3.9.1", - "aws-sdk": "^2.761.0", "chalk": "^4.1.0", "core-js": "^3.6.5", "cross-spawn": "^7.0.3", diff --git a/packages/cli/scripts/deploy.js b/packages/cli/scripts/deploy.js index 1dec9d46e8..c27afa7668 100644 --- a/packages/cli/scripts/deploy.js +++ b/packages/cli/scripts/deploy.js @@ -1,10 +1,9 @@ "use strict"; -const aws = require("aws-sdk"); const chalk = require("chalk"); +const { parallelDeploy } = require("@serverless-stack/core"); const logger = require("./util/logger"); -const { list, bootstrap, deploy } = require("./config/cdkHelpers"); module.exports = async function (argv, config, cliInfo) { logger.log(chalk.grey("Deploying " + (argv.stack ? argv.stack : "stacks"))); @@ -84,415 +83,3 @@ function formatStackStatus(status) { skipped: "not deployed", }[status]; } - -async function parallelDeploy(cdkOptions, region, stackStates) { - const STACK_DEPLOY_STATUS_PENDING = "pending"; - const STACK_DEPLOY_STATUS_DEPLOYING = "deploying"; - const STACK_DEPLOY_STATUS_SUCCEEDED = "succeeded"; - const STACK_DEPLOY_STATUS_UNCHANGED = "unchanged"; - const STACK_DEPLOY_STATUS_FAILED = "failed"; - const STACK_DEPLOY_STATUS_SKIPPED = "skipped"; - - const deployStacks = async () => { - let hasSucceededStack = false; - - const statusesByStackName = {}; - stackStates.forEach(({ name, status }) => { - statusesByStackName[name] = status; - }); - - await Promise.all( - stackStates - .filter( - (stackState) => stackState.status === STACK_DEPLOY_STATUS_PENDING - ) - .filter((stackState) => - stackState.dependencies.every( - (dep) => - ![ - STACK_DEPLOY_STATUS_PENDING, - STACK_DEPLOY_STATUS_DEPLOYING, - ].includes(statusesByStackName[dep]) - ) - ) - .map(async (stackState) => { - try { - logger.debug(`Deploying stack ${stackState.name}`); - const { status, account, region, outputs, exports } = await deploy({ - ...cdkOptions, - stackName: stackState.name, - }); - stackState.startedAt = Date.now(); - stackState.account = account; - stackState.region = region; - stackState.outputs = outputs; - stackState.exports = exports; - logger.debug( - `Deploying stack ${stackState.name} status: ${status}` - ); - - if (status === "unchanged") { - stackState.status = STACK_DEPLOY_STATUS_UNCHANGED; - stackState.endedAt = stackState.startedAt; - hasSucceededStack = true; - logger.log( - chalk.green(`\n ✅ ${stackState.name} (no changes)\n`) - ); - } else if (status === "no_resources") { - stackState.status = STACK_DEPLOY_STATUS_FAILED; - stackState.endedAt = stackState.startedAt; - stackState.errorMessage = `The ${stackState.name} stack contains no resources.`; - skipPendingStacks(); - logger.log( - chalk.red( - `\n ❌ ${chalk.bold(stackState.name)} failed: ${ - stackState.errorMessage - }\n` - ) - ); - } else if (status === "deploying") { - stackState.status = STACK_DEPLOY_STATUS_DEPLOYING; - } else { - stackState.status = STACK_DEPLOY_STATUS_FAILED; - stackState.endedAt = stackState.startedAt; - stackState.errorMessage = `The ${stackState.name} stack failed to deploy.`; - skipPendingStacks(); - logger.log( - chalk.red( - `\n ❌ ${chalk.bold(stackState.name)} failed: ${ - stackState.errorMessage - }\n` - ) - ); - } - } catch (deployEx) { - logger.debug( - `Deploy stack ${stackState.name} exception ${deployEx}` - ); - if (isRetryableException(deployEx)) { - // retry - } else if (isBootstrapException(deployEx)) { - try { - logger.debug(`Bootstraping stack ${stackState.name}`); - await bootstrap(cdkOptions); - logger.debug(`Bootstraped stack ${stackState.name}`); - } catch (bootstrapEx) { - logger.debug( - `Bootstrap stack ${stackState.name} exception ${bootstrapEx}` - ); - if (isRetryableException(bootstrapEx)) { - // retry - } else { - stackState.status = STACK_DEPLOY_STATUS_FAILED; - stackState.startedAt = Date.now(); - stackState.endedAt = stackState.startedAt; - stackState.errorMessage = bootstrapEx.message; - skipPendingStacks(); - logger.log( - chalk.red( - `\n ❌ ${chalk.bold( - stackState.name - )} failed: ${bootstrapEx}\n` - ) - ); - } - } - } else { - stackState.status = STACK_DEPLOY_STATUS_FAILED; - stackState.startedAt = Date.now(); - stackState.endedAt = stackState.startedAt; - stackState.errorMessage = deployEx.message; - skipPendingStacks(); - logger.log( - chalk.red( - `\n ❌ ${chalk.bold(stackState.name)} failed: ${deployEx}\n` - ) - ); - } - } - }) - ); - - if (hasSucceededStack) { - logger.debug( - "At least 1 stack successfully deployed, call deployStacks() again" - ); - await deployStacks(); - } - }; - - const updateDeployStatuses = async () => { - await Promise.all( - stackStates - .filter( - (stackState) => stackState.status === STACK_DEPLOY_STATUS_DEPLOYING - ) - .map(async (stackState) => { - // Get stack events - try { - logger.debug(`Fetching stack events ${stackState.name}`); - await getStackEvents(stackState); - } catch (e) { - logger.debug(e); - if (isRetryableException(e)) { - // retry - return; - } - // ignore error - } - - // Get stack status - try { - logger.debug(`Checking stack status ${stackState.name}`); - const { isDeployed, outputs, exports } = await getDeployStatus( - stackState - ); - stackState.outputs = outputs; - stackState.exports = exports; - - if (isDeployed) { - stackState.status = STACK_DEPLOY_STATUS_SUCCEEDED; - stackState.endedAt = Date.now(); - logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); - } - } catch (statusEx) { - logger.debug(statusEx); - if (isRetryableException(statusEx)) { - // retry - } else { - stackState.status = STACK_DEPLOY_STATUS_FAILED; - stackState.endedAt = Date.now(); - stackState.errorMessage = - stackState.eventsLatestErrorMessage || statusEx.message; - skipPendingStacks(); - logger.log( - chalk.red( - `\n ❌ ${chalk.bold(stackState.name)} failed: ${ - stackState.errorMessage - }\n` - ) - ); - } - } - }) - ); - }; - - const skipPendingStacks = () => { - stackStates - .filter((stackState) => stackState.status === STACK_DEPLOY_STATUS_PENDING) - .forEach((stackState) => { - stackState.status = STACK_DEPLOY_STATUS_SKIPPED; - }); - }; - - const getDeployStatus = async (stackState) => { - const stackName = stackState.name; - const ret = await cfn.describeStacks({ StackName: stackName }).promise(); - - // Handle no stack found - if (ret.Stacks.length === 0) { - throw new Error( - `The stack named ${stackName} failed to deploy, it is removed while deploying.` - ); - } - - const { StackStatus, Outputs } = ret.Stacks[0]; - let isDeployed; - - // Case: in progress - if (StackStatus.endsWith("_IN_PROGRESS")) { - isDeployed = false; - } - // Case: stack creation failed - else if ( - StackStatus === "ROLLBACK_COMPLETE" || - StackStatus === "ROLLBACK_FAILED" - ) { - throw new Error( - `The stack named ${stackName} failed creation, it may need to be manually deleted from the AWS console: ${StackStatus}` - ); - } - // Case: stack deploy failed - else if ( - StackStatus !== "CREATE_COMPLETE" && - StackStatus !== "UPDATE_COMPLETE" - ) { - throw new Error( - `The stack named ${stackName} failed to deploy: ${StackStatus}` - ); - } - // Case: deploy suceeded - else { - isDeployed = true; - } - - const outputs = []; - const exports = []; - (Outputs || []).forEach(({ OutputKey, OutputValue, ExportName }) => { - OutputKey && (outputs[OutputKey] = OutputValue); - ExportName && (exports[ExportName] = OutputValue); - }); - - return { isDeployed, outputs, exports }; - }; - - const getStackEvents = async (stackState) => { - // Note: should probably switch to use CDK's built in StackActivity class at some point - - // Stack state props will be modified: - // - stackState.events - // - stackState.eventsLatestErrorMessage - // - stackState.eventsFirstEventAt - - // Get events - const ret = await cfn - .describeStackEvents({ StackName: stackState.name }) - .promise(); - const stackEvents = ret.StackEvents || []; - - // look through all the stack events and find the first relevant - // event which is a "Stack" event and has a CREATE, UPDATE or DELETE status - const firstRelevantEvent = stackEvents.find((event) => { - const isStack = "AWS::CloudFormation::Stack"; - const updateIsInProgress = "UPDATE_IN_PROGRESS"; - const createIsInProgress = "CREATE_IN_PROGRESS"; - const deleteIsInProgress = "DELETE_IN_PROGRESS"; - - return ( - event.ResourceType === isStack && - (event.ResourceStatus === updateIsInProgress || - event.ResourceStatus === createIsInProgress || - event.ResourceStatus === deleteIsInProgress) - ); - }); - - // set the date some time before the first found - // stack event of recently issued stack modification - if (firstRelevantEvent) { - const eventDate = new Date(firstRelevantEvent.Timestamp); - const updatedDate = eventDate.setSeconds(eventDate.getSeconds() - 5); - stackState.eventsFirstEventAt = new Date(updatedDate); - } - - // Loop through stack events - const events = stackState.events || []; - stackEvents.reverse().forEach((event) => { - const eventInRange = - stackState.eventsFirstEventAt && - stackState.eventsFirstEventAt <= event.Timestamp; - const eventNotLogged = events.every( - (loggedEvent) => loggedEvent.eventId !== event.EventId - ); - let eventStatus = event.ResourceStatus; - if (eventInRange && eventNotLogged) { - let isFirstError = false; - // Keep track of first failed event - if ( - eventStatus && - (eventStatus.endsWith("FAILED") || - eventStatus.endsWith("ROLLBACK_IN_PROGRESS")) && - !stackState.eventsLatestErrorMessage - ) { - stackState.eventsLatestErrorMessage = event.ResourceStatusReason; - isFirstError = true; - } - // Print new events - const statusColor = colorFromStatusResult(event.ResourceStatus); - logger.log( - `${stackState.name}` + - ` | ${statusColor(event.ResourceStatus || "")}` + - ` | ${event.ResourceType}` + - ` | ${statusColor(chalk.bold(event.LogicalResourceId || ""))}` + - ` ${ - isFirstError ? statusColor(event.ResourceStatusReason || "") : "" - }` - ); - // Prepare for next monitoring action - events.push({ - eventId: event.EventId, - timestamp: event.Timestamp, - resourceType: event.ResourceType, - resourceStatus: event.ResourceStatus, - resourceStatusReason: event.ResourceStatusReason, - logicalResourceId: event.LogicalResourceId, - }); - } - }); - stackState.events = events; - }; - - function isRetryableException(e) { - return ( - (e.code === "ThrottlingException" && e.message === "Rate exceeded") || - (e.code === "Throttling" && e.message === "Rate exceeded") || - (e.code === "TooManyRequestsException" && - e.message === "Too Many Requests") || - e.code === "OperationAbortedException" || - e.code === "TimeoutError" || - e.code === "NetworkingError" - ); - } - - function isBootstrapException(e) { - return ( - e.message && - e.message.startsWith( - "This stack uses assets, so the toolkit stack must be deployed to the environment" - ) - ); - } - - const colorFromStatusResult = (status) => { - if (!status) { - return chalk.reset; - } - - if (status.indexOf("FAILED") !== -1) { - return chalk.red; - } - if (status.indexOf("ROLLBACK") !== -1) { - return chalk.yellow; - } - if (status.indexOf("COMPLETE") !== -1) { - return chalk.green; - } - - return chalk.reset; - }; - - // Case: initial call - if (!stackStates) { - const { stacks } = await list(cdkOptions); - stackStates = stacks.map(({ name, dependencies }) => ({ - name, - status: STACK_DEPLOY_STATUS_PENDING, - dependencies: dependencies.map((d) => d.id), - account: undefined, - region: undefined, - startedAt: undefined, - endedAt: undefined, - events: [], - eventsLatestErrorMessage: undefined, - eventsFirstEventAt: undefined, - errorMessage: undefined, - outputs: undefined, - })); - } - - const cfn = new aws.CloudFormation({ region }); - logger.debug(`Initial stack states: ${JSON.stringify(stackStates)}`); - await updateDeployStatuses(); - logger.debug(`After update deploy statuses: ${JSON.stringify(stackStates)}`); - await deployStacks(); - logger.debug(`After deploy stacks: ${JSON.stringify(stackStates)}`); - - const isCompleted = stackStates.every( - (stackState) => - ![STACK_DEPLOY_STATUS_PENDING, STACK_DEPLOY_STATUS_DEPLOYING].includes( - stackState.status - ) - ); - - return { stackStates, isCompleted }; -} diff --git a/packages/cli/scripts/remove.js b/packages/cli/scripts/remove.js index d41dc9df81..d0cff7a3bf 100644 --- a/packages/cli/scripts/remove.js +++ b/packages/cli/scripts/remove.js @@ -1,10 +1,9 @@ "use strict"; -const aws = require("aws-sdk"); const chalk = require("chalk"); +const { parallelDestroy } = require("@serverless-stack/core"); const logger = require("./util/logger"); -const { list, destroy } = require("./config/cdkHelpers"); module.exports = async function (argv, config, cliInfo) { logger.log(chalk.grey("Removing " + (argv.stack ? argv.stack : "stacks"))); @@ -53,346 +52,3 @@ function formatStackStatus(status) { skipped: "not removed", }[status]; } - -async function parallelDestroy(cdkOptions, region, stackStates) { - const STACK_DESTROY_STATUS_PENDING = "pending"; - const STACK_DESTROY_STATUS_REMOVING = "removing"; - const STACK_DESTROY_STATUS_SUCCEEDED = "succeeded"; - const STACK_DESTROY_STATUS_FAILED = "failed"; - const STACK_DESTROY_STATUS_SKIPPED = "skipped"; - - const destroyStacks = async () => { - let hasSucceededStack = false; - - const statusesByStackName = {}; - stackStates.forEach(({ name, status }) => { - statusesByStackName[name] = status; - }); - - await Promise.all( - stackStates - .filter( - (stackState) => stackState.status === STACK_DESTROY_STATUS_PENDING - ) - .filter((stackState) => - stackState.dependencies.every( - (dep) => statusesByStackName[dep] === STACK_DESTROY_STATUS_SUCCEEDED - ) - ) - .map(async (stackState) => { - try { - logger.debug(`Destroying stack ${stackState.name}`); - const { status } = await destroy({ - ...cdkOptions, - stackName: stackState.name, - }); - logger.debug( - `Destroying stack ${stackState.name} status: ${status}` - ); - - if (status === "destroyed") { - stackState.status = STACK_DESTROY_STATUS_SUCCEEDED; - hasSucceededStack = true; - logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); - } else if (status === "destroying") { - stackState.status = STACK_DESTROY_STATUS_REMOVING; - } else { - stackState.status = STACK_DESTROY_STATUS_FAILED; - stackState.errorMessage = `The ${stackState.name} stack failed to destroy.`; - skipPendingStacks(); - logger.log( - chalk.red( - `\n ❌ ${chalk.bold(stackState.name)} failed: ${ - stackState.errorMessage - }\n` - ) - ); - } - } catch (e) { - logger.debug(`Destroy stack ${stackState.name} exception ${e}`); - if (isRetryableException(e)) { - // retry - } else { - stackState.status = STACK_DESTROY_STATUS_FAILED; - stackState.errorMessage = e.message; - skipPendingStacks(); - logger.log( - chalk.red( - `\n ❌ ${chalk.bold(stackState.name)} failed: ${e}\n` - ) - ); - } - } - }) - ); - - if (hasSucceededStack) { - logger.debug( - "At least 1 stack successfully destroyed, call destroyStacks() again" - ); - await destroyStacks(); - } - }; - - const updateDestroyStatuses = async () => { - await Promise.all( - stackStates - .filter( - (stackState) => stackState.status === STACK_DESTROY_STATUS_REMOVING - ) - .map(async (stackState) => { - // Get stack events - try { - logger.debug(`Fetching stack events ${stackState.name}`); - await getStackEvents(stackState); - } catch (eventsEx) { - logger.debug(eventsEx); - if (isRetryableException(eventsEx)) { - // retry - return; - } else if (isStackNotExistException(eventsEx)) { - // ignore - stackState.status = STACK_DESTROY_STATUS_SUCCEEDED; - logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); - return; - } - // ignore error - } - - // Get stack status - try { - logger.debug(`Checking stack status ${stackState.name}`); - const { isDestroyed } = await getDestroyStatus(stackState); - - if (isDestroyed) { - stackState.status = STACK_DESTROY_STATUS_SUCCEEDED; - logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); - } - } catch (statusEx) { - logger.debug(statusEx); - if (isRetryableException(statusEx)) { - // retry - } else if (isStackNotExistException(statusEx)) { - stackState.status = STACK_DESTROY_STATUS_SUCCEEDED; - logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); - } else { - stackState.status = STACK_DESTROY_STATUS_FAILED; - stackState.errorMessage = - stackState.eventsLatestErrorMessage || statusEx.message; - skipPendingStacks(); - logger.log( - chalk.red( - `\n ❌ ${chalk.bold(stackState.name)} failed: ${ - stackState.errorMessage - }\n` - ) - ); - } - } - }) - ); - }; - - const skipPendingStacks = () => { - stackStates - .filter( - (stackState) => stackState.status === STACK_DESTROY_STATUS_PENDING - ) - .forEach((stackState) => { - stackState.status = STACK_DESTROY_STATUS_SKIPPED; - }); - }; - - const getDestroyStatus = async (stackState) => { - let isDestroyed; - const stackName = stackState.name; - const ret = await cfn.describeStacks({ StackName: stackName }).promise(); - - // Handle no stack found - if (ret.Stacks.length === 0) { - isDestroyed = true; - } else { - const { StackStatus } = ret.Stacks[0]; - - // Case: in progress - if (StackStatus.endsWith("_IN_PROGRESS")) { - isDestroyed = false; - } - // Case: destroy succeeded - else if (StackStatus === "DELETE_COMPLETE") { - isDestroyed = true; - } - // Case: destroy failed - else { - throw new Error( - `The stack named ${stackName} failed to destroy: ${StackStatus}` - ); - } - } - - return { isDestroyed }; - }; - - const getStackEvents = async (stackState) => { - // Note: should probably switch to use CDK's built in StackActivity class at some point - - // Stack state props will be modified: - // - stackState.events - // - stackState.eventsLatestErrorMessage - // - stackState.eventsFirstEventAt - - // Get events - const ret = await cfn - .describeStackEvents({ StackName: stackState.name }) - .promise(); - const stackEvents = ret.StackEvents || []; - - // look through all the stack events and find the first relevant - // event which is a "Stack" event and has a CREATE, UPDATE or DELETE status - const firstRelevantEvent = stackEvents.find((event) => { - const isStack = "AWS::CloudFormation::Stack"; - const updateIsInProgress = "UPDATE_IN_PROGRESS"; - const createIsInProgress = "CREATE_IN_PROGRESS"; - const deleteIsInProgress = "DELETE_IN_PROGRESS"; - - return ( - event.ResourceType === isStack && - (event.ResourceStatus === updateIsInProgress || - event.ResourceStatus === createIsInProgress || - event.ResourceStatus === deleteIsInProgress) - ); - }); - - // set the date some time before the first found - // stack event of recently issued stack modification - if (firstRelevantEvent) { - const eventDate = new Date(firstRelevantEvent.Timestamp); - const updatedDate = eventDate.setSeconds(eventDate.getSeconds() - 5); - stackState.eventsFirstEventAt = new Date(updatedDate); - } - - // Loop through stack events - const events = stackState.events || []; - stackEvents.reverse().forEach((event) => { - const eventInRange = - stackState.eventsFirstEventAt && - stackState.eventsFirstEventAt <= event.Timestamp; - const eventNotLogged = events.every( - (loggedEvent) => loggedEvent.eventId !== event.EventId - ); - let eventStatus = event.ResourceStatus; - if (eventInRange && eventNotLogged) { - let isFirstError = false; - // Keep track of first failed event - if ( - eventStatus && - (eventStatus.endsWith("FAILED") || - eventStatus.endsWith("ROLLBACK_IN_PROGRESS")) && - !stackState.eventsLatestErrorMessage - ) { - stackState.eventsLatestErrorMessage = event.ResourceStatusReason; - isFirstError = true; - } - // Print new events - const statusColor = colorFromStatusResult(event.ResourceStatus); - logger.log( - `${stackState.name}` + - ` | ${statusColor(event.ResourceStatus || "")}` + - ` | ${event.ResourceType}` + - ` | ${statusColor(chalk.bold(event.LogicalResourceId || ""))}` + - ` ${ - isFirstError ? statusColor(event.ResourceStatusReason || "") : "" - }` - ); - // Prepare for next monitoring action - events.push({ - eventId: event.EventId, - timestamp: event.Timestamp, - resourceType: event.ResourceType, - resourceStatus: event.ResourceStatus, - resourceStatusReason: event.ResourceStatusReason, - logicalResourceId: event.LogicalResourceId, - }); - } - }); - stackState.events = events; - }; - - function isRetryableException(e) { - return ( - (e.code === "ThrottlingException" && e.message === "Rate exceeded") || - (e.code === "Throttling" && e.message === "Rate exceeded") || - (e.code === "TooManyRequestsException" && - e.message === "Too Many Requests") || - e.code === "OperationAbortedException" || - e.code === "TimeoutError" || - e.code === "NetworkingError" - ); - } - - function isStackNotExistException(e) { - return ( - e.code === "ValidationError" && - e.message.startsWith("Stack [") && - e.message.endsWith("] does not exist") - ); - } - - const colorFromStatusResult = (status) => { - if (!status) { - return chalk.reset; - } - - if (status.indexOf("FAILED") !== -1) { - return chalk.red; - } - if (status.indexOf("ROLLBACK") !== -1) { - return chalk.yellow; - } - if (status.indexOf("COMPLETE") !== -1) { - return chalk.green; - } - - return chalk.reset; - }; - - // Case: initial call - if (!stackStates) { - const { stacks } = await list(cdkOptions); - - // Generate reverse dependency map - const reverseDependencyMapping = {}; - stacks.forEach(({ name, dependencies }) => - dependencies.forEach((dep) => { - reverseDependencyMapping[dep] = reverseDependencyMapping[dep] || []; - reverseDependencyMapping[dep].push(name); - }) - ); - - stackStates = stacks.map(({ name }) => ({ - name, - status: STACK_DESTROY_STATUS_PENDING, - dependencies: reverseDependencyMapping[name] || [], - events: [], - eventsLatestErrorMessage: undefined, - eventsFirstEventAt: undefined, - errorMessage: undefined, - })); - } - - const cfn = new aws.CloudFormation({ region }); - logger.debug(`Initial stack states: ${JSON.stringify(stackStates)}`); - await updateDestroyStatuses(); - logger.debug(`After update destroy statuses: ${JSON.stringify(stackStates)}`); - await destroyStacks(); - logger.debug(`After destroy stacks: ${JSON.stringify(stackStates)}`); - - const isCompleted = stackStates.every( - (stackState) => - ![STACK_DESTROY_STATUS_PENDING, STACK_DESTROY_STATUS_REMOVING].includes( - stackState.status - ) - ); - - return { stackStates, isCompleted }; -} diff --git a/packages/core/index.js b/packages/core/index.js index e69de29bb2..9d148b5ea4 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -0,0 +1,772 @@ +"use strict"; + +const cdk = require("sst-cdk"); +const aws = require("aws-sdk"); +const chalk = require("chalk"); +const logger = require("./util/logger"); + +async function parallelDeploy(cdkOptions, region, stackStates) { + const STACK_DEPLOY_STATUS_PENDING = "pending"; + const STACK_DEPLOY_STATUS_DEPLOYING = "deploying"; + const STACK_DEPLOY_STATUS_SUCCEEDED = "succeeded"; + const STACK_DEPLOY_STATUS_UNCHANGED = "unchanged"; + const STACK_DEPLOY_STATUS_FAILED = "failed"; + const STACK_DEPLOY_STATUS_SKIPPED = "skipped"; + + const deployStacks = async () => { + let hasSucceededStack = false; + + const statusesByStackName = {}; + stackStates.forEach(({ name, status }) => { + statusesByStackName[name] = status; + }); + + await Promise.all( + stackStates + .filter( + (stackState) => stackState.status === STACK_DEPLOY_STATUS_PENDING + ) + .filter((stackState) => + stackState.dependencies.every( + (dep) => + ![ + STACK_DEPLOY_STATUS_PENDING, + STACK_DEPLOY_STATUS_DEPLOYING, + ].includes(statusesByStackName[dep]) + ) + ) + .map(async (stackState) => { + try { + logger.debug(`Deploying stack ${stackState.name}`); + const { + status, + account, + region, + outputs, + exports, + } = await cdk.sstDeploy({ + ...cdkOptions, + stackName: stackState.name, + }); + stackState.startedAt = Date.now(); + stackState.account = account; + stackState.region = region; + stackState.outputs = outputs; + stackState.exports = exports; + logger.debug( + `Deploying stack ${stackState.name} status: ${status}` + ); + + if (status === "unchanged") { + stackState.status = STACK_DEPLOY_STATUS_UNCHANGED; + stackState.endedAt = stackState.startedAt; + hasSucceededStack = true; + logger.log( + chalk.green(`\n ✅ ${stackState.name} (no changes)\n`) + ); + } else if (status === "no_resources") { + stackState.status = STACK_DEPLOY_STATUS_FAILED; + stackState.endedAt = stackState.startedAt; + stackState.errorMessage = `The ${stackState.name} stack contains no resources.`; + skipPendingStacks(); + logger.log( + chalk.red( + `\n ❌ ${chalk.bold(stackState.name)} failed: ${ + stackState.errorMessage + }\n` + ) + ); + } else if (status === "deploying") { + stackState.status = STACK_DEPLOY_STATUS_DEPLOYING; + } else { + stackState.status = STACK_DEPLOY_STATUS_FAILED; + stackState.endedAt = stackState.startedAt; + stackState.errorMessage = `The ${stackState.name} stack failed to deploy.`; + skipPendingStacks(); + logger.log( + chalk.red( + `\n ❌ ${chalk.bold(stackState.name)} failed: ${ + stackState.errorMessage + }\n` + ) + ); + } + } catch (deployEx) { + logger.debug( + `Deploy stack ${stackState.name} exception ${deployEx}` + ); + if (isRetryableException(deployEx)) { + // retry + } else if (isBootstrapException(deployEx)) { + try { + logger.debug(`Bootstraping stack ${stackState.name}`); + await cdk.sstBootstrap(cdkOptions); + logger.debug(`Bootstraped stack ${stackState.name}`); + } catch (bootstrapEx) { + logger.debug( + `Bootstrap stack ${stackState.name} exception ${bootstrapEx}` + ); + if (isRetryableException(bootstrapEx)) { + // retry + } else { + stackState.status = STACK_DEPLOY_STATUS_FAILED; + stackState.startedAt = Date.now(); + stackState.endedAt = stackState.startedAt; + stackState.errorMessage = bootstrapEx.message; + skipPendingStacks(); + logger.log( + chalk.red( + `\n ❌ ${chalk.bold( + stackState.name + )} failed: ${bootstrapEx}\n` + ) + ); + } + } + } else { + stackState.status = STACK_DEPLOY_STATUS_FAILED; + stackState.startedAt = Date.now(); + stackState.endedAt = stackState.startedAt; + stackState.errorMessage = deployEx.message; + skipPendingStacks(); + logger.log( + chalk.red( + `\n ❌ ${chalk.bold(stackState.name)} failed: ${deployEx}\n` + ) + ); + } + } + }) + ); + + if (hasSucceededStack) { + logger.debug( + "At least 1 stack successfully deployed, call deployStacks() again" + ); + await deployStacks(); + } + }; + + const updateDeployStatuses = async () => { + await Promise.all( + stackStates + .filter( + (stackState) => stackState.status === STACK_DEPLOY_STATUS_DEPLOYING + ) + .map(async (stackState) => { + // Get stack events + try { + logger.debug(`Fetching stack events ${stackState.name}`); + await getStackEvents(stackState); + } catch (e) { + logger.debug(e); + if (isRetryableException(e)) { + // retry + return; + } + // ignore error + } + + // Get stack status + try { + logger.debug(`Checking stack status ${stackState.name}`); + const { isDeployed, outputs, exports } = await getDeployStatus( + stackState + ); + stackState.outputs = outputs; + stackState.exports = exports; + + if (isDeployed) { + stackState.status = STACK_DEPLOY_STATUS_SUCCEEDED; + stackState.endedAt = Date.now(); + logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); + } + } catch (statusEx) { + logger.debug(statusEx); + if (isRetryableException(statusEx)) { + // retry + } else { + stackState.status = STACK_DEPLOY_STATUS_FAILED; + stackState.endedAt = Date.now(); + stackState.errorMessage = + stackState.eventsLatestErrorMessage || statusEx.message; + skipPendingStacks(); + logger.log( + chalk.red( + `\n ❌ ${chalk.bold(stackState.name)} failed: ${ + stackState.errorMessage + }\n` + ) + ); + } + } + }) + ); + }; + + const skipPendingStacks = () => { + stackStates + .filter((stackState) => stackState.status === STACK_DEPLOY_STATUS_PENDING) + .forEach((stackState) => { + stackState.status = STACK_DEPLOY_STATUS_SKIPPED; + }); + }; + + const getDeployStatus = async (stackState) => { + const stackName = stackState.name; + const ret = await cfn.describeStacks({ StackName: stackName }).promise(); + + // Handle no stack found + if (ret.Stacks.length === 0) { + throw new Error( + `The stack named ${stackName} failed to deploy, it is removed while deploying.` + ); + } + + const { StackStatus, Outputs } = ret.Stacks[0]; + let isDeployed; + + // Case: in progress + if (StackStatus.endsWith("_IN_PROGRESS")) { + isDeployed = false; + } + // Case: stack creation failed + else if ( + StackStatus === "ROLLBACK_COMPLETE" || + StackStatus === "ROLLBACK_FAILED" + ) { + throw new Error( + `The stack named ${stackName} failed creation, it may need to be manually deleted from the AWS console: ${StackStatus}` + ); + } + // Case: stack deploy failed + else if ( + StackStatus !== "CREATE_COMPLETE" && + StackStatus !== "UPDATE_COMPLETE" + ) { + throw new Error( + `The stack named ${stackName} failed to deploy: ${StackStatus}` + ); + } + // Case: deploy suceeded + else { + isDeployed = true; + } + + const outputs = []; + const exports = []; + (Outputs || []).forEach(({ OutputKey, OutputValue, ExportName }) => { + OutputKey && (outputs[OutputKey] = OutputValue); + ExportName && (exports[ExportName] = OutputValue); + }); + + return { isDeployed, outputs, exports }; + }; + + const getStackEvents = async (stackState) => { + // Note: should probably switch to use CDK's built in StackActivity class at some point + + // Stack state props will be modified: + // - stackState.events + // - stackState.eventsLatestErrorMessage + // - stackState.eventsFirstEventAt + + // Get events + const ret = await cfn + .describeStackEvents({ StackName: stackState.name }) + .promise(); + const stackEvents = ret.StackEvents || []; + + // look through all the stack events and find the first relevant + // event which is a "Stack" event and has a CREATE, UPDATE or DELETE status + const firstRelevantEvent = stackEvents.find((event) => { + const isStack = "AWS::CloudFormation::Stack"; + const updateIsInProgress = "UPDATE_IN_PROGRESS"; + const createIsInProgress = "CREATE_IN_PROGRESS"; + const deleteIsInProgress = "DELETE_IN_PROGRESS"; + + return ( + event.ResourceType === isStack && + (event.ResourceStatus === updateIsInProgress || + event.ResourceStatus === createIsInProgress || + event.ResourceStatus === deleteIsInProgress) + ); + }); + + // set the date some time before the first found + // stack event of recently issued stack modification + if (firstRelevantEvent) { + const eventDate = new Date(firstRelevantEvent.Timestamp); + const updatedDate = eventDate.setSeconds(eventDate.getSeconds() - 5); + stackState.eventsFirstEventAt = new Date(updatedDate); + } + + // Loop through stack events + const events = stackState.events || []; + stackEvents.reverse().forEach((event) => { + const eventInRange = + stackState.eventsFirstEventAt && + stackState.eventsFirstEventAt <= event.Timestamp; + const eventNotLogged = events.every( + (loggedEvent) => loggedEvent.eventId !== event.EventId + ); + let eventStatus = event.ResourceStatus; + if (eventInRange && eventNotLogged) { + let isFirstError = false; + // Keep track of first failed event + if ( + eventStatus && + (eventStatus.endsWith("FAILED") || + eventStatus.endsWith("ROLLBACK_IN_PROGRESS")) && + !stackState.eventsLatestErrorMessage + ) { + stackState.eventsLatestErrorMessage = event.ResourceStatusReason; + isFirstError = true; + } + // Print new events + const statusColor = colorFromStatusResult(event.ResourceStatus); + logger.log( + `${stackState.name}` + + ` | ${statusColor(event.ResourceStatus || "")}` + + ` | ${event.ResourceType}` + + ` | ${statusColor(chalk.bold(event.LogicalResourceId || ""))}` + + ` ${ + isFirstError ? statusColor(event.ResourceStatusReason || "") : "" + }` + ); + // Prepare for next monitoring action + events.push({ + eventId: event.EventId, + timestamp: event.Timestamp, + resourceType: event.ResourceType, + resourceStatus: event.ResourceStatus, + resourceStatusReason: event.ResourceStatusReason, + logicalResourceId: event.LogicalResourceId, + }); + } + }); + stackState.events = events; + }; + + function isRetryableException(e) { + return ( + (e.code === "ThrottlingException" && e.message === "Rate exceeded") || + (e.code === "Throttling" && e.message === "Rate exceeded") || + (e.code === "TooManyRequestsException" && + e.message === "Too Many Requests") || + e.code === "OperationAbortedException" || + e.code === "TimeoutError" || + e.code === "NetworkingError" + ); + } + + function isBootstrapException(e) { + return ( + e.message && + e.message.startsWith( + "This stack uses assets, so the toolkit stack must be deployed to the environment" + ) + ); + } + + const colorFromStatusResult = (status) => { + if (!status) { + return chalk.reset; + } + + if (status.indexOf("FAILED") !== -1) { + return chalk.red; + } + if (status.indexOf("ROLLBACK") !== -1) { + return chalk.yellow; + } + if (status.indexOf("COMPLETE") !== -1) { + return chalk.green; + } + + return chalk.reset; + }; + + // Case: initial call + if (!stackStates) { + const { stacks } = await cdk.sstList(cdkOptions); + stackStates = stacks.map(({ name, dependencies }) => ({ + name, + status: STACK_DEPLOY_STATUS_PENDING, + dependencies: dependencies.map((d) => d.id), + account: undefined, + region: undefined, + startedAt: undefined, + endedAt: undefined, + events: [], + eventsLatestErrorMessage: undefined, + eventsFirstEventAt: undefined, + errorMessage: undefined, + outputs: undefined, + })); + } + + const cfn = new aws.CloudFormation({ region }); + logger.debug(`Initial stack states: ${JSON.stringify(stackStates)}`); + await updateDeployStatuses(); + logger.debug(`After update deploy statuses: ${JSON.stringify(stackStates)}`); + await deployStacks(); + logger.debug(`After deploy stacks: ${JSON.stringify(stackStates)}`); + + const isCompleted = stackStates.every( + (stackState) => + ![STACK_DEPLOY_STATUS_PENDING, STACK_DEPLOY_STATUS_DEPLOYING].includes( + stackState.status + ) + ); + + return { stackStates, isCompleted }; +} + +async function parallelDestroy(cdkOptions, region, stackStates) { + const STACK_DESTROY_STATUS_PENDING = "pending"; + const STACK_DESTROY_STATUS_REMOVING = "removing"; + const STACK_DESTROY_STATUS_SUCCEEDED = "succeeded"; + const STACK_DESTROY_STATUS_FAILED = "failed"; + const STACK_DESTROY_STATUS_SKIPPED = "skipped"; + + const destroyStacks = async () => { + let hasSucceededStack = false; + + const statusesByStackName = {}; + stackStates.forEach(({ name, status }) => { + statusesByStackName[name] = status; + }); + + await Promise.all( + stackStates + .filter( + (stackState) => stackState.status === STACK_DESTROY_STATUS_PENDING + ) + .filter((stackState) => + stackState.dependencies.every( + (dep) => statusesByStackName[dep] === STACK_DESTROY_STATUS_SUCCEEDED + ) + ) + .map(async (stackState) => { + try { + logger.debug(`Destroying stack ${stackState.name}`); + const { status } = await cdk.sstDestroy({ + ...cdkOptions, + stackName: stackState.name, + }); + logger.debug( + `Destroying stack ${stackState.name} status: ${status}` + ); + + if (status === "destroyed") { + stackState.status = STACK_DESTROY_STATUS_SUCCEEDED; + hasSucceededStack = true; + logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); + } else if (status === "destroying") { + stackState.status = STACK_DESTROY_STATUS_REMOVING; + } else { + stackState.status = STACK_DESTROY_STATUS_FAILED; + stackState.errorMessage = `The ${stackState.name} stack failed to destroy.`; + skipPendingStacks(); + logger.log( + chalk.red( + `\n ❌ ${chalk.bold(stackState.name)} failed: ${ + stackState.errorMessage + }\n` + ) + ); + } + } catch (e) { + logger.debug(`Destroy stack ${stackState.name} exception ${e}`); + if (isRetryableException(e)) { + // retry + } else { + stackState.status = STACK_DESTROY_STATUS_FAILED; + stackState.errorMessage = e.message; + skipPendingStacks(); + logger.log( + chalk.red( + `\n ❌ ${chalk.bold(stackState.name)} failed: ${e}\n` + ) + ); + } + } + }) + ); + + if (hasSucceededStack) { + logger.debug( + "At least 1 stack successfully destroyed, call destroyStacks() again" + ); + await destroyStacks(); + } + }; + + const updateDestroyStatuses = async () => { + await Promise.all( + stackStates + .filter( + (stackState) => stackState.status === STACK_DESTROY_STATUS_REMOVING + ) + .map(async (stackState) => { + // Get stack events + try { + logger.debug(`Fetching stack events ${stackState.name}`); + await getStackEvents(stackState); + } catch (eventsEx) { + logger.debug(eventsEx); + if (isRetryableException(eventsEx)) { + // retry + return; + } else if (isStackNotExistException(eventsEx)) { + // ignore + stackState.status = STACK_DESTROY_STATUS_SUCCEEDED; + logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); + return; + } + // ignore error + } + + // Get stack status + try { + logger.debug(`Checking stack status ${stackState.name}`); + const { isDestroyed } = await getDestroyStatus(stackState); + + if (isDestroyed) { + stackState.status = STACK_DESTROY_STATUS_SUCCEEDED; + logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); + } + } catch (statusEx) { + logger.debug(statusEx); + if (isRetryableException(statusEx)) { + // retry + } else if (isStackNotExistException(statusEx)) { + stackState.status = STACK_DESTROY_STATUS_SUCCEEDED; + logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); + } else { + stackState.status = STACK_DESTROY_STATUS_FAILED; + stackState.errorMessage = + stackState.eventsLatestErrorMessage || statusEx.message; + skipPendingStacks(); + logger.log( + chalk.red( + `\n ❌ ${chalk.bold(stackState.name)} failed: ${ + stackState.errorMessage + }\n` + ) + ); + } + } + }) + ); + }; + + const skipPendingStacks = () => { + stackStates + .filter( + (stackState) => stackState.status === STACK_DESTROY_STATUS_PENDING + ) + .forEach((stackState) => { + stackState.status = STACK_DESTROY_STATUS_SKIPPED; + }); + }; + + const getDestroyStatus = async (stackState) => { + let isDestroyed; + const stackName = stackState.name; + const ret = await cfn.describeStacks({ StackName: stackName }).promise(); + + // Handle no stack found + if (ret.Stacks.length === 0) { + isDestroyed = true; + } else { + const { StackStatus } = ret.Stacks[0]; + + // Case: in progress + if (StackStatus.endsWith("_IN_PROGRESS")) { + isDestroyed = false; + } + // Case: destroy succeeded + else if (StackStatus === "DELETE_COMPLETE") { + isDestroyed = true; + } + // Case: destroy failed + else { + throw new Error( + `The stack named ${stackName} failed to destroy: ${StackStatus}` + ); + } + } + + return { isDestroyed }; + }; + + const getStackEvents = async (stackState) => { + // Note: should probably switch to use CDK's built in StackActivity class at some point + + // Stack state props will be modified: + // - stackState.events + // - stackState.eventsLatestErrorMessage + // - stackState.eventsFirstEventAt + + // Get events + const ret = await cfn + .describeStackEvents({ StackName: stackState.name }) + .promise(); + const stackEvents = ret.StackEvents || []; + + // look through all the stack events and find the first relevant + // event which is a "Stack" event and has a CREATE, UPDATE or DELETE status + const firstRelevantEvent = stackEvents.find((event) => { + const isStack = "AWS::CloudFormation::Stack"; + const updateIsInProgress = "UPDATE_IN_PROGRESS"; + const createIsInProgress = "CREATE_IN_PROGRESS"; + const deleteIsInProgress = "DELETE_IN_PROGRESS"; + + return ( + event.ResourceType === isStack && + (event.ResourceStatus === updateIsInProgress || + event.ResourceStatus === createIsInProgress || + event.ResourceStatus === deleteIsInProgress) + ); + }); + + // set the date some time before the first found + // stack event of recently issued stack modification + if (firstRelevantEvent) { + const eventDate = new Date(firstRelevantEvent.Timestamp); + const updatedDate = eventDate.setSeconds(eventDate.getSeconds() - 5); + stackState.eventsFirstEventAt = new Date(updatedDate); + } + + // Loop through stack events + const events = stackState.events || []; + stackEvents.reverse().forEach((event) => { + const eventInRange = + stackState.eventsFirstEventAt && + stackState.eventsFirstEventAt <= event.Timestamp; + const eventNotLogged = events.every( + (loggedEvent) => loggedEvent.eventId !== event.EventId + ); + let eventStatus = event.ResourceStatus; + if (eventInRange && eventNotLogged) { + let isFirstError = false; + // Keep track of first failed event + if ( + eventStatus && + (eventStatus.endsWith("FAILED") || + eventStatus.endsWith("ROLLBACK_IN_PROGRESS")) && + !stackState.eventsLatestErrorMessage + ) { + stackState.eventsLatestErrorMessage = event.ResourceStatusReason; + isFirstError = true; + } + // Print new events + const statusColor = colorFromStatusResult(event.ResourceStatus); + logger.log( + `${stackState.name}` + + ` | ${statusColor(event.ResourceStatus || "")}` + + ` | ${event.ResourceType}` + + ` | ${statusColor(chalk.bold(event.LogicalResourceId || ""))}` + + ` ${ + isFirstError ? statusColor(event.ResourceStatusReason || "") : "" + }` + ); + // Prepare for next monitoring action + events.push({ + eventId: event.EventId, + timestamp: event.Timestamp, + resourceType: event.ResourceType, + resourceStatus: event.ResourceStatus, + resourceStatusReason: event.ResourceStatusReason, + logicalResourceId: event.LogicalResourceId, + }); + } + }); + stackState.events = events; + }; + + function isRetryableException(e) { + return ( + (e.code === "ThrottlingException" && e.message === "Rate exceeded") || + (e.code === "Throttling" && e.message === "Rate exceeded") || + (e.code === "TooManyRequestsException" && + e.message === "Too Many Requests") || + e.code === "OperationAbortedException" || + e.code === "TimeoutError" || + e.code === "NetworkingError" + ); + } + + function isStackNotExistException(e) { + return ( + e.code === "ValidationError" && + e.message.startsWith("Stack [") && + e.message.endsWith("] does not exist") + ); + } + + const colorFromStatusResult = (status) => { + if (!status) { + return chalk.reset; + } + + if (status.indexOf("FAILED") !== -1) { + return chalk.red; + } + if (status.indexOf("ROLLBACK") !== -1) { + return chalk.yellow; + } + if (status.indexOf("COMPLETE") !== -1) { + return chalk.green; + } + + return chalk.reset; + }; + + // Case: initial call + if (!stackStates) { + const { stacks } = await cdk.sstList(cdkOptions); + + // Generate reverse dependency map + const reverseDependencyMapping = {}; + stacks.forEach(({ name, dependencies }) => + dependencies.forEach((dep) => { + reverseDependencyMapping[dep] = reverseDependencyMapping[dep] || []; + reverseDependencyMapping[dep].push(name); + }) + ); + + stackStates = stacks.map(({ name }) => ({ + name, + status: STACK_DESTROY_STATUS_PENDING, + dependencies: reverseDependencyMapping[name] || [], + events: [], + eventsLatestErrorMessage: undefined, + eventsFirstEventAt: undefined, + errorMessage: undefined, + })); + } + + const cfn = new aws.CloudFormation({ region }); + logger.debug(`Initial stack states: ${JSON.stringify(stackStates)}`); + await updateDestroyStatuses(); + logger.debug(`After update destroy statuses: ${JSON.stringify(stackStates)}`); + await destroyStacks(); + logger.debug(`After destroy stacks: ${JSON.stringify(stackStates)}`); + + const isCompleted = stackStates.every( + (stackState) => + ![STACK_DESTROY_STATUS_PENDING, STACK_DESTROY_STATUS_REMOVING].includes( + stackState.status + ) + ); + + return { stackStates, isCompleted }; +} + +module.exports = { + parallelDeploy, + parallelDestroy, +}; diff --git a/packages/core/package.json b/packages/core/package.json index e5830054f3..cbaaa064c7 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -17,6 +17,10 @@ "publishConfig": { "access": "public" }, - "dependencies": {}, + "dependencies": { + "aws-sdk": "^2.761.0", + "chalk": "^4.1.0", + "sst-cdk": "1.61.0-rc.20" + }, "devDependencies": {} } diff --git a/packages/core/util/logger.js b/packages/core/util/logger.js new file mode 100644 index 0000000000..675fe6577b --- /dev/null +++ b/packages/core/util/logger.js @@ -0,0 +1,24 @@ +const chalk = require("chalk"); + +function debug(message) { + if (!process.env.DEBUG) { + return; + } + console.debug(chalk.grey("debug ") + message); +} +function log(message) { + console.log(message); +} +function warn(message) { + console.warn(chalk.yellow("warn ") + message); +} +function error(message) { + console.error(chalk.red("error ") + message); +} + +module.exports = { + log, + warn, + debug, + error, +}; From c9e7b4ee4b34812d8b328b9b01f6e2edb690b881 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 28 Sep 2020 19:44:10 -0400 Subject: [PATCH 102/481] Moving cdk version checks to core --- packages/cli/bin/scripts.js | 10 +++------- packages/cli/test/helpers/sync-cdk-version.js | 10 ++++++---- packages/core/index.js | 8 ++++++++ .../create-serverless-stack/scripts/get-cdk-version.js | 4 ++-- packages/resources/scripts/aws-cdk-version-check.js | 8 ++++---- 5 files changed, 23 insertions(+), 17 deletions(-) diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index c6d1fdfa82..686cd9ff30 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -22,6 +22,7 @@ const spawn = require("cross-spawn"); const packageJson = require("../package.json"); const paths = require("../scripts/config/paths"); const cdkOptions = require("../scripts/config/cdkOptions"); +const { getCdkVersion } = require("@serverless-stack/core"); const { prepareCdk } = require("../scripts/config/cdkHelpers"); const sstVersion = packageJson.version; @@ -47,11 +48,6 @@ const internals = { [cmd.remove]: require("../scripts/remove"), }; -function getCdkVersion() { - const sstCdkVersion = packageJson.dependencies["sst-cdk"]; - return sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; -} - function getCliInfo() { const usingYarn = fs.existsSync(path.join(paths.appPath, "yarn.lock")); @@ -134,8 +130,8 @@ const argv = yargs .version( true, - "Show the version of sst and cdk", - `sst: ${sstVersion}\ncdk: ${cdkVersion}` + "Show the version of SST and CDK", + `SST: ${sstVersion}\nCDK: ${cdkVersion}` ) .alias("version", "v") .help("help") diff --git a/packages/cli/test/helpers/sync-cdk-version.js b/packages/cli/test/helpers/sync-cdk-version.js index 456ce12818..0103641612 100644 --- a/packages/cli/test/helpers/sync-cdk-version.js +++ b/packages/cli/test/helpers/sync-cdk-version.js @@ -1,13 +1,15 @@ /** - * Gets the forked AWS CDK version from @serverless-stack/cli and writes to a temp file. - * Replaces the version in the template package.json. + * Gets the forked AWS CDK version from @serverless-stack/core + * And makes sure all the package.json files in the tests are using the same version. */ const path = require("path"); const replace = require("replace-in-file"); -const sstCdkVersion = require(path.join(__dirname, "../../package.json")) - .dependencies["sst-cdk"]; +const sstCdkVersion = require(path.join( + __dirname, + "../../../core/package.json" +)).dependencies["sst-cdk"]; const cdkVersion = sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; try { diff --git a/packages/core/index.js b/packages/core/index.js index 9d148b5ea4..d2ad7fda76 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -3,7 +3,14 @@ const cdk = require("sst-cdk"); const aws = require("aws-sdk"); const chalk = require("chalk"); + const logger = require("./util/logger"); +const packageJson = require("./package.json"); + +function getCdkVersion() { + const sstCdkVersion = packageJson.dependencies["sst-cdk"]; + return sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; +} async function parallelDeploy(cdkOptions, region, stackStates) { const STACK_DEPLOY_STATUS_PENDING = "pending"; @@ -767,6 +774,7 @@ async function parallelDestroy(cdkOptions, region, stackStates) { } module.exports = { + getCdkVersion, parallelDeploy, parallelDestroy, }; diff --git a/packages/create-serverless-stack/scripts/get-cdk-version.js b/packages/create-serverless-stack/scripts/get-cdk-version.js index 2c95b89b22..5bf4a5c5fe 100644 --- a/packages/create-serverless-stack/scripts/get-cdk-version.js +++ b/packages/create-serverless-stack/scripts/get-cdk-version.js @@ -1,12 +1,12 @@ /** - * Gets the forked AWS CDK version from @serverless-stack/cli and writes to a temp file. + * Gets the forked AWS CDK version from @serverless-stack/core and writes to a temp file. * Replaces the version in the template package.json. */ const fs = require("fs"); const path = require("path"); -const sstCdkVersion = require(path.join(__dirname, "../../cli/package.json")) +const sstCdkVersion = require(path.join(__dirname, "../../core/package.json")) .dependencies["sst-cdk"]; const cdkVersion = sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; diff --git a/packages/resources/scripts/aws-cdk-version-check.js b/packages/resources/scripts/aws-cdk-version-check.js index fa58727e14..311d16556f 100644 --- a/packages/resources/scripts/aws-cdk-version-check.js +++ b/packages/resources/scripts/aws-cdk-version-check.js @@ -1,6 +1,6 @@ /** * Keep the AWS CDK version in sync with the forked version we are using in - * @serverless-stack/cli. Can cause unexpected issues if out of sync. + * @serverless-stack/core. Can cause unexpected issues if out of sync. * More here https://github.com/aws/aws-cdk/issues/542#issuecomment-449694450 */ @@ -22,7 +22,7 @@ function formatDepsForInstall(depsList, version) { return depsList.map((dep) => `${dep}@${version}`).join(" "); } -const sstCdkVersion = require(path.join(__dirname, "../../cli/package.json")) +const sstCdkVersion = require(path.join(__dirname, "../../core/package.json")) .dependencies["sst-cdk"]; const cdkVersion = sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; @@ -38,7 +38,7 @@ const mismatchedDevDeps = filterMismatchedVersion( if (mismatchedDeps.length !== 0 || mismatchedDevDeps.length !== 0) { console.log( - "\n❌ AWS CDK versions in @serverless-stack/resources is not in sync with @serverless-stack/cli. Fix using:\n" + "\n❌ AWS CDK versions in @serverless-stack/resources is not in sync with @serverless-stack/core. Fix using:\n" ); if (mismatchedDeps.length > 0) { @@ -56,7 +56,7 @@ if (mismatchedDeps.length !== 0 || mismatchedDevDeps.length !== 0) { } console.log( - "✅ AWS CDK versions in @serverless-stack/resources is in sync with @serverless-stack/cli" + "✅ AWS CDK versions in @serverless-stack/resources is in sync with @serverless-stack/core" ); process.exit(0); From 01efa862e0ce5cb8231674b2db549646bc92c4ea Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 28 Sep 2020 23:59:00 -0400 Subject: [PATCH 103/481] Implement --- packages/cli/package.json | 1 - packages/cli/scripts/config/cdkHelpers.js | 42 +++++------------------ packages/cli/scripts/deploy.js | 2 +- packages/core/index.js | 23 +++++++++---- 4 files changed, 26 insertions(+), 42 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index cb47276b65..4e1bd64399 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -54,7 +54,6 @@ "fs-extra": "^9.0.1", "jest": "^26.1.0", "source-map-support": "^0.5.19", - "sst-cdk": "1.61.0-rc.20", "ts-jest": "^26.1.4", "typescript": "^3.9.7", "yargs": "^15.4.1" diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index fc03967afa..d4f3333eef 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -4,7 +4,7 @@ const path = require("path"); const fs = require("fs-extra"); const chalk = require("chalk"); const spawn = require("cross-spawn"); -const cdk = require("sst-cdk"); +const sstCore = require("@serverless-stack/core"); const paths = require("./paths"); const logger = require("../util/logger"); @@ -279,35 +279,11 @@ function handleCdkErrors(e) { } } -async function list(options) { - let results; - - try { - results = await cdk.sstList(options); - } catch (e) { - handleCdkErrors(e); - } - - return results; -} - async function synth(options) { let results; try { - results = await cdk.sstSynth(options); - } catch (e) { - handleCdkErrors(e); - } - - return results; -} - -async function bootstrap(options) { - let results; - - try { - results = await cdk.sstBootstrap(options); + results = await sstCore.synth(options); } catch (e) { handleCdkErrors(e); } @@ -315,11 +291,11 @@ async function bootstrap(options) { return results; } -async function deploy(options) { +async function parallelDeploy(options) { let results; try { - results = await cdk.sstDeploy(options); + results = await sstCore.parallelDeploy(options); } catch (e) { handleCdkErrors(e); } @@ -327,11 +303,11 @@ async function deploy(options) { return results; } -async function destroy(options) { +async function parallelDestroy(options) { let results; try { - results = await cdk.sstDestroy(options); + results = await sstCore.parallelDestroy(options); } catch (e) { handleCdkErrors(e); } @@ -340,10 +316,8 @@ async function destroy(options) { } module.exports = { - list, synth, - deploy, - destroy, - bootstrap, prepareCdk, + parallelDeploy, + parallelDestroy, }; diff --git a/packages/cli/scripts/deploy.js b/packages/cli/scripts/deploy.js index c27afa7668..92722bccb0 100644 --- a/packages/cli/scripts/deploy.js +++ b/packages/cli/scripts/deploy.js @@ -1,7 +1,7 @@ "use strict"; const chalk = require("chalk"); -const { parallelDeploy } = require("@serverless-stack/core"); +const { parallelDeploy } = require("./config/cdkHelpers"); const logger = require("./util/logger"); diff --git a/packages/core/index.js b/packages/core/index.js index d2ad7fda76..9bc84e80ff 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -1,6 +1,12 @@ "use strict"; -const cdk = require("sst-cdk"); +const { + sstList, + sstSynth, + sstBootstrap, + sstDeploy, + sstDestroy, +} = require("sst-cdk"); const aws = require("aws-sdk"); const chalk = require("chalk"); @@ -12,6 +18,10 @@ function getCdkVersion() { return sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; } +async function synth(cdkOptions) { + return await sstSynth(cdkOptions); +} + async function parallelDeploy(cdkOptions, region, stackStates) { const STACK_DEPLOY_STATUS_PENDING = "pending"; const STACK_DEPLOY_STATUS_DEPLOYING = "deploying"; @@ -51,7 +61,7 @@ async function parallelDeploy(cdkOptions, region, stackStates) { region, outputs, exports, - } = await cdk.sstDeploy({ + } = await sstDeploy({ ...cdkOptions, stackName: stackState.name, }); @@ -107,7 +117,7 @@ async function parallelDeploy(cdkOptions, region, stackStates) { } else if (isBootstrapException(deployEx)) { try { logger.debug(`Bootstraping stack ${stackState.name}`); - await cdk.sstBootstrap(cdkOptions); + await sstBootstrap(cdkOptions); logger.debug(`Bootstraped stack ${stackState.name}`); } catch (bootstrapEx) { logger.debug( @@ -396,7 +406,7 @@ async function parallelDeploy(cdkOptions, region, stackStates) { // Case: initial call if (!stackStates) { - const { stacks } = await cdk.sstList(cdkOptions); + const { stacks } = await sstList(cdkOptions); stackStates = stacks.map(({ name, dependencies }) => ({ name, status: STACK_DEPLOY_STATUS_PENDING, @@ -458,7 +468,7 @@ async function parallelDestroy(cdkOptions, region, stackStates) { .map(async (stackState) => { try { logger.debug(`Destroying stack ${stackState.name}`); - const { status } = await cdk.sstDestroy({ + const { status } = await sstDestroy({ ...cdkOptions, stackName: stackState.name, }); @@ -734,7 +744,7 @@ async function parallelDestroy(cdkOptions, region, stackStates) { // Case: initial call if (!stackStates) { - const { stacks } = await cdk.sstList(cdkOptions); + const { stacks } = await sstList(cdkOptions); // Generate reverse dependency map const reverseDependencyMapping = {}; @@ -774,6 +784,7 @@ async function parallelDestroy(cdkOptions, region, stackStates) { } module.exports = { + synth, getCdkVersion, parallelDeploy, parallelDestroy, From 279a47a74e326408c994ab066028df517cc2e185 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 29 Sep 2020 19:11:35 -0400 Subject: [PATCH 104/481] Implement --- packages/cli/scripts/deploy.js | 6 +- packages/cli/scripts/remove.js | 6 +- packages/cli/test/cdk-command/yarn.lock | 38 ++++++------- .../cli/test/eslint-ignore-rule/yarn.lock | 38 ++++++------- packages/cli/test/eslint-ignore/yarn.lock | 38 ++++++------- packages/cli/test/eslint-ts/yarn.lock | 38 ++++++------- packages/cli/test/eslint/yarn.lock | 38 ++++++------- .../test/mismatched-cdk-versions/yarn.lock | 56 +++++++++---------- packages/cli/test/stack-set-env/yarn.lock | 38 ++++++------- packages/core/index.js | 31 +++++----- packages/core/package.json | 2 +- yarn.lock | 8 +-- 12 files changed, 163 insertions(+), 174 deletions(-) diff --git a/packages/cli/scripts/deploy.js b/packages/cli/scripts/deploy.js index 92722bccb0..72fa2bb8ef 100644 --- a/packages/cli/scripts/deploy.js +++ b/packages/cli/scripts/deploy.js @@ -17,11 +17,7 @@ module.exports = async function (argv, config, cliInfo) { // Update deploy status const cdkOptions = { ...cliInfo.cdkOptions, stackName: argv.stack }; - const response = await parallelDeploy( - cdkOptions, - config.region, - stackStates - ); + const response = await parallelDeploy(cdkOptions, stackStates); stackStates = response.stackStates; isCompleted = response.isCompleted; diff --git a/packages/cli/scripts/remove.js b/packages/cli/scripts/remove.js index d0cff7a3bf..594e4179d0 100644 --- a/packages/cli/scripts/remove.js +++ b/packages/cli/scripts/remove.js @@ -14,11 +14,7 @@ module.exports = async function (argv, config, cliInfo) { do { // Update remove status const cdkOptions = { ...cliInfo.cdkOptions, stackName: argv.stack }; - const response = await parallelDestroy( - cdkOptions, - config.region, - stackStates - ); + const response = await parallelDestroy(cdkOptions, stackStates); stackStates = response.stackStates; isCompleted = response.isCompleted; diff --git a/packages/cli/test/cdk-command/yarn.lock b/packages/cli/test/cdk-command/yarn.lock index 7324d910a7..4a2a4116c5 100644 --- a/packages/cli/test/cdk-command/yarn.lock +++ b/packages/cli/test/cdk-command/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@aws-cdk/cloud-assembly-schema@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" - integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== +"@aws-cdk/cloud-assembly-schema@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" + integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== dependencies: jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/core@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" - integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== +"@aws-cdk/core@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" + integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" fs-extra "^9.0.1" minimatch "^3.0.4" -"@aws-cdk/cx-api@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" - integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== +"@aws-cdk/cx-api@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" + integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" semver "^7.2.2" "@serverless-stack/resources@../../../resources": - version "0.1.0" + version "0.1.10" dependencies: - "@aws-cdk/core" "1.55.0" + "@aws-cdk/core" "1.61.0" at-least-node@^1.0.0: version "1.0.0" @@ -57,7 +57,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.2: +constructs@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== diff --git a/packages/cli/test/eslint-ignore-rule/yarn.lock b/packages/cli/test/eslint-ignore-rule/yarn.lock index 9672d2f4b9..4a2a4116c5 100644 --- a/packages/cli/test/eslint-ignore-rule/yarn.lock +++ b/packages/cli/test/eslint-ignore-rule/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@aws-cdk/cloud-assembly-schema@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" - integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== +"@aws-cdk/cloud-assembly-schema@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" + integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== dependencies: jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/core@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" - integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== +"@aws-cdk/core@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" + integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" fs-extra "^9.0.1" minimatch "^3.0.4" -"@aws-cdk/cx-api@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" - integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== +"@aws-cdk/cx-api@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" + integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" semver "^7.2.2" "@serverless-stack/resources@../../../resources": - version "0.0.15" + version "0.1.10" dependencies: - "@aws-cdk/core" "1.55.0" + "@aws-cdk/core" "1.61.0" at-least-node@^1.0.0: version "1.0.0" @@ -57,7 +57,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.2: +constructs@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== diff --git a/packages/cli/test/eslint-ignore/yarn.lock b/packages/cli/test/eslint-ignore/yarn.lock index 9672d2f4b9..4a2a4116c5 100644 --- a/packages/cli/test/eslint-ignore/yarn.lock +++ b/packages/cli/test/eslint-ignore/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@aws-cdk/cloud-assembly-schema@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" - integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== +"@aws-cdk/cloud-assembly-schema@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" + integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== dependencies: jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/core@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" - integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== +"@aws-cdk/core@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" + integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" fs-extra "^9.0.1" minimatch "^3.0.4" -"@aws-cdk/cx-api@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" - integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== +"@aws-cdk/cx-api@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" + integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" semver "^7.2.2" "@serverless-stack/resources@../../../resources": - version "0.0.15" + version "0.1.10" dependencies: - "@aws-cdk/core" "1.55.0" + "@aws-cdk/core" "1.61.0" at-least-node@^1.0.0: version "1.0.0" @@ -57,7 +57,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.2: +constructs@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== diff --git a/packages/cli/test/eslint-ts/yarn.lock b/packages/cli/test/eslint-ts/yarn.lock index 9672d2f4b9..4a2a4116c5 100644 --- a/packages/cli/test/eslint-ts/yarn.lock +++ b/packages/cli/test/eslint-ts/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@aws-cdk/cloud-assembly-schema@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" - integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== +"@aws-cdk/cloud-assembly-schema@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" + integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== dependencies: jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/core@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" - integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== +"@aws-cdk/core@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" + integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" fs-extra "^9.0.1" minimatch "^3.0.4" -"@aws-cdk/cx-api@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" - integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== +"@aws-cdk/cx-api@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" + integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" semver "^7.2.2" "@serverless-stack/resources@../../../resources": - version "0.0.15" + version "0.1.10" dependencies: - "@aws-cdk/core" "1.55.0" + "@aws-cdk/core" "1.61.0" at-least-node@^1.0.0: version "1.0.0" @@ -57,7 +57,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.2: +constructs@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== diff --git a/packages/cli/test/eslint/yarn.lock b/packages/cli/test/eslint/yarn.lock index 9672d2f4b9..4a2a4116c5 100644 --- a/packages/cli/test/eslint/yarn.lock +++ b/packages/cli/test/eslint/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@aws-cdk/cloud-assembly-schema@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" - integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== +"@aws-cdk/cloud-assembly-schema@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" + integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== dependencies: jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/core@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" - integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== +"@aws-cdk/core@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" + integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" fs-extra "^9.0.1" minimatch "^3.0.4" -"@aws-cdk/cx-api@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" - integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== +"@aws-cdk/cx-api@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" + integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" semver "^7.2.2" "@serverless-stack/resources@../../../resources": - version "0.0.15" + version "0.1.10" dependencies: - "@aws-cdk/core" "1.55.0" + "@aws-cdk/core" "1.61.0" at-least-node@^1.0.0: version "1.0.0" @@ -57,7 +57,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.2: +constructs@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== diff --git a/packages/cli/test/mismatched-cdk-versions/yarn.lock b/packages/cli/test/mismatched-cdk-versions/yarn.lock index ace342f4a2..b79968a3b8 100644 --- a/packages/cli/test/mismatched-cdk-versions/yarn.lock +++ b/packages/cli/test/mismatched-cdk-versions/yarn.lock @@ -264,14 +264,6 @@ "@aws-cdk/core" "1.60.0" constructs "^3.0.2" -"@aws-cdk/cloud-assembly-schema@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" - integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - "@aws-cdk/cloud-assembly-schema@1.56.0": version "1.56.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.56.0.tgz#b2b3cb687ead39ab8cecfaac6a4bee14666d6abc" @@ -296,16 +288,13 @@ jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/core@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" - integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== +"@aws-cdk/cloud-assembly-schema@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" + integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - fs-extra "^9.0.1" - minimatch "^3.0.4" + jsonschema "^1.2.5" + semver "^7.2.2" "@aws-cdk/core@1.56.0": version "1.56.0" @@ -340,6 +329,17 @@ fs-extra "^9.0.1" minimatch "^3.0.4" +"@aws-cdk/core@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" + integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + fs-extra "^9.0.1" + minimatch "^3.0.4" + "@aws-cdk/custom-resources@1.60.0": version "1.60.0" resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.60.0.tgz#295828b349e8402a6d7e36a9dd73f3cef990552d" @@ -353,14 +353,6 @@ "@aws-cdk/core" "1.60.0" constructs "^3.0.2" -"@aws-cdk/cx-api@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" - integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - semver "^7.2.2" - "@aws-cdk/cx-api@1.56.0": version "1.56.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.56.0.tgz#36bf05de73d26ecc69054855f238beaf0bf2a482" @@ -385,6 +377,14 @@ "@aws-cdk/cloud-assembly-schema" "1.60.0" semver "^7.2.2" +"@aws-cdk/cx-api@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" + integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.61.0" + semver "^7.2.2" + "@aws-cdk/region-info@1.57.0": version "1.57.0" resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.57.0.tgz#ae45fcf82fe7c66348c8b7ecfbb738dfb08bde9d" @@ -396,9 +396,9 @@ integrity sha512-rz2HUVTM42wVXbx+T2nwT8WKSY9BFB+ThhdGAT81l1dsi/Vtne1Ql5AlnBRCWW4TXR6Nvt3DjGEsG4o6DZmsdw== "@serverless-stack/resources@../../../resources": - version "0.0.17" + version "0.1.10" dependencies: - "@aws-cdk/core" "1.55.0" + "@aws-cdk/core" "1.61.0" at-least-node@^1.0.0: version "1.0.0" @@ -423,7 +423,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.2: +constructs@^3.0.2, constructs@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== diff --git a/packages/cli/test/stack-set-env/yarn.lock b/packages/cli/test/stack-set-env/yarn.lock index 1027e73245..4a2a4116c5 100644 --- a/packages/cli/test/stack-set-env/yarn.lock +++ b/packages/cli/test/stack-set-env/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@aws-cdk/cloud-assembly-schema@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" - integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== +"@aws-cdk/cloud-assembly-schema@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" + integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== dependencies: jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/core@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" - integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== +"@aws-cdk/core@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" + integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" fs-extra "^9.0.1" minimatch "^3.0.4" -"@aws-cdk/cx-api@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" - integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== +"@aws-cdk/cx-api@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" + integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" semver "^7.2.2" "@serverless-stack/resources@../../../resources": - version "0.0.10" + version "0.1.10" dependencies: - "@aws-cdk/core" "1.55.0" + "@aws-cdk/core" "1.61.0" at-least-node@^1.0.0: version "1.0.0" @@ -57,7 +57,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.2: +constructs@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== diff --git a/packages/core/index.js b/packages/core/index.js index 9bc84e80ff..150d682c35 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -1,12 +1,6 @@ "use strict"; -const { - sstList, - sstSynth, - sstBootstrap, - sstDeploy, - sstDestroy, -} = require("sst-cdk"); +const cdk = require("sst-cdk"); const aws = require("aws-sdk"); const chalk = require("chalk"); @@ -19,10 +13,10 @@ function getCdkVersion() { } async function synth(cdkOptions) { - return await sstSynth(cdkOptions); + return await cdk.synth(cdkOptions); } -async function parallelDeploy(cdkOptions, region, stackStates) { +async function parallelDeploy(cdkOptions, stackStates) { const STACK_DEPLOY_STATUS_PENDING = "pending"; const STACK_DEPLOY_STATUS_DEPLOYING = "deploying"; const STACK_DEPLOY_STATUS_SUCCEEDED = "succeeded"; @@ -61,7 +55,7 @@ async function parallelDeploy(cdkOptions, region, stackStates) { region, outputs, exports, - } = await sstDeploy({ + } = await cdk.deploy({ ...cdkOptions, stackName: stackState.name, }); @@ -117,7 +111,7 @@ async function parallelDeploy(cdkOptions, region, stackStates) { } else if (isBootstrapException(deployEx)) { try { logger.debug(`Bootstraping stack ${stackState.name}`); - await sstBootstrap(cdkOptions); + await cdk.bootstrap(cdkOptions); logger.debug(`Bootstraped stack ${stackState.name}`); } catch (bootstrapEx) { logger.debug( @@ -231,6 +225,7 @@ async function parallelDeploy(cdkOptions, region, stackStates) { const getDeployStatus = async (stackState) => { const stackName = stackState.name; + const cfn = new aws.CloudFormation({ region: stackState.region }); const ret = await cfn.describeStacks({ StackName: stackName }).promise(); // Handle no stack found @@ -289,6 +284,7 @@ async function parallelDeploy(cdkOptions, region, stackStates) { // - stackState.eventsFirstEventAt // Get events + const cfn = new aws.CloudFormation({ region: stackState.region }); const ret = await cfn .describeStackEvents({ StackName: stackState.name }) .promise(); @@ -406,7 +402,7 @@ async function parallelDeploy(cdkOptions, region, stackStates) { // Case: initial call if (!stackStates) { - const { stacks } = await sstList(cdkOptions); + const { stacks } = await cdk.list(cdkOptions); stackStates = stacks.map(({ name, dependencies }) => ({ name, status: STACK_DEPLOY_STATUS_PENDING, @@ -423,7 +419,6 @@ async function parallelDeploy(cdkOptions, region, stackStates) { })); } - const cfn = new aws.CloudFormation({ region }); logger.debug(`Initial stack states: ${JSON.stringify(stackStates)}`); await updateDeployStatuses(); logger.debug(`After update deploy statuses: ${JSON.stringify(stackStates)}`); @@ -440,7 +435,7 @@ async function parallelDeploy(cdkOptions, region, stackStates) { return { stackStates, isCompleted }; } -async function parallelDestroy(cdkOptions, region, stackStates) { +async function parallelDestroy(cdkOptions, stackStates) { const STACK_DESTROY_STATUS_PENDING = "pending"; const STACK_DESTROY_STATUS_REMOVING = "removing"; const STACK_DESTROY_STATUS_SUCCEEDED = "succeeded"; @@ -468,10 +463,11 @@ async function parallelDestroy(cdkOptions, region, stackStates) { .map(async (stackState) => { try { logger.debug(`Destroying stack ${stackState.name}`); - const { status } = await sstDestroy({ + const { status, region } = await cdk.destroy({ ...cdkOptions, stackName: stackState.name, }); + stackState.region = region; logger.debug( `Destroying stack ${stackState.name} status: ${status}` ); @@ -592,6 +588,7 @@ async function parallelDestroy(cdkOptions, region, stackStates) { const getDestroyStatus = async (stackState) => { let isDestroyed; const stackName = stackState.name; + const cfn = new aws.CloudFormation({ region: stackState.region }); const ret = await cfn.describeStacks({ StackName: stackName }).promise(); // Handle no stack found @@ -628,6 +625,7 @@ async function parallelDestroy(cdkOptions, region, stackStates) { // - stackState.eventsFirstEventAt // Get events + const cfn = new aws.CloudFormation({ region: stackState.region }); const ret = await cfn .describeStackEvents({ StackName: stackState.name }) .promise(); @@ -744,7 +742,7 @@ async function parallelDestroy(cdkOptions, region, stackStates) { // Case: initial call if (!stackStates) { - const { stacks } = await sstList(cdkOptions); + const { stacks } = await cdk.list(cdkOptions); // Generate reverse dependency map const reverseDependencyMapping = {}; @@ -766,7 +764,6 @@ async function parallelDestroy(cdkOptions, region, stackStates) { })); } - const cfn = new aws.CloudFormation({ region }); logger.debug(`Initial stack states: ${JSON.stringify(stackStates)}`); await updateDestroyStatuses(); logger.debug(`After update destroy statuses: ${JSON.stringify(stackStates)}`); diff --git a/packages/core/package.json b/packages/core/package.json index cbaaa064c7..6596ba149f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -20,7 +20,7 @@ "dependencies": { "aws-sdk": "^2.761.0", "chalk": "^4.1.0", - "sst-cdk": "1.61.0-rc.20" + "sst-cdk": "1.61.0-rc.22" }, "devDependencies": {} } diff --git a/yarn.lock b/yarn.lock index e4b885ffd6..52f72493e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8165,10 +8165,10 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -sst-cdk@1.61.0-rc.20: - version "1.61.0-rc.20" - resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.61.0-rc.20.tgz#140484fce2190df51682af79abc755fee7035764" - integrity sha512-18Pz0WSfja5HU206tmOUI7zrWMwVh2scZaXAe7dz0NNCE94q0R4x2F6QEWNgOgzujrRThDiQWe6bZBD8bIO4zg== +sst-cdk@1.61.0-rc.22: + version "1.61.0-rc.22" + resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.61.0-rc.22.tgz#3c99bd506502897d5ce6f9d29003c5511e215ae6" + integrity sha512-ycu3pwJs4VC6C/PFqljUjpvRDdFQduZEgoIzAwduMqzoRUmepJGi3yMZO4BxNhx+cuA4EaIXpArscYlNsaTo0g== dependencies: "@aws-cdk/cloud-assembly-schema" "1.61.0" "@aws-cdk/cloudformation-diff" "1.61.0" From 94377c5857eced90c002e8dbb923e48e5a3e535e Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 29 Sep 2020 19:13:41 -0400 Subject: [PATCH 105/481] Implement --- packages/cli/test/base/lib/index.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/cli/test/base/lib/index.js b/packages/cli/test/base/lib/index.js index e33afcff47..7aca5c8b0a 100644 --- a/packages/cli/test/base/lib/index.js +++ b/packages/cli/test/base/lib/index.js @@ -1,16 +1,15 @@ import S3Stack from "./s3"; -//import CognitoStack from "./cognito"; +import CognitoStack from "./cognito"; import DynamoDBStack from "./dynamodb"; -//import MyParentStack from "./nested-stack"; +import MyParentStack from "./nested-stack"; // Add stacks export default function main(app) { new DynamoDBStack(app, "dynamodb"); - // const s3 = new S3Stack(app, "s3"); - new S3Stack(app, "s3"); + const s3 = new S3Stack(app, "s3"); - // new CognitoStack(app, "cognito", { bucketArn: s3.bucket.bucketArn }); + new CognitoStack(app, "cognito", { bucketArn: s3.bucket.bucketArn }); - // new MyParentStack(app, "nested"); + new MyParentStack(app, "nested"); } From 3c0abb877b937c58d46f2304df3934f78619b546 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 30 Sep 2020 00:03:56 -0400 Subject: [PATCH 106/481] Fixing tests and using aws-cdk internally for the cdk command --- packages/cli/package.json | 3 +- .../config}/sync-cdk-version.js | 28 ++++++++++++++++-- packages/core/README.md | 5 ++++ yarn.lock | 29 +++++++++++++++++++ 4 files changed, 62 insertions(+), 3 deletions(-) rename packages/cli/{test/helpers => scripts/config}/sync-cdk-version.js (52%) create mode 100644 packages/core/README.md diff --git a/packages/cli/package.json b/packages/cli/package.json index 4e1bd64399..bbcf702898 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -3,7 +3,7 @@ "version": "0.1.10", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { - "prepare": "node test/helpers/sync-cdk-version.js", + "prepare": "node scripts/config/sync-cdk-version.js", "jest-clear-cache": "jest --clearCache", "test": "jest" }, @@ -47,6 +47,7 @@ "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", "@typescript-eslint/parser": "^3.9.1", + "aws-cdk": "1.61.0", "chalk": "^4.1.0", "core-js": "^3.6.5", "cross-spawn": "^7.0.3", diff --git a/packages/cli/test/helpers/sync-cdk-version.js b/packages/cli/scripts/config/sync-cdk-version.js similarity index 52% rename from packages/cli/test/helpers/sync-cdk-version.js rename to packages/cli/scripts/config/sync-cdk-version.js index 0103641612..009f2ed0b4 100644 --- a/packages/cli/test/helpers/sync-cdk-version.js +++ b/packages/cli/scripts/config/sync-cdk-version.js @@ -1,6 +1,7 @@ /** - * Gets the forked AWS CDK version from @serverless-stack/core - * And makes sure all the package.json files in the tests are using the same version. + * Gets the forked AWS CDK version from @serverless-stack/core and makes sure: + * - The aws-cdk package used for the cdk command is the same version + * - All the package.json files in the tests are using the same version */ const path = require("path"); @@ -12,6 +13,29 @@ const sstCdkVersion = require(path.join( )).dependencies["sst-cdk"]; const cdkVersion = sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; +/** + * Check for cdk command + */ +const packageJson = require(path.join(__dirname, "../../package.json")); + +if (packageJson.dependencies["aws-cdk"] !== cdkVersion) { + console.log( + "\n❌ aws-cdk version in @serverless-stack/cli is not in sync with @serverless-stack/core. Fix using:\n" + ); + console.log(` yarn add --exact aws-cdk@${cdkVersion}`); + + console.log(""); + + process.exit(1); +} + +console.log( + "✅ aws-cdk version in @serverless-stack/cli is in sync with @serverless-stack/core" +); + +/** + * Check for tests + */ try { const results = replace.sync({ //dry : true, diff --git a/packages/core/README.md b/packages/core/README.md new file mode 100644 index 0000000000..6ecb4b68eb --- /dev/null +++ b/packages/core/README.md @@ -0,0 +1,5 @@ +# @serverless-stack/core [![npm](https://img.shields.io/npm/v/@serverless-stack/core.svg)](https://www.npmjs.com/package/@serverless-stack/core) + +Part of the **[Serverless Stack Toolkit](https://github.com/serverless-stack/serverless-stack)**. + +Includes [a forked version of AWS CDK](https://github.com/serverless-stack/sst-cdk) programmatically to deploy and destroy CDK stacks in parallel. diff --git a/yarn.lock b/yarn.lock index 52f72493e9..31605da55c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2572,6 +2572,35 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +aws-cdk@1.61.0: + version "1.61.0" + resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-1.61.0.tgz#b1e1a55c64dff5825b3961b56c2b5fcb7ac472e9" + integrity sha512-deLtRq3DkiUB/5EN8ZCWLdXY0Uhm+fUvA1WSO8lzEhl71SmD7dyEHqvl7k96WPrIhUkS0nbiz6a+WC0QadIthg== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cloudformation-diff" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + "@aws-cdk/region-info" "1.61.0" + archiver "^4.0.2" + aws-sdk "^2.739.0" + camelcase "^6.0.0" + cdk-assets "1.61.0" + colors "^1.4.0" + decamelize "^4.0.0" + fs-extra "^9.0.1" + glob "^7.1.6" + json-diff "^0.5.4" + minimatch ">=3.0" + promptly "^3.0.3" + proxy-agent "^3.1.1" + semver "^7.2.2" + source-map-support "^0.5.19" + table "^5.4.6" + uuid "^8.3.0" + wrap-ansi "^7.0.0" + yaml "^1.10.0" + yargs "^15.4.1" + aws-sdk@^2.739.0: version "2.743.0" resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.743.0.tgz#c72a471c80cf88d78d854c780de861fb8475ae34" From b01062f2463dfb3bb73f2ec0a222f6381007fe81 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 30 Sep 2020 00:08:50 -0400 Subject: [PATCH 107/481] Bringing version up to date --- packages/core/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/package.json b/packages/core/package.json index 6596ba149f..dce40d33c0 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.1.10", + "version": "0.2.0", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", From d432cac6ee62eeea711f67300b10723c0a2f9305 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 30 Sep 2020 00:19:20 -0400 Subject: [PATCH 108/481] v0.3.0 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/core/package.json | 5 ++--- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/lerna.json b/lerna.json index 13e9aa977d..b6e425731b 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.2.0" + "version": "0.3.0" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 8d1e4420a4..7e8b767b4a 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.2.0", + "version": "0.3.0", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "node scripts/config/sync-cdk-version.js", @@ -41,8 +41,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^0.1.10", - "@serverless-stack/resources": "^0.2.0", + "@serverless-stack/core": "^0.3.0", + "@serverless-stack/resources": "^0.3.0", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/core/package.json b/packages/core/package.json index dce40d33c0..9fe4eb22d9 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.2.0", + "version": "0.3.0", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", @@ -21,6 +21,5 @@ "aws-sdk": "^2.761.0", "chalk": "^4.1.0", "sst-cdk": "1.61.0-rc.22" - }, - "devDependencies": {} + } } diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 6306c4d33d..96b917031d 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.2.0", + "version": "0.3.0", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index a0d4ccb12d..2c785243bd 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.2.0", + "version": "0.3.0", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From aab0552bc556f8b046216135d5bb1cdbb2c84ac2 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 30 Sep 2020 17:44:36 -0400 Subject: [PATCH 109/481] Fixing deploy new stack shows no changes. --- packages/cli/scripts/config/cdkHelpers.js | 8 ++++---- packages/core/index.js | 4 ++-- packages/core/package.json | 2 +- yarn.lock | 8 ++++---- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index f2318c33d4..f473dbac1c 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -290,11 +290,11 @@ async function synth(options) { return results; } -async function parallelDeploy(options) { +async function parallelDeploy(options, stackStates) { let results; try { - results = await sstCore.parallelDeploy(options); + results = await sstCore.parallelDeploy(options, stackStates); } catch (e) { handleCdkErrors(e); } @@ -302,11 +302,11 @@ async function parallelDeploy(options) { return results; } -async function parallelDestroy(options) { +async function parallelDestroy(options, stackStates) { let results; try { - results = await sstCore.parallelDestroy(options); + results = await sstCore.parallelDestroy(options, stackStates); } catch (e) { handleCdkErrors(e); } diff --git a/packages/core/index.js b/packages/core/index.js index 150d682c35..2f4dc4c1d3 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -717,8 +717,8 @@ async function parallelDestroy(cdkOptions, stackStates) { function isStackNotExistException(e) { return ( e.code === "ValidationError" && - e.message.startsWith("Stack [") && - e.message.endsWith("] does not exist") + e.message.startsWith("Stack ") && + e.message.endsWith(" does not exist") ); } diff --git a/packages/core/package.json b/packages/core/package.json index 9fe4eb22d9..1b65503d4e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -20,6 +20,6 @@ "dependencies": { "aws-sdk": "^2.761.0", "chalk": "^4.1.0", - "sst-cdk": "1.61.0-rc.22" + "sst-cdk": "1.61.0-rc.23" } } diff --git a/yarn.lock b/yarn.lock index 31605da55c..eba0b75900 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8194,10 +8194,10 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -sst-cdk@1.61.0-rc.22: - version "1.61.0-rc.22" - resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.61.0-rc.22.tgz#3c99bd506502897d5ce6f9d29003c5511e215ae6" - integrity sha512-ycu3pwJs4VC6C/PFqljUjpvRDdFQduZEgoIzAwduMqzoRUmepJGi3yMZO4BxNhx+cuA4EaIXpArscYlNsaTo0g== +sst-cdk@1.61.0-rc.23: + version "1.61.0-rc.23" + resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.61.0-rc.23.tgz#dcc02f72cab7af4b31b6de0e7fb4421d8ceb2f9e" + integrity sha512-KpYtAy7YG7y29ULCuwwPIKQCHTGnTPMQdS6IZhH3nibkWyrQGvdHzUbtkMf/0UzxB8Ri0Vesalx5chOqZs9mIA== dependencies: "@aws-cdk/cloud-assembly-schema" "1.61.0" "@aws-cdk/cloudformation-diff" "1.61.0" From d92fa75b6b4dd1f468cf79728d509fe3556d3e37 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 30 Sep 2020 17:55:36 -0400 Subject: [PATCH 110/481] v0.3.1 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lerna.json b/lerna.json index b6e425731b..cb027cca86 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.3.0" + "version": "0.3.1" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 7e8b767b4a..27965af14d 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.3.0", + "version": "0.3.1", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "node scripts/config/sync-cdk-version.js", @@ -41,8 +41,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^0.3.0", - "@serverless-stack/resources": "^0.3.0", + "@serverless-stack/core": "^0.3.1", + "@serverless-stack/resources": "^0.3.1", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/core/package.json b/packages/core/package.json index 1b65503d4e..1e38b52fd2 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.3.0", + "version": "0.3.1", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 96b917031d..e721ce152b 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.3.0", + "version": "0.3.1", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 2c785243bd..a3f2ee2de5 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.3.0", + "version": "0.3.1", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 1ebbd0e40966b4820610cae5b17afadd2c060465 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 1 Oct 2020 00:42:27 -0400 Subject: [PATCH 111/481] Fix stack outputs and exports format --- packages/core/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/index.js b/packages/core/index.js index 2f4dc4c1d3..c9d4eccdfc 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -265,8 +265,8 @@ async function parallelDeploy(cdkOptions, stackStates) { isDeployed = true; } - const outputs = []; - const exports = []; + const outputs = {}; + const exports = {}; (Outputs || []).forEach(({ OutputKey, OutputValue, ExportName }) => { OutputKey && (outputs[OutputKey] = OutputValue); ExportName && (exports[ExportName] = OutputValue); From b586a45bbf934c4bf3be78d712b7c14d9889ab26 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 1 Oct 2020 00:51:11 -0400 Subject: [PATCH 112/481] Return stack outputs and exports only if stack is done deploying --- packages/core/index.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/core/index.js b/packages/core/index.js index c9d4eccdfc..5fbd43a7c5 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -267,10 +267,12 @@ async function parallelDeploy(cdkOptions, stackStates) { const outputs = {}; const exports = {}; - (Outputs || []).forEach(({ OutputKey, OutputValue, ExportName }) => { - OutputKey && (outputs[OutputKey] = OutputValue); - ExportName && (exports[ExportName] = OutputValue); - }); + if (isDeployed) { + (Outputs || []).forEach(({ OutputKey, OutputValue, ExportName }) => { + OutputKey && (outputs[OutputKey] = OutputValue); + ExportName && (exports[ExportName] = OutputValue); + }); + } return { isDeployed, outputs, exports }; }; From 3ef0653df14c9181102910a70e0871050e4f8914 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 1 Oct 2020 01:21:38 -0400 Subject: [PATCH 113/481] Update stack outputs and exports format in cli --- packages/cli/scripts/deploy.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/cli/scripts/deploy.js b/packages/cli/scripts/deploy.js index 72fa2bb8ef..221badb7e1 100644 --- a/packages/cli/scripts/deploy.js +++ b/packages/cli/scripts/deploy.js @@ -45,14 +45,14 @@ module.exports = async function (argv, config, cliInfo) { if (Object.keys(outputs || {}).length > 0) { logger.log(" Outputs:"); Object.keys(outputs).forEach((name) => - logger.log(` - ${name}: ${outputs[name]}`) + logger.log(` ${name}: ${outputs[name]}`) ); } if (Object.keys(exports || {}).length > 0) { logger.log(" Exports:"); Object.keys(exports).forEach((name) => - logger.log(` - ${name}: ${exports[name]}`) + logger.log(` ${name}: ${exports[name]}`) ); } }); From 188341991afe327785565c309318e0db530aded1 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 1 Oct 2020 03:55:57 -0400 Subject: [PATCH 114/481] Fix deploy not respect dependencies ordering --- packages/core/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/index.js b/packages/core/index.js index 5fbd43a7c5..3560022505 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -408,7 +408,7 @@ async function parallelDeploy(cdkOptions, stackStates) { stackStates = stacks.map(({ name, dependencies }) => ({ name, status: STACK_DEPLOY_STATUS_PENDING, - dependencies: dependencies.map((d) => d.id), + dependencies, account: undefined, region: undefined, startedAt: undefined, From cbd982edd77056f4cd1e4e583ac7c18da52c337d Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 1 Oct 2020 04:18:48 -0400 Subject: [PATCH 115/481] Updated sst-cdk version --- packages/core/index.js | 5 +---- packages/core/package.json | 2 +- yarn.lock | 8 ++++---- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/packages/core/index.js b/packages/core/index.js index 3560022505..f585850399 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -55,10 +55,7 @@ async function parallelDeploy(cdkOptions, stackStates) { region, outputs, exports, - } = await cdk.deploy({ - ...cdkOptions, - stackName: stackState.name, - }); + } = await cdk.deploy({ ...cdkOptions, stackName: stackState.name }); stackState.startedAt = Date.now(); stackState.account = account; stackState.region = region; diff --git a/packages/core/package.json b/packages/core/package.json index 1b65503d4e..48ea4a07b0 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -20,6 +20,6 @@ "dependencies": { "aws-sdk": "^2.761.0", "chalk": "^4.1.0", - "sst-cdk": "1.61.0-rc.23" + "sst-cdk": "1.61.0-rc.24" } } diff --git a/yarn.lock b/yarn.lock index eba0b75900..efe51a19b1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8194,10 +8194,10 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -sst-cdk@1.61.0-rc.23: - version "1.61.0-rc.23" - resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.61.0-rc.23.tgz#dcc02f72cab7af4b31b6de0e7fb4421d8ceb2f9e" - integrity sha512-KpYtAy7YG7y29ULCuwwPIKQCHTGnTPMQdS6IZhH3nibkWyrQGvdHzUbtkMf/0UzxB8Ri0Vesalx5chOqZs9mIA== +sst-cdk@1.61.0-rc.24: + version "1.61.0-rc.24" + resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.61.0-rc.24.tgz#4abb9b9fa7a4e9ff205bcb625360facdb3e43d9d" + integrity sha512-B7WZLjsAuAcZF8ennRPZKKJaHnCgtl4pTOrt3ItV43ohyJQ0fdF4R/hlIGxoJaW4395hhwmF0rpQq0TqEDoQng== dependencies: "@aws-cdk/cloud-assembly-schema" "1.61.0" "@aws-cdk/cloudformation-diff" "1.61.0" From 02fe179c126854546ceb40e11056d5fe56538c0f Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 1 Oct 2020 13:53:07 -0400 Subject: [PATCH 116/481] v0.3.2 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lerna.json b/lerna.json index cb027cca86..19387b90af 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.3.1" + "version": "0.3.2" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 27965af14d..cf75499459 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.3.1", + "version": "0.3.2", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "node scripts/config/sync-cdk-version.js", @@ -41,8 +41,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^0.3.1", - "@serverless-stack/resources": "^0.3.1", + "@serverless-stack/core": "^0.3.2", + "@serverless-stack/resources": "^0.3.2", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/core/package.json b/packages/core/package.json index ee747d6c79..2ba29940fd 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.3.1", + "version": "0.3.2", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index e721ce152b..5d3f729637 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.3.1", + "version": "0.3.2", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index a3f2ee2de5..962bfd8693 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.3.1", + "version": "0.3.2", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From d4695590475345649576f61a1d2f77ebda5a4066 Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 2 Oct 2020 18:11:31 -0400 Subject: [PATCH 117/481] Handle deploy and remove single stacks --- packages/core/index.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/core/index.js b/packages/core/index.js index f585850399..6043dda14c 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -401,7 +401,13 @@ async function parallelDeploy(cdkOptions, stackStates) { // Case: initial call if (!stackStates) { - const { stacks } = await cdk.list(cdkOptions); + let stacks; + if (cdkOptions.stackName) { + stacks = [{ name: cdkOptions.stackName, dependencies: [] }]; + } else { + const listRet = await cdk.list(cdkOptions); + stacks = listRet.stacks; + } stackStates = stacks.map(({ name, dependencies }) => ({ name, status: STACK_DEPLOY_STATUS_PENDING, @@ -741,7 +747,13 @@ async function parallelDestroy(cdkOptions, stackStates) { // Case: initial call if (!stackStates) { - const { stacks } = await cdk.list(cdkOptions); + let stacks; + if (cdkOptions.stackName) { + stacks = [{ name: cdkOptions.stackName, dependencies: [] }]; + } else { + const listRet = await cdk.list(cdkOptions); + stacks = listRet.stacks; + } // Generate reverse dependency map const reverseDependencyMapping = {}; From 45d957853be0017ac84bbe315ef1d132b2648fb3 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 2 Oct 2020 20:53:59 -0400 Subject: [PATCH 118/481] v0.4.0 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lerna.json b/lerna.json index 19387b90af..693194d20e 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.3.2" + "version": "0.4.0" } diff --git a/packages/cli/package.json b/packages/cli/package.json index cf75499459..16760a0ebd 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.3.2", + "version": "0.4.0", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "node scripts/config/sync-cdk-version.js", @@ -41,8 +41,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^0.3.2", - "@serverless-stack/resources": "^0.3.2", + "@serverless-stack/core": "^0.4.0", + "@serverless-stack/resources": "^0.4.0", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/core/package.json b/packages/core/package.json index 2ba29940fd..d6221067be 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.3.2", + "version": "0.4.0", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 5d3f729637..9bff100334 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.3.2", + "version": "0.4.0", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 962bfd8693..1ed53c4fe8 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.3.2", + "version": "0.4.0", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From a835061efd3a1168581c395fa8ccf7ee2f02fc2b Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 2 Oct 2020 21:34:30 -0400 Subject: [PATCH 119/481] Fix export name shows undefined if stack not changed --- packages/core/package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index d6221067be..9727276ad9 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -20,6 +20,6 @@ "dependencies": { "aws-sdk": "^2.761.0", "chalk": "^4.1.0", - "sst-cdk": "1.61.0-rc.24" + "sst-cdk": "1.61.0-rc.25" } } diff --git a/yarn.lock b/yarn.lock index efe51a19b1..90131f9195 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8194,10 +8194,10 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -sst-cdk@1.61.0-rc.24: - version "1.61.0-rc.24" - resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.61.0-rc.24.tgz#4abb9b9fa7a4e9ff205bcb625360facdb3e43d9d" - integrity sha512-B7WZLjsAuAcZF8ennRPZKKJaHnCgtl4pTOrt3ItV43ohyJQ0fdF4R/hlIGxoJaW4395hhwmF0rpQq0TqEDoQng== +sst-cdk@1.61.0-rc.25: + version "1.61.0-rc.25" + resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.61.0-rc.25.tgz#f9066a46ebec56f32165890eba99eaf558cf61d8" + integrity sha512-Vc9pRpTIV0xUBZHK6Qj3Xrb/LCPiXw2nVJaWZPiSiUc2mi566KsxpmWFvjqrYXKFesRSwUoIVgfEwop12CiLzw== dependencies: "@aws-cdk/cloud-assembly-schema" "1.61.0" "@aws-cdk/cloudformation-diff" "1.61.0" From fd5fd56fe3e835ba601025b2f7d439716169db8f Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 2 Oct 2020 21:40:26 -0400 Subject: [PATCH 120/481] v0.4.1 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lerna.json b/lerna.json index 693194d20e..f0f1597748 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.4.0" + "version": "0.4.1" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 16760a0ebd..e6f57b3173 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.4.0", + "version": "0.4.1", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "node scripts/config/sync-cdk-version.js", @@ -41,8 +41,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^0.4.0", - "@serverless-stack/resources": "^0.4.0", + "@serverless-stack/core": "^0.4.1", + "@serverless-stack/resources": "^0.4.1", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/core/package.json b/packages/core/package.json index 9727276ad9..25ddb64e14 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.4.0", + "version": "0.4.1", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 9bff100334..b721ab9772 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.4.0", + "version": "0.4.1", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 1ed53c4fe8..2b908608c6 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.4.0", + "version": "0.4.1", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 9da991170d0b4bf2550822c9e25375d7495eedae Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 9 Oct 2020 13:32:02 -0400 Subject: [PATCH 121/481] Adding link to sample repo and chapter --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 16434f1ec8..b7913718b8 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.com/cdk/) that: -- Allows you to use **CDK with Serverless Framework** +- Allows you to use [**CDK with Serverless Framework**](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html) - And speeds up your deployments by **deploying all your stacks concurrently**! ## Quick Start @@ -27,6 +27,7 @@ $ npx sst deploy - [Package scripts](#package-scripts) - [Testing your app](#testing-your-app) - [Linting your code](#linting-your-code) +- [Example Project](#example-project) - [Migrating From CDK](#migrating-from-cdk) - [Known Issues](#known-issues) - [Future Roadmap](#future-roadmap) @@ -68,7 +69,7 @@ And use CDK for the rest of your AWS infrastructure: $ AWS_PROFILE=production npx sst deploy --stage prod --region us-east-1 ``` -Making it really easy for you to start using CDK to create your AWS infrastructure. While still continuing to use Serverless Framework for your Lambda functions. +Making it really easy for you to start using CDK to create your AWS infrastructure. While still continuing to use Serverless Framework for your Lambda functions. You can [read more about this here](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html). ### Speeding up CDK @@ -275,6 +276,10 @@ $ yarn test Your code is automatically linted when building or deploying. If you'd like to customize the lint rules, add a `.eslintrc.json` in your project root. If you'd like to turn off linting, add `*` to an `.eslintignore` file in your project root. +## Example Project + +We use SST as a part of the [Serverless Stack guide](https://serverless-stack.com). We build a [simple notes app](http://demo2.serverless-stack.com/) in the guide and the backend for it is created using Serverless Framework and CDK with SST. You can check out the repo here — [serverless-stack-demo-api](https://github.com/AnomalyInnovations/serverless-stack-demo-api). + ## Migrating From CDK It's fairly simple to move a CDK app to SST. There are a couple of small differences between the two: From 5b88cec7f4fc7c6f06f0dff5fce2029419acff3d Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 14 Oct 2020 21:04:01 -0400 Subject: [PATCH 122/481] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b7913718b8..97ee97031b 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ Finally, AWS CDK deployments are currently very slow. CDK deploys your CloudForm ### And more -As a bonus, SST also supports deploying your CloudFormation stacks asynchronously. So you don't have to waste CI build minutes waiting for CloudFormation to complete. [Seed](https://seed.run) natively supports concurrent asynchronous deployments for your SST apps. Making it really fast and virtually free to deploy! +As a bonus, SST also supports deploying your CloudFormation stacks asynchronously. So you don't have to waste CI build minutes waiting for CloudFormation to complete. [Seed](https://seed.run) natively supports concurrent asynchronous deployments for your SST apps. Making it 5x faster than other CI services. And SST deployments on Seed are free! SST also comes with a few other niceties: From 21583808abce174f84a4d1ef4c08f9471953eae9 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 19 Oct 2020 17:40:38 -0400 Subject: [PATCH 123/481] Adding support for testPathIgnorePatterns in package.json --- .../cli/scripts/config/createJestConfig.js | 1 + packages/cli/test/jest-ts/jest-ts.test.js | 3 +- packages/cli/test/jest-ts/package.json | 7 +- .../test/jest-ts/test/sample-stack.test.ts | 10 +- packages/cli/test/jest-ts/yarn.lock | 159 ++++++++++-------- packages/cli/test/jest/jest.test.js | 2 +- packages/cli/test/jest/package.json | 7 +- packages/cli/test/jest/test/dynamodb.test.js | 5 +- 8 files changed, 118 insertions(+), 76 deletions(-) diff --git a/packages/cli/scripts/config/createJestConfig.js b/packages/cli/scripts/config/createJestConfig.js index d0105223db..4721173f3c 100644 --- a/packages/cli/scripts/config/createJestConfig.js +++ b/packages/cli/scripts/config/createJestConfig.js @@ -53,6 +53,7 @@ module.exports = (resolve, rootDir) => { "resetModules", "setupFilesAfterEnv", "snapshotSerializers", + "testPathIgnorePatterns", "testResultsProcessor", "transform", "transformIgnorePatterns", diff --git a/packages/cli/test/jest-ts/jest-ts.test.js b/packages/cli/test/jest-ts/jest-ts.test.js index 43927bc0dc..27e95e8ca5 100644 --- a/packages/cli/test/jest-ts/jest-ts.test.js +++ b/packages/cli/test/jest-ts/jest-ts.test.js @@ -6,5 +6,6 @@ const { runJestCommand } = require("../helpers"); test("jest-ts", async () => { const result = await runJestCommand(__dirname); - expect(result).not.toContain("JESTTESTFAILED-----"); + expect(result).toContain("JESTTESTSUCCESS1-----"); + expect(result).toContain("JESTTESTSUCCESS2-----"); }); diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index 4bb43d86a3..1a8e6d624c 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -5,7 +5,12 @@ "main": "index.js", "scripts": { "build": "../../bin/scripts.js build", - "test": "../../bin/scripts.js test --testPathIgnorePatterns=\"./jest-ts.test.js\"" + "test": "../../bin/scripts.js test" + }, + "jest": { + "testPathIgnorePatterns": [ + "./jest-ts.test.js" + ] }, "keywords": [], "author": "", diff --git a/packages/cli/test/jest-ts/test/sample-stack.test.ts b/packages/cli/test/jest-ts/test/sample-stack.test.ts index 6bae84dab0..20e17659af 100644 --- a/packages/cli/test/jest-ts/test/sample-stack.test.ts +++ b/packages/cli/test/jest-ts/test/sample-stack.test.ts @@ -13,9 +13,10 @@ test("SQS Queue Created", () => { VisibilityTimeout: 300, }) ); - } catch (e) { // Print out a test string that parent jest.test.js can catch - console.log("JESTTESTFAILED-----"); + console.log("JESTTESTSUCCESS1-----"); + } catch (e) { + // Ignore any errors } }); @@ -26,8 +27,9 @@ test("SNS Topic Created", () => { // THEN try { expectCDK(stack).to(haveResource("AWS::SNS::Topic")); - } catch (e) { // Print out a test string that parent jest.test.js can catch - console.log("JESTTESTFAILED-----"); + console.log("JESTTESTSUCCESS2-----"); + } catch (e) { + // Ignore any errors } }); diff --git a/packages/cli/test/jest-ts/yarn.lock b/packages/cli/test/jest-ts/yarn.lock index 7ac73c4d04..e59b6b93ae 100644 --- a/packages/cli/test/jest-ts/yarn.lock +++ b/packages/cli/test/jest-ts/yarn.lock @@ -252,14 +252,6 @@ dependencies: md5 "^2.3.0" -"@aws-cdk/cloud-assembly-schema@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.55.0.tgz#75884413f1400a3c117204a9b04ecbaa2bd4c637" - integrity sha512-C4nBSUWAfKK7C43FN4a4F4cTygMJqmfFPGgV8CSmCjisp3MWTbFrr1vQ04rTmLn1c/87x/iHnIh31dulg7ueig== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - "@aws-cdk/cloud-assembly-schema@1.61.0": version "1.61.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" @@ -280,17 +272,6 @@ string-width "^4.2.0" table "^5.4.6" -"@aws-cdk/core@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.55.0.tgz#de1b5be019c5bbd9bf9d3b60c0b5e66b92af197d" - integrity sha512-+lwV7E0ba7ePH6NF8fOtc8/w31dYgBqt9BWRQkCk13/5K8eW0cSli7INeeiyIBnNgG5DIux8dxIV4ofqgmQl1g== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - "@aws-cdk/cx-api" "1.55.0" - constructs "^3.0.2" - fs-extra "^9.0.1" - minimatch "^3.0.4" - "@aws-cdk/core@1.61.0": version "1.61.0" resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" @@ -315,14 +296,6 @@ "@aws-cdk/core" "1.61.0" constructs "^3.0.4" -"@aws-cdk/cx-api@1.55.0": - version "1.55.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.55.0.tgz#bff3cc9cc861c17064a898291b521f1231245d44" - integrity sha512-dAfuDwUcCFOh6lWRwH8kjP8zcWiQtGnSvXsFqoOuiwYvmybNavSGXPP68e9ExTzX8IfbAACpGgkzh4AFtKLARQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.55.0" - semver "^7.2.2" - "@aws-cdk/cx-api@1.61.0": version "1.61.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" @@ -1420,37 +1393,8 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@serverless-stack/aws-cdk@1.61.0-rc.4": - version "1.61.0-rc.4" - resolved "https://registry.yarnpkg.com/@serverless-stack/aws-cdk/-/aws-cdk-1.61.0-rc.4.tgz#aef7932ed099e74c041103d1ba181bd77ae68e8f" - integrity sha512-CMNB7M+5Ks/oSbwgm/ikrhaVeq4JxD4dHz3GKahUGIz4ulIw/YEvXe3paNa/ODCYDNcgsZQMnHXjZI8fLfZnaA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cloudformation-diff" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - archiver "^4.0.2" - aws-sdk "^2.739.0" - camelcase "^6.0.0" - cdk-assets "1.61.0" - colors "^1.4.0" - decamelize "^4.0.0" - fs-extra "^9.0.1" - glob "^7.1.6" - json-diff "^0.5.4" - minimatch ">=3.0" - promptly "^3.0.3" - proxy-agent "^3.1.1" - semver "^7.2.2" - source-map-support "^0.5.19" - table "^5.4.6" - uuid "^8.3.0" - wrap-ansi "^7.0.0" - yaml "^1.10.0" - yargs "^15.4.1" - "@serverless-stack/cli@../../../cli": - version "0.1.3" + version "0.4.1" dependencies: "@babel/cli" "^7.10.5" "@babel/core" "^7.10.5" @@ -1458,12 +1402,13 @@ "@babel/eslint-plugin" "^7.11.3" "@babel/plugin-proposal-class-properties" "^7.10.4" "@babel/preset-env" "^7.10.4" - "@serverless-stack/aws-cdk" "1.61.0-rc.4" - "@serverless-stack/resources" "^0.1.3" + "@serverless-stack/core" "^0.4.1" + "@serverless-stack/resources" "^0.4.1" "@types/jest" "^26.0.7" "@types/node" "^14.0.27" "@typescript-eslint/eslint-plugin" "^3.9.1" "@typescript-eslint/parser" "^3.9.1" + aws-cdk "1.61.0" chalk "^4.1.0" core-js "^3.6.5" cross-spawn "^7.0.3" @@ -1475,17 +1420,26 @@ typescript "^3.9.7" yargs "^15.4.1" +"@serverless-stack/core@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@serverless-stack/core/-/core-0.4.1.tgz#c3099627eb891696cd0321a28ed8df3df995c2f7" + integrity sha512-Fkqv/prAwNHG4Plf/HcL0VV1S5i0/q3z1K4LevS0PObM6S90jczLWLYoWmq0OGIffX/ARvHJWAxNT0F5BMCJ5A== + dependencies: + aws-sdk "^2.761.0" + chalk "^4.1.0" + sst-cdk "1.61.0-rc.25" + "@serverless-stack/resources@../../../resources": - version "0.1.3" + version "0.4.1" dependencies: "@aws-cdk/core" "1.61.0" -"@serverless-stack/resources@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@serverless-stack/resources/-/resources-0.1.3.tgz#8a2caf287e79b3b14e071beaa8ccdfb423b9e840" - integrity sha512-ix6r+XyhTatY/sLrz9TR2Rn+orhQkR8ky13RtNhGKR1U5KXfFg0XwoGnvGP9gviIRakWMEAoO0857+w37+z9mw== +"@serverless-stack/resources@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@serverless-stack/resources/-/resources-0.4.1.tgz#fb5f2a4459b2139661b19e750e8af2bf214d3b41" + integrity sha512-oDPFeyUo3KQN/x7FuEcmIoDDJmJnXId18g/1EkdG8nCWnbGF28tAsfT95Qv6qLjxBPlgV5rKW6b6z6djJkYwKQ== dependencies: - "@aws-cdk/core" "1.55.0" + "@aws-cdk/core" "1.61.0" "@sinonjs/commons@^1.7.0": version "1.8.1" @@ -1899,6 +1853,35 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +aws-cdk@1.61.0: + version "1.61.0" + resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-1.61.0.tgz#b1e1a55c64dff5825b3961b56c2b5fcb7ac472e9" + integrity sha512-deLtRq3DkiUB/5EN8ZCWLdXY0Uhm+fUvA1WSO8lzEhl71SmD7dyEHqvl7k96WPrIhUkS0nbiz6a+WC0QadIthg== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cloudformation-diff" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + "@aws-cdk/region-info" "1.61.0" + archiver "^4.0.2" + aws-sdk "^2.739.0" + camelcase "^6.0.0" + cdk-assets "1.61.0" + colors "^1.4.0" + decamelize "^4.0.0" + fs-extra "^9.0.1" + glob "^7.1.6" + json-diff "^0.5.4" + minimatch ">=3.0" + promptly "^3.0.3" + proxy-agent "^3.1.1" + semver "^7.2.2" + source-map-support "^0.5.19" + table "^5.4.6" + uuid "^8.3.0" + wrap-ansi "^7.0.0" + yaml "^1.10.0" + yargs "^15.4.1" + aws-sdk@^2.739.0: version "2.743.0" resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.743.0.tgz#c72a471c80cf88d78d854c780de861fb8475ae34" @@ -1914,6 +1897,21 @@ aws-sdk@^2.739.0: uuid "3.3.2" xml2js "0.4.19" +aws-sdk@^2.761.0: + version "2.774.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.774.0.tgz#1d9512ae42f0cfb9b98d0d6e0d7df7634cf4e680" + integrity sha512-3a/fM1E3nCPwT4AVbysOWCMmsu/TOdJDD3urjywWE/qO1JShxRwLSdRLD1xRkacR9JcnydfkmdU0qk+VsM3nqg== + dependencies: + buffer "4.9.2" + events "1.1.1" + ieee754 "1.1.13" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "3.3.2" + xml2js "0.4.19" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -2357,7 +2355,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.2, constructs@^3.0.4: +constructs@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== @@ -5432,6 +5430,35 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +sst-cdk@1.61.0-rc.25: + version "1.61.0-rc.25" + resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.61.0-rc.25.tgz#f9066a46ebec56f32165890eba99eaf558cf61d8" + integrity sha512-Vc9pRpTIV0xUBZHK6Qj3Xrb/LCPiXw2nVJaWZPiSiUc2mi566KsxpmWFvjqrYXKFesRSwUoIVgfEwop12CiLzw== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cloudformation-diff" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + "@aws-cdk/region-info" "1.61.0" + archiver "^4.0.2" + aws-sdk "^2.739.0" + camelcase "^6.0.0" + cdk-assets "1.61.0" + colors "^1.4.0" + decamelize "^4.0.0" + fs-extra "^9.0.1" + glob "^7.1.6" + json-diff "^0.5.4" + minimatch ">=3.0" + promptly "^3.0.3" + proxy-agent "^3.1.1" + semver "^7.2.2" + source-map-support "^0.5.19" + table "^5.4.6" + uuid "^8.3.0" + wrap-ansi "^7.0.0" + yaml "^1.10.0" + yargs "^15.4.1" + stack-utils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593" diff --git a/packages/cli/test/jest/jest.test.js b/packages/cli/test/jest/jest.test.js index 3ba14e3996..77faf9f28d 100644 --- a/packages/cli/test/jest/jest.test.js +++ b/packages/cli/test/jest/jest.test.js @@ -6,5 +6,5 @@ const { runJestCommand } = require("../helpers"); test("jest", async () => { const result = await runJestCommand(__dirname); - expect(result).not.toContain("JESTTESTFAILED-----"); + expect(result).toContain("JESTTESTSUCCESS-----"); }); diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index f9adc08a2c..93351e19a8 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -4,7 +4,12 @@ "description": "", "main": "index.js", "scripts": { - "test": "../../bin/scripts.js test --testPathIgnorePatterns=\"./jest.test.js\"" + "test": "../../bin/scripts.js test" + }, + "jest": { + "testPathIgnorePatterns": [ + "./jest.test.js" + ] }, "keywords": [], "author": "", diff --git a/packages/cli/test/jest/test/dynamodb.test.js b/packages/cli/test/jest/test/dynamodb.test.js index 0915f59baa..6a343b444f 100644 --- a/packages/cli/test/jest/test/dynamodb.test.js +++ b/packages/cli/test/jest/test/dynamodb.test.js @@ -13,8 +13,9 @@ test("DynamoDB Stack", () => { BillingMode: "PAY_PER_REQUEST", }) ); - } catch (e) { // Print out a test string that parent jest.test.js can catch - console.log("JESTTESTFAILED-----"); + console.log("JESTTESTSUCCESS-----"); + } catch (e) { + // Ignore any errors } }); From 8ec0829268dd9dd9c98601f8e421f36477de7393 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 19 Oct 2020 17:51:02 -0400 Subject: [PATCH 124/481] v0.4.2 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lerna.json b/lerna.json index f0f1597748..83c8ab8554 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.4.1" + "version": "0.4.2" } diff --git a/packages/cli/package.json b/packages/cli/package.json index e6f57b3173..0dbf591888 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.4.1", + "version": "0.4.2", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "node scripts/config/sync-cdk-version.js", @@ -41,8 +41,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^0.4.1", - "@serverless-stack/resources": "^0.4.1", + "@serverless-stack/core": "^0.4.2", + "@serverless-stack/resources": "^0.4.2", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/core/package.json b/packages/core/package.json index 25ddb64e14..f388479723 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.4.1", + "version": "0.4.2", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index b721ab9772..ab33d81d0e 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.4.1", + "version": "0.4.2", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 2b908608c6..0658bb789e 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.4.1", + "version": "0.4.2", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 61a4562ce99cecff5445b814ade7434422bb1465 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 26 Oct 2020 21:31:27 -0400 Subject: [PATCH 125/481] Handling nested ESLint setups in Yarn workspace fixes #11 --- packages/cli/scripts/config/cdkHelpers.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index f473dbac1c..256430aa23 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -128,6 +128,10 @@ function lint() { ".js,.ts", "--fix", "lib/**", + // Handling nested ESLint projects in Yarn Workspaces + // https://github.com/serverless-stack/serverless-stack/issues/11 + "--resolve-plugins-relative-to", + ".", ], { stdio: "inherit", cwd: paths.appPath } ); From d104bf81fd8db15f2089e692aae516dd76e1abb8 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 26 Oct 2020 21:40:43 -0400 Subject: [PATCH 126/481] v0.4.3 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lerna.json b/lerna.json index 83c8ab8554..722219b6b6 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.4.2" + "version": "0.4.3" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 0dbf591888..92271ae66a 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.4.2", + "version": "0.4.3", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "node scripts/config/sync-cdk-version.js", @@ -41,8 +41,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^0.4.2", - "@serverless-stack/resources": "^0.4.2", + "@serverless-stack/core": "^0.4.3", + "@serverless-stack/resources": "^0.4.3", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/core/package.json b/packages/core/package.json index f388479723..a91040f75a 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.4.2", + "version": "0.4.3", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index ab33d81d0e..88f241a87e 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.4.2", + "version": "0.4.3", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 0658bb789e..7c2c7a37f5 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.4.2", + "version": "0.4.3", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 1520480af852bb448414114a6649eae1583e8f28 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 18 Nov 2020 22:27:47 -0500 Subject: [PATCH 127/481] Setting up start command --- packages/cli/bin/scripts.js | 4 + packages/cli/scripts/config/paths.js | 2 +- packages/cli/scripts/start.js | 62 +++++++++++ packages/cli/scripts/wrapper/bootstrap.js | 127 ++++++++++++++++++++++ packages/cli/test/start/lib/index.js | 1 + packages/cli/test/start/package.json | 13 +++ packages/cli/test/start/src/hello.js | 10 ++ packages/cli/test/start/sst.json | 6 + packages/cli/test/start/yarn.lock | 4 + 9 files changed, 228 insertions(+), 1 deletion(-) create mode 100644 packages/cli/scripts/start.js create mode 100644 packages/cli/scripts/wrapper/bootstrap.js create mode 100644 packages/cli/test/start/lib/index.js create mode 100644 packages/cli/test/start/package.json create mode 100644 packages/cli/test/start/src/hello.js create mode 100644 packages/cli/test/start/sst.json create mode 100644 packages/cli/test/start/yarn.lock diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index 93743a73f2..3a9f24dece 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -37,6 +37,7 @@ const cmd = { s: "sst", cdk: "cdk", test: "test", + start: "start", build: "build", deploy: "deploy", remove: "remove", @@ -44,6 +45,7 @@ const cmd = { }; const internals = { + [cmd.start]: require("../scripts/start"), [cmd.build]: require("../scripts/build"), [cmd.deploy]: require("../scripts/deploy"), [cmd.remove]: require("../scripts/remove"), @@ -136,6 +138,7 @@ const argv = yargs .command(cmd.test, "Run your tests") .command(cmd.cdk, "Access the forked AWS CDK CLI") + .command(cmd.start, "Work on your SST app locally") .example([ [`$0 ${cmd.build}`, "Build using defaults"], @@ -189,6 +192,7 @@ switch (script) { Promise.resolve(internals[script](argv, config, cliInfo)); break; } + case cmd.start: case cmd.addCdk: { const cliInfo = getCliInfo(); diff --git a/packages/cli/scripts/config/paths.js b/packages/cli/scripts/config/paths.js index b0835374db..4a7a591a56 100644 --- a/packages/cli/scripts/config/paths.js +++ b/packages/cli/scripts/config/paths.js @@ -3,8 +3,8 @@ */ "use strict"; -const path = require("path"); const fs = require("fs"); +const path = require("path"); // Make sure any symlinks in the project folder are resolved: // https://github.com/facebook/create-react-app/issues/637 diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js new file mode 100644 index 0000000000..8a1a6dc7d1 --- /dev/null +++ b/packages/cli/scripts/start.js @@ -0,0 +1,62 @@ +"use strict"; + +const spawn = require("cross-spawn"); + +const paths = require("./config/paths"); + +const handler = "hello.handler"; + +const context = { + awsRequestId: "123", + invokedFunctionArn: "123", + logGroupName: "123", + logStreamName: "123", + functionName: "123", + functionVersion: "123", + memoryLimitInMB: 1024, + // Get calculated timeout + timeoutMs: 3000, + //getRemainingTimeInMillis: () => deadlineMs - Date.now(), + callbackWaitsForEmptyEventLoop: true, + clientContext: {}, + identity: {}, +}; + +const event = { + body: "Hello World", +}; + +// From Lambda /var/runtime/bootstrap +// https://link.medium.com/7ir11kKjwbb +const newSpace = Math.floor(context.memoryLimitInMB / 10); +const semiSpace = Math.floor(newSpace / 2); +const oldSpace = context.memoryLimitInMB - newSpace; + +module.exports = async function () { + const lambda = spawn( + "node", + [ + `--max-old-space-size=${oldSpace}`, + `--max-semi-space-size=${semiSpace}`, + "--max-http-header-size=81920", // HTTP header limit of 8KB + require.resolve("../scripts/wrapper/bootstrap.js"), + JSON.stringify(event), + JSON.stringify(context), + "./src", // Local path to the Lambda functions + handler, + ], + { stdio: ["inherit", "inherit", "inherit", "ipc"], cwd: paths.appPath } + ); + + lambda.on("message", function (response) { + switch (response.type) { + case "success": + console.log(response.data); + break; + case "failure": + console.error(response.data); + break; + default: + } + }); +}; diff --git a/packages/cli/scripts/wrapper/bootstrap.js b/packages/cli/scripts/wrapper/bootstrap.js new file mode 100644 index 0000000000..99a2848386 --- /dev/null +++ b/packages/cli/scripts/wrapper/bootstrap.js @@ -0,0 +1,127 @@ +/** + * Based on https://github.com/lambci/node-custom-lambda/blob/0e3f2133bb2b667fa29aa4adfc30fab22166f6e4/v10.x/bootstrap.js + */ +"use strict"; + +process.on("unhandledRejection", (err) => { + throw err; +}); + +const path = require("path"); + +const CALLBACK_USED = Symbol("CALLBACK_USED"); + +const argv = process.argv.slice(2); + +const EVENT = JSON.parse(argv[0]); +const CONTEXT = JSON.parse(argv[1]); +const TASK_ROOT = argv[2]; +const HANDLER = argv[3]; + +start(); + +async function start() { + let handler; + + try { + handler = getHandler(); + } catch (e) { + invokeError(e); + return process.exit(1); + } + + tryProcessEvents(handler); +} + +async function tryProcessEvents(handler) { + try { + await processEvents(handler); + } catch (e) { + invokeError(e); + return process.exit(1); + } +} + +async function processEvents(handler) { + const timer = getTimer(); + + let result; + + try { + result = await handler(EVENT, CONTEXT); + invokeResponse(result); + } catch (e) { + invokeError(e); + } + + clearTimeout(timer); +} + +function getHandler() { + const appParts = HANDLER.split("."); + + if (appParts.length !== 2) { + throw new Error(`Bad handler ${HANDLER}`); + } + + const [modulePath, handlerName] = appParts; + + const app = require(path.resolve(TASK_ROOT, modulePath)); + + const userHandler = app[handlerName]; + + if (userHandler == null) { + throw new Error( + `Handler '${handlerName}' missing on module '${modulePath}'` + ); + } else if (typeof userHandler !== "function") { + throw new Error( + `Handler '${handlerName}' from '${modulePath}' is not a function` + ); + } + + return (event, context) => + new Promise((resolve, reject) => { + context.succeed = resolve; + context.fail = reject; + context.done = (err, data) => (err ? reject(err) : resolve(data)); + + const callback = (err, data) => { + context[CALLBACK_USED] = true; + context.done(err, data); + }; + + let result; + try { + result = userHandler(event, context, callback); + } catch (e) { + return reject(e); + } + if (result != null && typeof result.then === "function") { + result.then(resolve, reject); + } + }); +} + +function getTimer() { + return setTimeout(function () { + invokeError({ name: "timeout", message: "Lambda timed out", stack: null }); + process.exit(1); + }, CONTEXT.timeoutMs); +} + +function invokeResponse(result) { + process.send({ type: "success", data: result === undefined ? null : result }); +} + +function invokeError(err) { + const { name, message, stack } = err; + process.send({ + type: "failure", + data: { + errorType: name || typeof err, + errorMessage: message || "" + err, + stackTrace: (stack || "").split("\n").slice(1), + }, + }); +} diff --git a/packages/cli/test/start/lib/index.js b/packages/cli/test/start/lib/index.js new file mode 100644 index 0000000000..c857a02040 --- /dev/null +++ b/packages/cli/test/start/lib/index.js @@ -0,0 +1 @@ +export default function main() {} diff --git a/packages/cli/test/start/package.json b/packages/cli/test/start/package.json new file mode 100644 index 0000000000..5fa7326891 --- /dev/null +++ b/packages/cli/test/start/package.json @@ -0,0 +1,13 @@ +{ + "name": "start", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "../../bin/scripts.js start" + }, + "keywords": [], + "author": "", + "dependencies": {}, + "license": "ISC" +} diff --git a/packages/cli/test/start/src/hello.js b/packages/cli/test/start/src/hello.js new file mode 100644 index 0000000000..24436e6bca --- /dev/null +++ b/packages/cli/test/start/src/hello.js @@ -0,0 +1,10 @@ +exports.handler = function (event, context, callback) { + console.log("Calling from inside the function"); + setTimeout(() => { + callback(null, { + statusCode: 200, + headers: { "Content-Type": "text/plain" }, + body: "Hello World with event: " + JSON.stringify(event), + }); + }, 2000); +}; diff --git a/packages/cli/test/start/sst.json b/packages/cli/test/start/sst.json new file mode 100644 index 0000000000..550b59d5db --- /dev/null +++ b/packages/cli/test/start/sst.json @@ -0,0 +1,6 @@ +{ + "type": "@serverless-stack/resources", + "name": "cdknotes", + "stage": "prod", + "region": "us-east-1" +} diff --git a/packages/cli/test/start/yarn.lock b/packages/cli/test/start/yarn.lock new file mode 100644 index 0000000000..fb57ccd13a --- /dev/null +++ b/packages/cli/test/start/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + From 6ac7709a8a43e4b09adc75f5eb74b38ef2409e0e Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 20 Nov 2020 20:17:39 -0500 Subject: [PATCH 128/481] Handling wait for event loop and timeouts --- packages/cli/scripts/start.js | 40 ++++++++++++++++++++--- packages/cli/scripts/wrapper/bootstrap.js | 29 ++++------------ packages/cli/test/start/src/hello.js | 3 ++ 3 files changed, 45 insertions(+), 27 deletions(-) diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 8a1a6dc7d1..b72f1154f5 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -15,7 +15,7 @@ const context = { functionVersion: "123", memoryLimitInMB: 1024, // Get calculated timeout - timeoutMs: 3000, + timeoutInMs: 4000, //getRemainingTimeInMillis: () => deadlineMs - Date.now(), callbackWaitsForEmptyEventLoop: true, clientContext: {}, @@ -32,7 +32,28 @@ const newSpace = Math.floor(context.memoryLimitInMB / 10); const semiSpace = Math.floor(newSpace / 2); const oldSpace = context.memoryLimitInMB - newSpace; +function setTimer(lambda, handleResponse) { + return setTimeout(function () { + handleResponse({ + type: "failure", + data: { + stack: null, + errorType: "timeout", + errorMessage: "Lambda timed out", + }, + }); + + try { + process.kill(lambda.pid, "SIGKILL"); + } catch (e) { + console.log(e); + console.log("Cannot kill timed out Lambda"); + } + }, context.timeoutInMs); +} + module.exports = async function () { + let lambdaResponse; const lambda = spawn( "node", [ @@ -47,16 +68,25 @@ module.exports = async function () { ], { stdio: ["inherit", "inherit", "inherit", "ipc"], cwd: paths.appPath } ); + const timer = setTimer(lambda, handleResponse); - lambda.on("message", function (response) { + function handleResponse(response) { switch (response.type) { case "success": - console.log(response.data); - break; case "failure": - console.error(response.data); + lambdaResponse = response; break; default: } + } + + function returnLambdaResponse() { + console.log("Done", lambdaResponse); + } + + lambda.on("message", handleResponse); + lambda.on("exit", function () { + returnLambdaResponse(); + clearTimeout(timer); }); }; diff --git a/packages/cli/scripts/wrapper/bootstrap.js b/packages/cli/scripts/wrapper/bootstrap.js index 99a2848386..2476da8d4c 100644 --- a/packages/cli/scripts/wrapper/bootstrap.js +++ b/packages/cli/scripts/wrapper/bootstrap.js @@ -30,31 +30,23 @@ async function start() { return process.exit(1); } - tryProcessEvents(handler); + processEvents(handler); } -async function tryProcessEvents(handler) { +async function processEvents(handler) { try { - await processEvents(handler); + const result = await handler(EVENT, CONTEXT); + invokeResponse(result); } catch (e) { invokeError(e); return process.exit(1); } -} -async function processEvents(handler) { - const timer = getTimer(); - - let result; + const callbackUsed = CONTEXT[CALLBACK_USED]; - try { - result = await handler(EVENT, CONTEXT); - invokeResponse(result); - } catch (e) { - invokeError(e); + if (callbackUsed && CONTEXT.callbackWaitsForEmptyEventLoop === false) { + process.exit(0); } - - clearTimeout(timer); } function getHandler() { @@ -103,13 +95,6 @@ function getHandler() { }); } -function getTimer() { - return setTimeout(function () { - invokeError({ name: "timeout", message: "Lambda timed out", stack: null }); - process.exit(1); - }, CONTEXT.timeoutMs); -} - function invokeResponse(result) { process.send({ type: "success", data: result === undefined ? null : result }); } diff --git a/packages/cli/test/start/src/hello.js b/packages/cli/test/start/src/hello.js index 24436e6bca..ed8c2e23f2 100644 --- a/packages/cli/test/start/src/hello.js +++ b/packages/cli/test/start/src/hello.js @@ -1,4 +1,7 @@ +setTimeout(() => console.log("still here"), 3000); + exports.handler = function (event, context, callback) { + context.callbackWaitsForEmptyEventLoop = true; console.log("Calling from inside the function"); setTimeout(() => { callback(null, { From 8f62e97582a8198225c77c9fb0465baa4bb29437 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 23 Nov 2020 03:48:00 -0500 Subject: [PATCH 129/481] Implement `sst start` --- .gitignore | 3 + packages/cli/bin/scripts.js | 2 +- packages/cli/package-lock.json | 10843 ++++++++++++++++ packages/cli/package.json | 6 + packages/cli/scripts/debug/bin/index.js | 9 + packages/cli/scripts/debug/cdk.json | 7 + .../cli/scripts/debug/lambda/wsConnect.js | 3 + .../cli/scripts/debug/lambda/wsDefault.js | 77 + .../cli/scripts/debug/lambda/wsDisconnect.js | 3 + packages/cli/scripts/debug/lib/debug-stack.js | 107 + packages/cli/scripts/start.js | 196 +- packages/cli/test/start/lib/index.js | 40 +- packages/cli/test/start/package.json | 12 +- packages/cli/test/start/yarn.lock | 608 + packages/resources/lambda/lambdaStub.js | 86 + packages/resources/lambda/package-lock.json | 13 + packages/resources/lambda/package.json | 15 + packages/resources/package.json | 4 +- packages/resources/src/Function.ts | 49 + packages/resources/src/NodejsFunction.ts | 41 + packages/resources/src/index.ts | 2 + 21 files changed, 12058 insertions(+), 68 deletions(-) create mode 100644 packages/cli/package-lock.json create mode 100644 packages/cli/scripts/debug/bin/index.js create mode 100644 packages/cli/scripts/debug/cdk.json create mode 100644 packages/cli/scripts/debug/lambda/wsConnect.js create mode 100644 packages/cli/scripts/debug/lambda/wsDefault.js create mode 100644 packages/cli/scripts/debug/lambda/wsDisconnect.js create mode 100644 packages/cli/scripts/debug/lib/debug-stack.js create mode 100644 packages/resources/lambda/lambdaStub.js create mode 100644 packages/resources/lambda/package-lock.json create mode 100644 packages/resources/lambda/package.json create mode 100644 packages/resources/src/Function.ts create mode 100644 packages/resources/src/NodejsFunction.ts diff --git a/.gitignore b/.gitignore index ceef839c7f..a635185461 100644 --- a/.gitignore +++ b/.gitignore @@ -103,5 +103,8 @@ dist # TernJS port file .tern-port +# CDK +cdk.out + # Vim .*.sw* diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index 3a9f24dece..ec9860efb9 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -181,6 +181,7 @@ if (argv.verbose) { } switch (script) { + case cmd.start: case cmd.build: case cmd.deploy: case cmd.remove: { @@ -192,7 +193,6 @@ switch (script) { Promise.resolve(internals[script](argv, config, cliInfo)); break; } - case cmd.start: case cmd.addCdk: { const cliInfo = getCliInfo(); diff --git a/packages/cli/package-lock.json b/packages/cli/package-lock.json new file mode 100644 index 0000000000..732d14bb42 --- /dev/null +++ b/packages/cli/package-lock.json @@ -0,0 +1,10843 @@ +{ + "name": "@serverless-stack/cli", + "version": "0.4.3", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@aws-cdk/assets": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.61.0.tgz", + "integrity": "sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA==", + "requires": { + "@aws-cdk/core": "1.61.0", + "@aws-cdk/cx-api": "1.61.0", + "constructs": "^3.0.4" + } + }, + "@aws-cdk/aws-apigatewayv2": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.73.0.tgz", + "integrity": "sha512-+++K1KADMSFGgvOaj3OwiVcNEYWUR878rqH50EDEf/UxaYky3eD0Sg255sGQWrjbi3bb60lYdzVFDjADHHnEtw==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.73.0", + "@aws-cdk/aws-cloudwatch": "1.73.0", + "@aws-cdk/aws-ec2": "1.73.0", + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + }, + "dependencies": { + "@aws-cdk/assets": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.73.0.tgz", + "integrity": "sha512-fAdRAWn/IWbalMZva86Q4BimYrwipSoqPzyC5d6fwxNmJU/QiFLMpILanS1T9a0a+yjqAqk+8pAXn44lZIOlPQ==", + "requires": { + "@aws-cdk/core": "1.73.0", + "@aws-cdk/cx-api": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-cloudwatch": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.73.0.tgz", + "integrity": "sha512-H6MQVtJfKAJyE6DRHe71ivFu9OjhH32VtsJUZ1xuQ/pyeoQlOQ6fj0FIjz4ObG3qDBq72SBfrbPAQ3q+2g3HfA==", + "requires": { + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-ec2": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.73.0.tgz", + "integrity": "sha512-XjGcHaVlaJNorXv8qrRt7k8rPLE8yV1SAJWHY/SIf7NzIg9Y6lFV0eVkBU5RINfuD9GIW8YbgtLGE5ZpfZ5YkA==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.73.0", + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/aws-kms": "1.73.0", + "@aws-cdk/aws-logs": "1.73.0", + "@aws-cdk/aws-s3": "1.73.0", + "@aws-cdk/aws-s3-assets": "1.73.0", + "@aws-cdk/aws-ssm": "1.73.0", + "@aws-cdk/cloud-assembly-schema": "1.73.0", + "@aws-cdk/core": "1.73.0", + "@aws-cdk/cx-api": "1.73.0", + "@aws-cdk/region-info": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-events": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.73.0.tgz", + "integrity": "sha512-CvOAIAt00xCWKC2U96NAgA8xIkzrNkwalCXk3RIRjz9xEVge5w3lQ7Hy6lSSbhyTfxQV01bppZO2ExaeAKOjOg==", + "requires": { + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-iam": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.73.0.tgz", + "integrity": "sha512-o2pdkEEdwluZegLqlbhfK0zgIbezvKDf5UfwBKloeFSDcGOZAaqF25OPfrTowXkIakHbw2wMswbUlmUgYdmNFg==", + "requires": { + "@aws-cdk/core": "1.73.0", + "@aws-cdk/region-info": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-kms": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.73.0.tgz", + "integrity": "sha512-4aQRGBktM1IYqM0Qa/yio1/sjNuokMdLQNrjTVxyX+AZE2/zPqARe+Gm6sFpPJ9Is8oy0YzecP80QZSCnWpCnQ==", + "requires": { + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-logs": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.73.0.tgz", + "integrity": "sha512-pn/JUpz49nmP81rOW66S36HbBF+RCKDWyN+rQ671zr62T9EPJuRLWxbdahcnAN1eqyCsZEs9PpCvTnacj9ue7w==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.73.0", + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/aws-s3-assets": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-s3": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.73.0.tgz", + "integrity": "sha512-n0PuTBhqFxRfvGHhWk54R2hfS24b5DFkqP2PvTIwRFCBqmSUnRLF8I+GZ4c6RNxfVfDSzQBcGvfuCuNTL1KZLQ==", + "requires": { + "@aws-cdk/aws-events": "1.73.0", + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/aws-kms": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-s3-assets": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.73.0.tgz", + "integrity": "sha512-CvxEIBOOj7tYMrMimPSsbtQ4OOurhUIiNIhM38gisTXYgSchKTeDzKJAbalfYOZSNJNEx1wMNL/+oKV/gDtrHQ==", + "requires": { + "@aws-cdk/assets": "1.73.0", + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/aws-kms": "1.73.0", + "@aws-cdk/aws-s3": "1.73.0", + "@aws-cdk/core": "1.73.0", + "@aws-cdk/cx-api": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-ssm": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.73.0.tgz", + "integrity": "sha512-6fobpaL7hh0My/aypd7DHQ+sLuPcb7Taj8ngjmoh8H0muiAkfj4O0CjN3cd+kCYRr8T4zRh546ypvFfsc9WEHQ==", + "requires": { + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/aws-kms": "1.73.0", + "@aws-cdk/cloud-assembly-schema": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/cloud-assembly-schema": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.73.0.tgz", + "integrity": "sha512-3m5nJDLSApAuUMra2WrQF7GHt6xgxqFET91WShtKtj48brZk4MBJ3dLre2LjDVsmMMOVdd6FpjY7tE5C1v9Hyw==", + "requires": { + "jsonschema": "^1.4.0", + "semver": "^7.3.2" + }, + "dependencies": { + "jsonschema": { + "version": "1.4.0", + "bundled": true + }, + "semver": { + "version": "7.3.2", + "bundled": true + } + } + }, + "@aws-cdk/core": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.73.0.tgz", + "integrity": "sha512-CTmUXo0hAH78/uvzfmgW4gQKLnusMxULIEUjd0wnfs/6/zoB6n2DP+lmkr/7Vp4aIG9nNNirThdHesidlx79eA==", + "requires": { + "@aws-cdk/cloud-assembly-schema": "1.73.0", + "@aws-cdk/cx-api": "1.73.0", + "@aws-cdk/region-info": "1.73.0", + "@balena/dockerignore": "^1.0.2", + "constructs": "^3.2.0", + "fs-extra": "^9.0.1", + "ignore": "^5.1.8", + "minimatch": "^3.0.4" + }, + "dependencies": { + "@balena/dockerignore": { + "version": "1.0.2", + "bundled": true + }, + "at-least-node": { + "version": "1.0.0", + "bundled": true + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "fs-extra": { + "version": "9.0.1", + "bundled": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "bundled": true + }, + "ignore": { + "version": "5.1.8", + "bundled": true + }, + "jsonfile": { + "version": "6.0.1", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "universalify": { + "version": "1.0.0", + "bundled": true + } + } + }, + "@aws-cdk/cx-api": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.73.0.tgz", + "integrity": "sha512-HlBpbIGu71xXdfJ1De1/HOMK5LWzKK9J7REho0oncpAO9KDxAbk+1aOFUZJVEgTsJSUUzLMSIUtDIo+ev70HGA==", + "requires": { + "@aws-cdk/cloud-assembly-schema": "1.73.0", + "semver": "^7.3.2" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "bundled": true + } + } + }, + "@aws-cdk/region-info": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.73.0.tgz", + "integrity": "sha512-jWfx5mY3BaCVeFnbdUxrDTczVTuwShdtu3WkV2vL+W3VnUMzLPKbCPiGY8GutSBlWvoFpubsbVqx8Kw61pRgdQ==" + } + } + }, + "@aws-cdk/aws-applicationautoscaling": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz", + "integrity": "sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw==", + "requires": { + "@aws-cdk/aws-autoscaling-common": "1.61.0", + "@aws-cdk/aws-cloudwatch": "1.61.0", + "@aws-cdk/aws-iam": "1.61.0", + "@aws-cdk/core": "1.61.0", + "constructs": "^3.0.4" + } + }, + "@aws-cdk/aws-autoscaling-common": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz", + "integrity": "sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ==", + "requires": { + "@aws-cdk/aws-iam": "1.61.0", + "@aws-cdk/core": "1.61.0", + "constructs": "^3.0.4" + } + }, + "@aws-cdk/aws-certificatemanager": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.73.0.tgz", + "integrity": "sha512-r5talegg1Z79Fo289JRgm1u6SV16I7nO4AZEmmbceDByDnXiRcnroi0o9fZTVWNUYuIwrpY4ZWR2UTKY71xYTg==", + "requires": { + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/aws-lambda": "1.73.0", + "@aws-cdk/aws-route53": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + }, + "dependencies": { + "@aws-cdk/assets": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.73.0.tgz", + "integrity": "sha512-fAdRAWn/IWbalMZva86Q4BimYrwipSoqPzyC5d6fwxNmJU/QiFLMpILanS1T9a0a+yjqAqk+8pAXn44lZIOlPQ==", + "requires": { + "@aws-cdk/core": "1.73.0", + "@aws-cdk/cx-api": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-applicationautoscaling": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.73.0.tgz", + "integrity": "sha512-ROJPuj+PyrYa7/P6JoTrsFs8WMxKra1yuXZJ3r0iTrnAgCDAVCVpzmiF3Uwqw6rip1o63ZLT3fxxMeJBb2wL7Q==", + "requires": { + "@aws-cdk/aws-autoscaling-common": "1.73.0", + "@aws-cdk/aws-cloudwatch": "1.73.0", + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-autoscaling-common": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.73.0.tgz", + "integrity": "sha512-AJf9F9X/ktSMLj/NaX0ccPXr7VlDR6CTycpEgJZU4qbXqIW/LhIDkAhH15CNV38WYQnVDkVSQgDNfCtGaeHTqA==", + "requires": { + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-cloudwatch": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.73.0.tgz", + "integrity": "sha512-H6MQVtJfKAJyE6DRHe71ivFu9OjhH32VtsJUZ1xuQ/pyeoQlOQ6fj0FIjz4ObG3qDBq72SBfrbPAQ3q+2g3HfA==", + "requires": { + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-codeguruprofiler": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.73.0.tgz", + "integrity": "sha512-WcJjCT+4zd3v4E1nWUagpHKWVIafM4vMe+4DAcBXZbhqXww1yyXUxf1A08uc7zQGko3hvIoHp41maAiT5G6/nw==", + "requires": { + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-ec2": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.73.0.tgz", + "integrity": "sha512-XjGcHaVlaJNorXv8qrRt7k8rPLE8yV1SAJWHY/SIf7NzIg9Y6lFV0eVkBU5RINfuD9GIW8YbgtLGE5ZpfZ5YkA==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.73.0", + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/aws-kms": "1.73.0", + "@aws-cdk/aws-logs": "1.73.0", + "@aws-cdk/aws-s3": "1.73.0", + "@aws-cdk/aws-s3-assets": "1.73.0", + "@aws-cdk/aws-ssm": "1.73.0", + "@aws-cdk/cloud-assembly-schema": "1.73.0", + "@aws-cdk/core": "1.73.0", + "@aws-cdk/cx-api": "1.73.0", + "@aws-cdk/region-info": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-efs": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-efs/-/aws-efs-1.73.0.tgz", + "integrity": "sha512-sWUU+nhJ78T5tElLy7BqUrlXj4kGv43nrkWE5+jbTaLRFEpJPM6fMuWfzcJGfkqpbppjc/aySyCPbvEcWb7bDQ==", + "requires": { + "@aws-cdk/aws-ec2": "1.73.0", + "@aws-cdk/aws-kms": "1.73.0", + "@aws-cdk/cloud-assembly-schema": "1.73.0", + "@aws-cdk/core": "1.73.0", + "@aws-cdk/cx-api": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-events": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.73.0.tgz", + "integrity": "sha512-CvOAIAt00xCWKC2U96NAgA8xIkzrNkwalCXk3RIRjz9xEVge5w3lQ7Hy6lSSbhyTfxQV01bppZO2ExaeAKOjOg==", + "requires": { + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-iam": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.73.0.tgz", + "integrity": "sha512-o2pdkEEdwluZegLqlbhfK0zgIbezvKDf5UfwBKloeFSDcGOZAaqF25OPfrTowXkIakHbw2wMswbUlmUgYdmNFg==", + "requires": { + "@aws-cdk/core": "1.73.0", + "@aws-cdk/region-info": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-kms": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.73.0.tgz", + "integrity": "sha512-4aQRGBktM1IYqM0Qa/yio1/sjNuokMdLQNrjTVxyX+AZE2/zPqARe+Gm6sFpPJ9Is8oy0YzecP80QZSCnWpCnQ==", + "requires": { + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-lambda": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda/-/aws-lambda-1.73.0.tgz", + "integrity": "sha512-ffw/hK1DbbSXklry4sDmJ+c+dX3Zl+I9DsYNjf0h2aonEKZo+g7ItAhVzr5s1kDnKatlEJTNOw1Kdpn20vFZHg==", + "requires": { + "@aws-cdk/aws-applicationautoscaling": "1.73.0", + "@aws-cdk/aws-cloudwatch": "1.73.0", + "@aws-cdk/aws-codeguruprofiler": "1.73.0", + "@aws-cdk/aws-ec2": "1.73.0", + "@aws-cdk/aws-efs": "1.73.0", + "@aws-cdk/aws-events": "1.73.0", + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/aws-logs": "1.73.0", + "@aws-cdk/aws-s3": "1.73.0", + "@aws-cdk/aws-s3-assets": "1.73.0", + "@aws-cdk/aws-sqs": "1.73.0", + "@aws-cdk/core": "1.73.0", + "@aws-cdk/cx-api": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-logs": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.73.0.tgz", + "integrity": "sha512-pn/JUpz49nmP81rOW66S36HbBF+RCKDWyN+rQ671zr62T9EPJuRLWxbdahcnAN1eqyCsZEs9PpCvTnacj9ue7w==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.73.0", + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/aws-s3-assets": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-s3": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.73.0.tgz", + "integrity": "sha512-n0PuTBhqFxRfvGHhWk54R2hfS24b5DFkqP2PvTIwRFCBqmSUnRLF8I+GZ4c6RNxfVfDSzQBcGvfuCuNTL1KZLQ==", + "requires": { + "@aws-cdk/aws-events": "1.73.0", + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/aws-kms": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-s3-assets": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.73.0.tgz", + "integrity": "sha512-CvxEIBOOj7tYMrMimPSsbtQ4OOurhUIiNIhM38gisTXYgSchKTeDzKJAbalfYOZSNJNEx1wMNL/+oKV/gDtrHQ==", + "requires": { + "@aws-cdk/assets": "1.73.0", + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/aws-kms": "1.73.0", + "@aws-cdk/aws-s3": "1.73.0", + "@aws-cdk/core": "1.73.0", + "@aws-cdk/cx-api": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-sqs": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sqs/-/aws-sqs-1.73.0.tgz", + "integrity": "sha512-15stNsRYY165Vvx/io6TnTSMHar10diLa2k2BTiL+PNzl18SfEIOoTy97PCvJp9AK2Ob9dyQwwjsiutTU56IbA==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.73.0", + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/aws-kms": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-ssm": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.73.0.tgz", + "integrity": "sha512-6fobpaL7hh0My/aypd7DHQ+sLuPcb7Taj8ngjmoh8H0muiAkfj4O0CjN3cd+kCYRr8T4zRh546ypvFfsc9WEHQ==", + "requires": { + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/aws-kms": "1.73.0", + "@aws-cdk/cloud-assembly-schema": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/cloud-assembly-schema": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.73.0.tgz", + "integrity": "sha512-3m5nJDLSApAuUMra2WrQF7GHt6xgxqFET91WShtKtj48brZk4MBJ3dLre2LjDVsmMMOVdd6FpjY7tE5C1v9Hyw==", + "requires": { + "jsonschema": "^1.4.0", + "semver": "^7.3.2" + }, + "dependencies": { + "jsonschema": { + "version": "1.4.0", + "bundled": true + }, + "semver": { + "version": "7.3.2", + "bundled": true + } + } + }, + "@aws-cdk/core": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.73.0.tgz", + "integrity": "sha512-CTmUXo0hAH78/uvzfmgW4gQKLnusMxULIEUjd0wnfs/6/zoB6n2DP+lmkr/7Vp4aIG9nNNirThdHesidlx79eA==", + "requires": { + "@aws-cdk/cloud-assembly-schema": "1.73.0", + "@aws-cdk/cx-api": "1.73.0", + "@aws-cdk/region-info": "1.73.0", + "@balena/dockerignore": "^1.0.2", + "constructs": "^3.2.0", + "fs-extra": "^9.0.1", + "ignore": "^5.1.8", + "minimatch": "^3.0.4" + }, + "dependencies": { + "@balena/dockerignore": { + "version": "1.0.2", + "bundled": true + }, + "at-least-node": { + "version": "1.0.0", + "bundled": true + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "fs-extra": { + "version": "9.0.1", + "bundled": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "bundled": true + }, + "ignore": { + "version": "5.1.8", + "bundled": true + }, + "jsonfile": { + "version": "6.0.1", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "universalify": { + "version": "1.0.0", + "bundled": true + } + } + }, + "@aws-cdk/cx-api": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.73.0.tgz", + "integrity": "sha512-HlBpbIGu71xXdfJ1De1/HOMK5LWzKK9J7REho0oncpAO9KDxAbk+1aOFUZJVEgTsJSUUzLMSIUtDIo+ev70HGA==", + "requires": { + "@aws-cdk/cloud-assembly-schema": "1.73.0", + "semver": "^7.3.2" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "bundled": true + } + } + }, + "@aws-cdk/region-info": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.73.0.tgz", + "integrity": "sha512-jWfx5mY3BaCVeFnbdUxrDTczVTuwShdtu3WkV2vL+W3VnUMzLPKbCPiGY8GutSBlWvoFpubsbVqx8Kw61pRgdQ==" + } + } + }, + "@aws-cdk/aws-cloudformation": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.61.0.tgz", + "integrity": "sha512-e7mti0sWR6Sf4tav36bu379kkG5E33VMPLZaT8RkhXkIl97c1OaGHVx5G1Oe5DiHka08c+PA6da8ahkrR1wSkQ==", + "requires": { + "@aws-cdk/aws-iam": "1.61.0", + "@aws-cdk/aws-lambda": "1.61.0", + "@aws-cdk/aws-s3": "1.61.0", + "@aws-cdk/aws-sns": "1.61.0", + "@aws-cdk/core": "1.61.0", + "@aws-cdk/cx-api": "1.61.0", + "constructs": "^3.0.4" + } + }, + "@aws-cdk/aws-cloudwatch": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz", + "integrity": "sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug==", + "requires": { + "@aws-cdk/aws-iam": "1.61.0", + "@aws-cdk/core": "1.61.0", + "constructs": "^3.0.4" + } + }, + "@aws-cdk/aws-codeguruprofiler": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz", + "integrity": "sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w==", + "requires": { + "@aws-cdk/aws-iam": "1.61.0", + "@aws-cdk/core": "1.61.0" + } + }, + "@aws-cdk/aws-dynamodb": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.61.0.tgz", + "integrity": "sha512-Qd87xJNTjCRBQ//H4WA6Lif3VuA9QuyKyterlmTGnmrUsAqubkKtxu/lLvMp0gQb9LzjQ5Hn9238v1s8rDBDlw==", + "requires": { + "@aws-cdk/aws-applicationautoscaling": "1.61.0", + "@aws-cdk/aws-cloudwatch": "1.61.0", + "@aws-cdk/aws-iam": "1.61.0", + "@aws-cdk/aws-kms": "1.61.0", + "@aws-cdk/aws-lambda": "1.61.0", + "@aws-cdk/core": "1.61.0", + "@aws-cdk/custom-resources": "1.61.0", + "constructs": "^3.0.4" + } + }, + "@aws-cdk/aws-ec2": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz", + "integrity": "sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.61.0", + "@aws-cdk/aws-iam": "1.61.0", + "@aws-cdk/aws-kms": "1.61.0", + "@aws-cdk/aws-logs": "1.61.0", + "@aws-cdk/aws-s3": "1.61.0", + "@aws-cdk/aws-s3-assets": "1.61.0", + "@aws-cdk/aws-ssm": "1.61.0", + "@aws-cdk/cloud-assembly-schema": "1.61.0", + "@aws-cdk/core": "1.61.0", + "@aws-cdk/cx-api": "1.61.0", + "@aws-cdk/region-info": "1.61.0", + "constructs": "^3.0.4" + } + }, + "@aws-cdk/aws-efs": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz", + "integrity": "sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg==", + "requires": { + "@aws-cdk/aws-ec2": "1.61.0", + "@aws-cdk/aws-kms": "1.61.0", + "@aws-cdk/cloud-assembly-schema": "1.61.0", + "@aws-cdk/core": "1.61.0", + "@aws-cdk/cx-api": "1.61.0", + "constructs": "^3.0.4" + } + }, + "@aws-cdk/aws-events": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz", + "integrity": "sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw==", + "requires": { + "@aws-cdk/aws-iam": "1.61.0", + "@aws-cdk/core": "1.61.0", + "constructs": "^3.0.4" + } + }, + "@aws-cdk/aws-iam": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz", + "integrity": "sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg==", + "requires": { + "@aws-cdk/core": "1.61.0", + "@aws-cdk/region-info": "1.61.0", + "constructs": "^3.0.4" + } + }, + "@aws-cdk/aws-kms": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz", + "integrity": "sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA==", + "requires": { + "@aws-cdk/aws-iam": "1.61.0", + "@aws-cdk/core": "1.61.0", + "constructs": "^3.0.4" + } + }, + "@aws-cdk/aws-lambda": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz", + "integrity": "sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg==", + "requires": { + "@aws-cdk/aws-applicationautoscaling": "1.61.0", + "@aws-cdk/aws-cloudwatch": "1.61.0", + "@aws-cdk/aws-codeguruprofiler": "1.61.0", + "@aws-cdk/aws-ec2": "1.61.0", + "@aws-cdk/aws-efs": "1.61.0", + "@aws-cdk/aws-events": "1.61.0", + "@aws-cdk/aws-iam": "1.61.0", + "@aws-cdk/aws-logs": "1.61.0", + "@aws-cdk/aws-s3": "1.61.0", + "@aws-cdk/aws-s3-assets": "1.61.0", + "@aws-cdk/aws-sqs": "1.61.0", + "@aws-cdk/core": "1.61.0", + "@aws-cdk/cx-api": "1.61.0", + "constructs": "^3.0.4" + } + }, + "@aws-cdk/aws-logs": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz", + "integrity": "sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.61.0", + "@aws-cdk/aws-iam": "1.61.0", + "@aws-cdk/aws-s3-assets": "1.61.0", + "@aws-cdk/core": "1.61.0", + "constructs": "^3.0.4" + } + }, + "@aws-cdk/aws-route53": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53/-/aws-route53-1.73.0.tgz", + "integrity": "sha512-M3298IkyLELVTlA+2g0EdEV+bYTkC3xzTiHwoqcJeCd8T7IY8E89f73bsweX8k49cu1soPAUvXVJuUfxb6WYEg==", + "requires": { + "@aws-cdk/aws-ec2": "1.73.0", + "@aws-cdk/aws-logs": "1.73.0", + "@aws-cdk/cloud-assembly-schema": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + }, + "dependencies": { + "@aws-cdk/assets": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.73.0.tgz", + "integrity": "sha512-fAdRAWn/IWbalMZva86Q4BimYrwipSoqPzyC5d6fwxNmJU/QiFLMpILanS1T9a0a+yjqAqk+8pAXn44lZIOlPQ==", + "requires": { + "@aws-cdk/core": "1.73.0", + "@aws-cdk/cx-api": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-cloudwatch": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.73.0.tgz", + "integrity": "sha512-H6MQVtJfKAJyE6DRHe71ivFu9OjhH32VtsJUZ1xuQ/pyeoQlOQ6fj0FIjz4ObG3qDBq72SBfrbPAQ3q+2g3HfA==", + "requires": { + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-ec2": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.73.0.tgz", + "integrity": "sha512-XjGcHaVlaJNorXv8qrRt7k8rPLE8yV1SAJWHY/SIf7NzIg9Y6lFV0eVkBU5RINfuD9GIW8YbgtLGE5ZpfZ5YkA==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.73.0", + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/aws-kms": "1.73.0", + "@aws-cdk/aws-logs": "1.73.0", + "@aws-cdk/aws-s3": "1.73.0", + "@aws-cdk/aws-s3-assets": "1.73.0", + "@aws-cdk/aws-ssm": "1.73.0", + "@aws-cdk/cloud-assembly-schema": "1.73.0", + "@aws-cdk/core": "1.73.0", + "@aws-cdk/cx-api": "1.73.0", + "@aws-cdk/region-info": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-events": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.73.0.tgz", + "integrity": "sha512-CvOAIAt00xCWKC2U96NAgA8xIkzrNkwalCXk3RIRjz9xEVge5w3lQ7Hy6lSSbhyTfxQV01bppZO2ExaeAKOjOg==", + "requires": { + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-iam": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.73.0.tgz", + "integrity": "sha512-o2pdkEEdwluZegLqlbhfK0zgIbezvKDf5UfwBKloeFSDcGOZAaqF25OPfrTowXkIakHbw2wMswbUlmUgYdmNFg==", + "requires": { + "@aws-cdk/core": "1.73.0", + "@aws-cdk/region-info": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-kms": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.73.0.tgz", + "integrity": "sha512-4aQRGBktM1IYqM0Qa/yio1/sjNuokMdLQNrjTVxyX+AZE2/zPqARe+Gm6sFpPJ9Is8oy0YzecP80QZSCnWpCnQ==", + "requires": { + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-logs": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.73.0.tgz", + "integrity": "sha512-pn/JUpz49nmP81rOW66S36HbBF+RCKDWyN+rQ671zr62T9EPJuRLWxbdahcnAN1eqyCsZEs9PpCvTnacj9ue7w==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.73.0", + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/aws-s3-assets": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-s3": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.73.0.tgz", + "integrity": "sha512-n0PuTBhqFxRfvGHhWk54R2hfS24b5DFkqP2PvTIwRFCBqmSUnRLF8I+GZ4c6RNxfVfDSzQBcGvfuCuNTL1KZLQ==", + "requires": { + "@aws-cdk/aws-events": "1.73.0", + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/aws-kms": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-s3-assets": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.73.0.tgz", + "integrity": "sha512-CvxEIBOOj7tYMrMimPSsbtQ4OOurhUIiNIhM38gisTXYgSchKTeDzKJAbalfYOZSNJNEx1wMNL/+oKV/gDtrHQ==", + "requires": { + "@aws-cdk/assets": "1.73.0", + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/aws-kms": "1.73.0", + "@aws-cdk/aws-s3": "1.73.0", + "@aws-cdk/core": "1.73.0", + "@aws-cdk/cx-api": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/aws-ssm": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.73.0.tgz", + "integrity": "sha512-6fobpaL7hh0My/aypd7DHQ+sLuPcb7Taj8ngjmoh8H0muiAkfj4O0CjN3cd+kCYRr8T4zRh546ypvFfsc9WEHQ==", + "requires": { + "@aws-cdk/aws-iam": "1.73.0", + "@aws-cdk/aws-kms": "1.73.0", + "@aws-cdk/cloud-assembly-schema": "1.73.0", + "@aws-cdk/core": "1.73.0", + "constructs": "^3.2.0" + } + }, + "@aws-cdk/cloud-assembly-schema": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.73.0.tgz", + "integrity": "sha512-3m5nJDLSApAuUMra2WrQF7GHt6xgxqFET91WShtKtj48brZk4MBJ3dLre2LjDVsmMMOVdd6FpjY7tE5C1v9Hyw==", + "requires": { + "jsonschema": "^1.4.0", + "semver": "^7.3.2" + }, + "dependencies": { + "jsonschema": { + "version": "1.4.0", + "bundled": true + }, + "semver": { + "version": "7.3.2", + "bundled": true + } + } + }, + "@aws-cdk/core": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.73.0.tgz", + "integrity": "sha512-CTmUXo0hAH78/uvzfmgW4gQKLnusMxULIEUjd0wnfs/6/zoB6n2DP+lmkr/7Vp4aIG9nNNirThdHesidlx79eA==", + "requires": { + "@aws-cdk/cloud-assembly-schema": "1.73.0", + "@aws-cdk/cx-api": "1.73.0", + "@aws-cdk/region-info": "1.73.0", + "@balena/dockerignore": "^1.0.2", + "constructs": "^3.2.0", + "fs-extra": "^9.0.1", + "ignore": "^5.1.8", + "minimatch": "^3.0.4" + }, + "dependencies": { + "@balena/dockerignore": { + "version": "1.0.2", + "bundled": true + }, + "at-least-node": { + "version": "1.0.0", + "bundled": true + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "fs-extra": { + "version": "9.0.1", + "bundled": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "bundled": true + }, + "ignore": { + "version": "5.1.8", + "bundled": true + }, + "jsonfile": { + "version": "6.0.1", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "universalify": { + "version": "1.0.0", + "bundled": true + } + } + }, + "@aws-cdk/cx-api": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.73.0.tgz", + "integrity": "sha512-HlBpbIGu71xXdfJ1De1/HOMK5LWzKK9J7REho0oncpAO9KDxAbk+1aOFUZJVEgTsJSUUzLMSIUtDIo+ev70HGA==", + "requires": { + "@aws-cdk/cloud-assembly-schema": "1.73.0", + "semver": "^7.3.2" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "bundled": true + } + } + }, + "@aws-cdk/region-info": { + "version": "1.73.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.73.0.tgz", + "integrity": "sha512-jWfx5mY3BaCVeFnbdUxrDTczVTuwShdtu3WkV2vL+W3VnUMzLPKbCPiGY8GutSBlWvoFpubsbVqx8Kw61pRgdQ==" + } + } + }, + "@aws-cdk/aws-s3": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz", + "integrity": "sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg==", + "requires": { + "@aws-cdk/aws-events": "1.61.0", + "@aws-cdk/aws-iam": "1.61.0", + "@aws-cdk/aws-kms": "1.61.0", + "@aws-cdk/core": "1.61.0", + "constructs": "^3.0.4" + } + }, + "@aws-cdk/aws-s3-assets": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz", + "integrity": "sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA==", + "requires": { + "@aws-cdk/assets": "1.61.0", + "@aws-cdk/aws-iam": "1.61.0", + "@aws-cdk/aws-kms": "1.61.0", + "@aws-cdk/aws-s3": "1.61.0", + "@aws-cdk/core": "1.61.0", + "@aws-cdk/cx-api": "1.61.0", + "constructs": "^3.0.4" + } + }, + "@aws-cdk/aws-sns": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns/-/aws-sns-1.61.0.tgz", + "integrity": "sha512-jmJmZXidJAJTg4lPnxMm26QR3ovMYb/89NBWnIRwGdVGcZ7nrWUkC0JNPQMbP+EvUFdh/9xdFVP4JvvzZzoy0w==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.61.0", + "@aws-cdk/aws-events": "1.61.0", + "@aws-cdk/aws-iam": "1.61.0", + "@aws-cdk/aws-kms": "1.61.0", + "@aws-cdk/aws-sqs": "1.61.0", + "@aws-cdk/core": "1.61.0", + "constructs": "^3.0.4" + } + }, + "@aws-cdk/aws-sqs": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz", + "integrity": "sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.61.0", + "@aws-cdk/aws-iam": "1.61.0", + "@aws-cdk/aws-kms": "1.61.0", + "@aws-cdk/core": "1.61.0", + "constructs": "^3.0.4" + } + }, + "@aws-cdk/aws-ssm": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz", + "integrity": "sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg==", + "requires": { + "@aws-cdk/aws-iam": "1.61.0", + "@aws-cdk/aws-kms": "1.61.0", + "@aws-cdk/cloud-assembly-schema": "1.61.0", + "@aws-cdk/core": "1.61.0", + "constructs": "^3.0.4" + } + }, + "@aws-cdk/cfnspec": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.61.0.tgz", + "integrity": "sha512-Ss5N3unY6iVh9SjYAYvTyvhdb7Kaz6dVFeV8K68UGewiFcHpC5tQi3YmlVBw3HCgKoRt20emiHAfmdfeGO/PUQ==", + "requires": { + "md5": "^2.3.0" + } + }, + "@aws-cdk/cloud-assembly-schema": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz", + "integrity": "sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ==", + "requires": { + "jsonschema": "^1.2.5", + "semver": "^7.2.2" + }, + "dependencies": { + "jsonschema": { + "version": "1.2.6", + "bundled": true + }, + "semver": { + "version": "7.3.2", + "bundled": true + } + } + }, + "@aws-cdk/cloudformation-diff": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.61.0.tgz", + "integrity": "sha512-TrrmywhYkXxGNTmDd1k2biJMVtEvb0QcbZ/IGM6biMXIJ+wsjw/n5snvwciQ8/PHZmsUYk67qulGdso1rpy06Q==", + "requires": { + "@aws-cdk/cfnspec": "1.61.0", + "colors": "^1.4.0", + "diff": "^4.0.2", + "fast-deep-equal": "^3.1.3", + "string-width": "^4.2.0", + "table": "^5.4.6" + } + }, + "@aws-cdk/core": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.61.0.tgz", + "integrity": "sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw==", + "requires": { + "@aws-cdk/cloud-assembly-schema": "1.61.0", + "@aws-cdk/cx-api": "1.61.0", + "constructs": "^3.0.4", + "fs-extra": "^9.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "at-least-node": { + "version": "1.0.0", + "bundled": true + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "fs-extra": { + "version": "9.0.1", + "bundled": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "bundled": true + }, + "jsonfile": { + "version": "6.0.1", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "universalify": { + "version": "1.0.0", + "bundled": true + } + } + }, + "@aws-cdk/custom-resources": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/custom-resources/-/custom-resources-1.61.0.tgz", + "integrity": "sha512-etnHE7A0+J5w1L/m+KxEbPQ7LgtVYvEUV6naqRp5uIsTBaJ9sCQ+q43Y3Fj+g3NMigm8C2fKg5FmiFE6kiymDQ==", + "requires": { + "@aws-cdk/aws-cloudformation": "1.61.0", + "@aws-cdk/aws-iam": "1.61.0", + "@aws-cdk/aws-lambda": "1.61.0", + "@aws-cdk/aws-logs": "1.61.0", + "@aws-cdk/aws-sns": "1.61.0", + "@aws-cdk/core": "1.61.0", + "constructs": "^3.0.4" + } + }, + "@aws-cdk/cx-api": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz", + "integrity": "sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g==", + "requires": { + "@aws-cdk/cloud-assembly-schema": "1.61.0", + "semver": "^7.2.2" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "bundled": true + } + } + }, + "@aws-cdk/region-info": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.61.0.tgz", + "integrity": "sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw==" + }, + "@babel/cli": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.12.7.tgz", + "integrity": "sha512-vE1fidQsaWnQVs4SItkuCdi3+uXqjbhw4cIKp8aawKxOnTnlvxYMzXSeMAqo6alldQRFQYb198YQfW0Sp1jl5Q==", + "requires": { + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents", + "chokidar": "^3.4.0", + "commander": "^4.0.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.0.0", + "lodash": "^4.17.19", + "make-dir": "^2.1.0", + "slash": "^2.0.0", + "source-map": "^0.5.0" + } + }, + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/compat-data": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", + "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==" + }, + "@babel/core": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.7.tgz", + "integrity": "sha512-tRKx9B53kJe8NCGGIxEQb2Bkr0riUIEuN7Sc1fxhs5H8lKlCWUvQCSNMVIB0Meva7hcbCRJ76de15KoLltdoqw==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.7", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@babel/eslint-parser": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.12.1.tgz", + "integrity": "sha512-cc7WQHnHQY3++/bghgbDtPx+5bf6xTsokyGzV6Qzh65NLz/unv+mPQuACkQ9GFhIhcTFv6yqwNaEcfX7EkOEsg==", + "requires": { + "eslint-scope": "5.1.0", + "eslint-visitor-keys": "^1.3.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/eslint-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.12.1.tgz", + "integrity": "sha512-rOjrD5yupTYCO4x0kEbQmi/NsaD+VGOD/9Cvso64WMVPY2y6o5Nvw2sqFWdeSEBdR1Dsa07YjplBs067x5YbXg==", + "requires": { + "eslint-rule-composer": "^0.3.0" + } + }, + "@babel/generator": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", + "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", + "requires": { + "@babel/types": "^7.12.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", + "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", + "requires": { + "@babel/compat-data": "^7.12.5", + "@babel/helper-validator-option": "^7.12.1", + "browserslist": "^4.14.5", + "semver": "^5.5.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", + "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", + "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-map": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", + "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", + "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "requires": { + "@babel/types": "^7.12.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "requires": { + "@babel/types": "^7.12.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz", + "integrity": "sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==", + "requires": { + "@babel/types": "^7.12.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", + "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", + "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/helper-validator-option": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", + "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==" + }, + "@babel/helper-wrap-function": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", + "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helpers": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", + "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "requires": { + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" + } + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/parser": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz", + "integrity": "sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==" + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", + "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", + "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", + "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", + "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", + "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", + "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", + "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", + "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", + "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", + "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", + "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", + "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", + "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", + "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", + "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", + "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", + "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", + "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", + "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", + "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", + "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", + "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", + "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", + "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", + "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", + "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "requires": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", + "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "requires": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.12.1", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", + "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "requires": { + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-identifier": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", + "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "requires": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", + "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", + "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", + "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", + "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", + "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", + "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", + "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", + "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", + "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", + "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", + "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", + "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", + "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", + "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/preset-env": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.7.tgz", + "integrity": "sha512-OnNdfAr1FUQg7ksb7bmbKoby4qFOHw6DKWWUNB9KqnnCldxhxJlP+21dpyaWFmf2h0rTbOkXJtAGevY3XW1eew==", + "requires": { + "@babel/compat-data": "^7.12.7", + "@babel/helper-compilation-targets": "^7.12.5", + "@babel/helper-module-imports": "^7.12.5", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-option": "^7.12.1", + "@babel/plugin-proposal-async-generator-functions": "^7.12.1", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-dynamic-import": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^7.12.1", + "@babel/plugin-proposal-json-strings": "^7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.7", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.12.1", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-async-to-generator": "^7.12.1", + "@babel/plugin-transform-block-scoped-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.1", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-computed-properties": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-dotall-regex": "^7.12.1", + "@babel/plugin-transform-duplicate-keys": "^7.12.1", + "@babel/plugin-transform-exponentiation-operator": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-function-name": "^7.12.1", + "@babel/plugin-transform-literals": "^7.12.1", + "@babel/plugin-transform-member-expression-literals": "^7.12.1", + "@babel/plugin-transform-modules-amd": "^7.12.1", + "@babel/plugin-transform-modules-commonjs": "^7.12.1", + "@babel/plugin-transform-modules-systemjs": "^7.12.1", + "@babel/plugin-transform-modules-umd": "^7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", + "@babel/plugin-transform-new-target": "^7.12.1", + "@babel/plugin-transform-object-super": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-property-literals": "^7.12.1", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/plugin-transform-reserved-words": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.7", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.1", + "@babel/plugin-transform-unicode-escapes": "^7.12.1", + "@babel/plugin-transform-unicode-regex": "^7.12.1", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.12.7", + "core-js-compat": "^3.7.0", + "semver": "^5.5.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" + } + }, + "@babel/traverse": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.7.tgz", + "integrity": "sha512-nMWaqsQEeSvMNypswUDzjqQ+0rR6pqCtoQpsqGJC4/Khm9cISwPTSpai57F6/jDaOoEGz8yE/WxcO3PV6tKSmQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@babel/types": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.7.tgz", + "integrity": "sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@eslint/eslintrc": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz", + "integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==", + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "requires": { + "type-fest": "^0.8.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", + "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==" + }, + "@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + }, + "dependencies": { + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + } + } + }, + "@jest/core": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", + "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", + "requires": { + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "@jest/environment": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", + "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", + "requires": { + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2" + } + }, + "@jest/fake-timers": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", + "requires": { + "@jest/types": "^26.6.2", + "@sinonjs/fake-timers": "^6.0.1", + "@types/node": "*", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + } + }, + "@jest/globals": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", + "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", + "requires": { + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" + } + }, + "@jest/reporters": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", + "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "node-notifier": "^8.0.0", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^7.0.0" + }, + "dependencies": { + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@jest/source-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", + "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "requires": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", + "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", + "requires": { + "@jest/test-result": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" + } + }, + "@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@nicolo-ribaudo/chokidar-2": { + "version": "2.1.8-no-fsevents", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz", + "integrity": "sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w==", + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "@serverless-stack/core": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@serverless-stack/core/-/core-0.4.3.tgz", + "integrity": "sha512-R+iUsOKMYFof+nu4O9VhZrNmiJs3ap6sxuKjXfiUwTI6Iy8wCFE5aIb3Wu0EIBmfeVe7vR4PPH9TYjh3kJ4UdA==", + "requires": { + "aws-sdk": "^2.761.0", + "chalk": "^4.1.0", + "sst-cdk": "1.61.0-rc.25" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + }, + "sst-cdk": { + "version": "1.61.0-rc.25", + "resolved": "https://registry.npmjs.org/sst-cdk/-/sst-cdk-1.61.0-rc.25.tgz", + "integrity": "sha512-Vc9pRpTIV0xUBZHK6Qj3Xrb/LCPiXw2nVJaWZPiSiUc2mi566KsxpmWFvjqrYXKFesRSwUoIVgfEwop12CiLzw==", + "requires": { + "@aws-cdk/cloud-assembly-schema": "1.61.0", + "@aws-cdk/cloudformation-diff": "1.61.0", + "@aws-cdk/cx-api": "1.61.0", + "@aws-cdk/region-info": "1.61.0", + "archiver": "^4.0.2", + "aws-sdk": "^2.739.0", + "camelcase": "^6.0.0", + "cdk-assets": "1.61.0", + "colors": "^1.4.0", + "decamelize": "^4.0.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "json-diff": "^0.5.4", + "minimatch": ">=3.0", + "promptly": "^3.0.3", + "proxy-agent": "^3.1.1", + "semver": "^7.2.2", + "source-map-support": "^0.5.19", + "table": "^5.4.6", + "uuid": "^8.3.0", + "wrap-ansi": "^7.0.0", + "yaml": "^1.10.0", + "yargs": "^15.4.1" + } + }, + "uuid": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==" + } + } + }, + "@serverless-stack/resources": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@serverless-stack/resources/-/resources-0.4.3.tgz", + "integrity": "sha512-cYE2aTHbToj71xZyEbCMH5+5jZEHx2ebL/gA5eEC0JUnlrfCIt6K3buO4nIKvOY01hQD/kS6OLM40x6keV2F3A==", + "requires": { + "@aws-cdk/core": "1.61.0" + } + }, + "@sinonjs/commons": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", + "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==", + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@types/babel__core": { + "version": "7.1.12", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", + "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", + "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.15.tgz", + "integrity": "sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A==", + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==" + }, + "@types/graceful-fs": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz", + "integrity": "sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg==", + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", + "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "26.0.15", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.15.tgz", + "integrity": "sha512-s2VMReFXRg9XXxV+CW9e5Nz8fH2K1aEhwgjUqPPbQd7g95T0laAcvLv032EhFHIa5GHsZ8W7iJEQVaJq6k3Gog==", + "requires": { + "jest-diff": "^26.0.0", + "pretty-format": "^26.0.0" + } + }, + "@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==" + }, + "@types/node": { + "version": "14.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.9.tgz", + "integrity": "sha512-JsoLXFppG62tWTklIoO4knA+oDTYsmqWxHRvd4lpmfQRNhX6osheUOWETP2jMoV/2bEHuMra8Pp3Dmo/stBFcw==" + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" + }, + "@types/prettier": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.5.tgz", + "integrity": "sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ==" + }, + "@types/stack-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", + "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==" + }, + "@types/yargs": { + "version": "15.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.10.tgz", + "integrity": "sha512-z8PNtlhrj7eJNLmrAivM7rjBESG6JwC5xP3RVk12i/8HVP7Xnx/sEmERnRImyEuUaJfO942X0qMOYsoupaJbZQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==" + }, + "@typescript-eslint/eslint-plugin": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz", + "integrity": "sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==", + "requires": { + "@typescript-eslint/experimental-utils": "3.10.1", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", + "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/typescript-estree": "3.10.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz", + "integrity": "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==", + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "3.10.1", + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/typescript-estree": "3.10.1", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/types": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", + "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==" + }, + "@typescript-eslint/typescript-estree": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", + "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", + "requires": { + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/visitor-keys": "3.10.1", + "debug": "^4.1.1", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", + "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==" + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + }, + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "requires": { + "type-fest": "^0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" + } + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "archiver": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-4.0.2.tgz", + "integrity": "sha512-B9IZjlGwaxF33UN4oPbfBkyA4V1SxNLeIhR1qY8sRXSsbdUkEHrrOvwlYFPx+8uQeCe9M+FG6KgO+imDmQ79CQ==", + "requires": { + "archiver-utils": "^2.1.0", + "async": "^3.2.0", + "buffer-crc32": "^0.2.1", + "glob": "^7.1.6", + "readable-stream": "^3.6.0", + "tar-stream": "^2.1.2", + "zip-stream": "^3.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "requires": { + "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" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "requires": { + "tslib": "^2.0.1" + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + }, + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "aws-cdk": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-1.61.0.tgz", + "integrity": "sha512-deLtRq3DkiUB/5EN8ZCWLdXY0Uhm+fUvA1WSO8lzEhl71SmD7dyEHqvl7k96WPrIhUkS0nbiz6a+WC0QadIthg==", + "requires": { + "@aws-cdk/cloud-assembly-schema": "1.61.0", + "@aws-cdk/cloudformation-diff": "1.61.0", + "@aws-cdk/cx-api": "1.61.0", + "@aws-cdk/region-info": "1.61.0", + "archiver": "^4.0.2", + "aws-sdk": "^2.739.0", + "camelcase": "^6.0.0", + "cdk-assets": "1.61.0", + "colors": "^1.4.0", + "decamelize": "^4.0.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "json-diff": "^0.5.4", + "minimatch": ">=3.0", + "promptly": "^3.0.3", + "proxy-agent": "^3.1.1", + "semver": "^7.2.2", + "source-map-support": "^0.5.19", + "table": "^5.4.6", + "uuid": "^8.3.0", + "wrap-ansi": "^7.0.0", + "yaml": "^1.10.0", + "yargs": "^15.4.1" + }, + "dependencies": { + "@aws-cdk/cfnspec": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.61.0.tgz", + "integrity": "sha512-Ss5N3unY6iVh9SjYAYvTyvhdb7Kaz6dVFeV8K68UGewiFcHpC5tQi3YmlVBw3HCgKoRt20emiHAfmdfeGO/PUQ==", + "requires": { + "md5": "^2.3.0" + } + }, + "@aws-cdk/cloud-assembly-schema": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz", + "integrity": "sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ==", + "requires": { + "jsonschema": "^1.2.5", + "semver": "^7.2.2" + } + }, + "@aws-cdk/cloudformation-diff": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.61.0.tgz", + "integrity": "sha512-TrrmywhYkXxGNTmDd1k2biJMVtEvb0QcbZ/IGM6biMXIJ+wsjw/n5snvwciQ8/PHZmsUYk67qulGdso1rpy06Q==", + "requires": { + "@aws-cdk/cfnspec": "1.61.0", + "colors": "^1.4.0", + "diff": "^4.0.2", + "fast-deep-equal": "^3.1.3", + "string-width": "^4.2.0", + "table": "^5.4.6" + } + }, + "@aws-cdk/cx-api": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz", + "integrity": "sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g==", + "requires": { + "@aws-cdk/cloud-assembly-schema": "1.61.0", + "semver": "^7.2.2" + } + }, + "@aws-cdk/region-info": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.61.0.tgz", + "integrity": "sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw==" + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "ajv": { + "version": "6.12.4", + "resolved": "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "archiver": { + "version": "4.0.2", + "resolved": "https://registry.yarnpkg.com/archiver/-/archiver-4.0.2.tgz#43c72865eadb4ddaaa2fb74852527b6a450d927c", + "integrity": "sha512-B9IZjlGwaxF33UN4oPbfBkyA4V1SxNLeIhR1qY8sRXSsbdUkEHrrOvwlYFPx+8uQeCe9M+FG6KgO+imDmQ79CQ==", + "requires": { + "archiver-utils": "^2.1.0", + "async": "^3.2.0", + "buffer-crc32": "^0.2.1", + "glob": "^7.1.6", + "readable-stream": "^3.6.0", + "tar-stream": "^2.1.2", + "zip-stream": "^3.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "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==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "archiver-utils": { + "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==", + "requires": { + "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" + } + }, + "ast-types": { + "version": "0.14.1", + "resolved": "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.1.tgz#0b415043770d7a2cbe4b2770271cbd7d2c9f61b9", + "integrity": "sha512-pfSiukbt23P1qMhNnsozLzhMLBs7EEeXqPyvPmnuZM+RMfwfqwDbSVKYflgGuVI7/VehR4oMks0igzdNAg4VeQ==", + "requires": { + "tslib": "^2.0.1" + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + }, + "async": { + "version": "3.2.0", + "resolved": "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "aws-sdk": { + "version": "2.739.0", + "resolved": "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.739.0.tgz#10b0b29be18c3f0f85ca145cbed8b10793ddc7a7", + "integrity": "sha512-N2XyxY12gs0GJc26O8TmdT30ovEKWsPX787CNW24g0cXTCyc/Teltq0re6yGxfaH0VmN6qONNLr3E59JtJ3neA==", + "requires": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + }, + "dependencies": { + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + } + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "bl": { + "version": "4.0.2", + "resolved": "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a", + "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "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==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "camelcase": { + "version": "6.0.0", + "resolved": "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e", + "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==" + }, + "cdk-assets": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/cdk-assets/-/cdk-assets-1.61.0.tgz", + "integrity": "sha512-nZJNQq6vktb5j8xl+IYLWbN82E6EVANJQIZvOM1H/SLuYsjyuoAlIxBp6e50XqYRApnLYJ7BpDdAnLWOmfY8MQ==", + "requires": { + "@aws-cdk/cloud-assembly-schema": "1.61.0", + "@aws-cdk/cx-api": "1.61.0", + "archiver": "^4.0.2", + "aws-sdk": "^2.739.0", + "glob": "^7.1.6", + "yargs": "^15.4.1" + } + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + }, + "cli-color": { + "version": "0.1.7", + "resolved": "https://registry.yarnpkg.com/cli-color/-/cli-color-0.1.7.tgz#adc3200fa471cc211b0da7f566b71e98b9d67347", + "integrity": "sha1-rcMgD6RxzCEbDaf1ZrcemLnWc0c=", + "requires": { + "es5-ext": "0.8.x" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "compress-commons": { + "version": "3.0.0", + "resolved": "https://registry.yarnpkg.com/compress-commons/-/compress-commons-3.0.0.tgz#833944d84596e537224dd91cf92f5246823d4f1d", + "integrity": "sha512-FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg==", + "requires": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^3.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^2.3.7" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "crc": { + "version": "3.8.0", + "resolved": "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "requires": { + "buffer": "^5.1.0" + } + }, + "crc32-stream": { + "version": "3.0.1", + "resolved": "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85", + "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", + "requires": { + "crc": "^3.4.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "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==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + }, + "data-uri-to-buffer": { + "version": "1.2.0", + "resolved": "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835", + "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==" + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "degenerator": { + "version": "1.0.4", + "resolved": "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095", + "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", + "requires": { + "ast-types": "0.x.x", + "escodegen": "1.x.x", + "esprima": "3.x.x" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, + "difflib": { + "version": "0.2.4", + "resolved": "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e", + "integrity": "sha1-teMDYabbAjF21WKJLbhZQKcY9H4=", + "requires": { + "heap": ">= 0.2.0" + } + }, + "dreamopt": { + "version": "0.6.0", + "resolved": "https://registry.yarnpkg.com/dreamopt/-/dreamopt-0.6.0.tgz#d813ccdac8d39d8ad526775514a13dda664d6b4b", + "integrity": "sha1-2BPM2sjTnYrVJndVFKE92mZNa0s=", + "requires": { + "wordwrap": ">=0.0.2" + } + }, + "emoji-regex": { + "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": { + "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==", + "requires": { + "once": "^1.4.0" + } + }, + "es5-ext": { + "version": "0.8.2", + "resolved": "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab", + "integrity": "sha1-q6jZ4ZQ6iVrJaDemKjmz9V7NlKs=" + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + } + } + }, + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "fast-deep-equal": { + "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-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "fs-constants": { + "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": { + "version": "9.0.1", + "resolved": "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "ftp": { + "version": "0.3.10", + "resolved": "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d", + "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "requires": { + "readable-stream": "1.1.x", + "xregexp": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "get-caller-file": { + "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-uri": { + "version": "2.0.4", + "resolved": "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.4.tgz#d4937ab819e218d4cb5ae18e4f5962bef169cc6a", + "integrity": "sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q==", + "requires": { + "data-uri-to-buffer": "1", + "debug": "2", + "extend": "~3.0.2", + "file-uri-to-path": "1", + "ftp": "~0.3.10", + "readable-stream": "2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "heap": { + "version": "0.2.6", + "resolved": "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac", + "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=" + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "requires": { + "agent-base": "4", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "https-proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81", + "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-fullwidth-code-point": { + "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==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + }, + "json-diff": { + "version": "0.5.4", + "resolved": "https://registry.yarnpkg.com/json-diff/-/json-diff-0.5.4.tgz#7bc8198c441756632aab66c7d9189d365a7a035a", + "integrity": "sha512-q5Xmx9QXNOzOzIlMoYtLrLiu4Jl/Ce2bn0CNcv54PhyH89CI4GWlGVDye8ei2Ijt9R3U+vsWPsXpLUNob8bs8Q==", + "requires": { + "cli-color": "~0.1.6", + "difflib": "~0.2.1", + "dreamopt": "~0.6.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "jsonschema": { + "version": "1.2.6", + "resolved": "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b", + "integrity": "sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA==" + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "requires": { + "readable-stream": "^2.0.5" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "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": { + "version": "0.0.8", + "resolved": "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "netmask": { + "version": "1.0.6", + "resolved": "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35", + "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pac-proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz#115b1e58f92576cac2eba718593ca7b0e37de2ad", + "integrity": "sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ==", + "requires": { + "agent-base": "^4.2.0", + "debug": "^4.1.1", + "get-uri": "^2.0.0", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^3.0.0", + "pac-resolver": "^3.0.0", + "raw-body": "^2.2.0", + "socks-proxy-agent": "^4.0.1" + } + }, + "pac-resolver": { + "version": "3.0.0", + "resolved": "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26", + "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==", + "requires": { + "co": "^4.6.0", + "degenerator": "^1.0.4", + "ip": "^1.1.5", + "netmask": "^1.0.6", + "thunkify": "^2.1.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "process-nextick-args": { + "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==" + }, + "promptly": { + "version": "3.0.3", + "resolved": "https://registry.yarnpkg.com/promptly/-/promptly-3.0.3.tgz#e178f722e73d82c60d019462044bccfdd9872f42", + "integrity": "sha512-EWnzOsxVKUjqKeE6SStH1/cO4+DE44QolaoJ4ojGd9z6pcNkpgfJKr1ncwxrOFHSTIzoudo7jG8y0re30/LO1g==", + "requires": { + "pify": "^3.0.0", + "read": "^1.0.4" + } + }, + "proxy-agent": { + "version": "3.1.1", + "resolved": "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.1.1.tgz#7e04e06bf36afa624a1540be247b47c970bd3014", + "integrity": "sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw==", + "requires": { + "agent-base": "^4.2.0", + "debug": "4", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^3.0.0", + "lru-cache": "^5.1.1", + "pac-proxy-agent": "^3.0.1", + "proxy-from-env": "^1.0.0", + "socks-proxy-agent": "^4.0.1" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "raw-body": { + "version": "2.4.1", + "resolved": "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "requires": { + "mute-stream": "~0.0.4" + } + }, + "readable-stream": { + "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==", + "requires": { + "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" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + } + } + }, + "smart-buffer": { + "version": "4.1.0", + "resolved": "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" + }, + "socks": { + "version": "2.3.3", + "resolved": "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3", + "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", + "requires": { + "ip": "1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "resolved": "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "requires": { + "es6-promisify": "^5.0.0" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "string_decoder": { + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "tar-stream": { + "version": "2.1.3", + "resolved": "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.3.tgz#1e2022559221b7866161660f118255e20fa79e41", + "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", + "requires": { + "bl": "^4.0.1", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "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==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "thunkify": { + "version": "2.1.2", + "resolved": "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d", + "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=" + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tslib": { + "version": "2.0.1", + "resolved": "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e", + "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } + } + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "8.3.0", + "resolved": "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea", + "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==" + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + }, + "dependencies": { + "sax": { + "version": "1.2.4", + "resolved": "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + } + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + }, + "xregexp": { + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943", + "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "yaml": { + "version": "1.10.0", + "resolved": "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "dependencies": { + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + } + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + } + } + }, + "zip-stream": { + "version": "3.0.1", + "resolved": "https://registry.yarnpkg.com/zip-stream/-/zip-stream-3.0.1.tgz#cb8db9d324a76c09f9b76b31a12a48638b0b9708", + "integrity": "sha512-r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ==", + "requires": { + "archiver-utils": "^2.1.0", + "compress-commons": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "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==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + } + } + }, + "aws-sdk": { + "version": "2.797.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.797.0.tgz", + "integrity": "sha512-fFc/2Xr7NkSXlZ9+2rCOFovA9NO1OnIyEaJFVwMM9gaqzucwRAfNNT0Pa1Kua5dhWrcf/mX0Z4mCDnTBf0/5mA==", + "requires": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "babel-jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "requires": { + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "dependencies": { + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^4.0.0", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz", + "integrity": "sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q==", + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", + "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "requires": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "optional": true + }, + "bl": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", + "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "browserslist": { + "version": "4.14.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz", + "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==", + "requires": { + "caniuse-lite": "^1.0.30001157", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.591", + "escalade": "^3.1.1", + "node-releases": "^1.1.66" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" + }, + "caniuse-lite": { + "version": "1.0.30001159", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz", + "integrity": "sha512-w9Ph56jOsS8RL20K9cLND3u/+5WASWdhC/PPrf+V3/HsM3uHOavWOR1Xzakbv4Puo/srmPHudkmCRWM7Aq+/UA==" + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "requires": { + "rsvp": "^4.8.4" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "cdk-assets": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/cdk-assets/-/cdk-assets-1.61.0.tgz", + "integrity": "sha512-nZJNQq6vktb5j8xl+IYLWbN82E6EVANJQIZvOM1H/SLuYsjyuoAlIxBp6e50XqYRApnLYJ7BpDdAnLWOmfY8MQ==", + "requires": { + "@aws-cdk/cloud-assembly-schema": "1.61.0", + "@aws-cdk/cx-api": "1.61.0", + "archiver": "^4.0.2", + "aws-sdk": "^2.739.0", + "glob": "^7.1.6", + "yargs": "^15.4.1" + }, + "dependencies": { + "@aws-cdk/cloud-assembly-schema": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz", + "integrity": "sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ==", + "requires": { + "jsonschema": "^1.2.5", + "semver": "^7.2.2" + } + }, + "@aws-cdk/cx-api": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz", + "integrity": "sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g==", + "requires": { + "@aws-cdk/cloud-assembly-schema": "1.61.0", + "semver": "^7.2.2" + } + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "archiver": { + "version": "4.0.2", + "resolved": "https://registry.yarnpkg.com/archiver/-/archiver-4.0.2.tgz#43c72865eadb4ddaaa2fb74852527b6a450d927c", + "integrity": "sha512-B9IZjlGwaxF33UN4oPbfBkyA4V1SxNLeIhR1qY8sRXSsbdUkEHrrOvwlYFPx+8uQeCe9M+FG6KgO+imDmQ79CQ==", + "requires": { + "archiver-utils": "^2.1.0", + "async": "^3.2.0", + "buffer-crc32": "^0.2.1", + "glob": "^7.1.6", + "readable-stream": "^3.6.0", + "tar-stream": "^2.1.2", + "zip-stream": "^3.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "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==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "archiver-utils": { + "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==", + "requires": { + "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" + } + }, + "async": { + "version": "3.2.0", + "resolved": "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + }, + "aws-sdk": { + "version": "2.739.0", + "resolved": "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.739.0.tgz#10b0b29be18c3f0f85ca145cbed8b10793ddc7a7", + "integrity": "sha512-N2XyxY12gs0GJc26O8TmdT30ovEKWsPX787CNW24g0cXTCyc/Teltq0re6yGxfaH0VmN6qONNLr3E59JtJ3neA==", + "requires": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + }, + "dependencies": { + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + } + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "bl": { + "version": "4.0.2", + "resolved": "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a", + "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "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==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "compress-commons": { + "version": "3.0.0", + "resolved": "https://registry.yarnpkg.com/compress-commons/-/compress-commons-3.0.0.tgz#833944d84596e537224dd91cf92f5246823d4f1d", + "integrity": "sha512-FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg==", + "requires": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^3.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^2.3.7" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "crc": { + "version": "3.8.0", + "resolved": "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "requires": { + "buffer": "^5.1.0" + } + }, + "crc32-stream": { + "version": "3.0.1", + "resolved": "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85", + "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", + "requires": { + "crc": "^3.4.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "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==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "emoji-regex": { + "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": { + "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==", + "requires": { + "once": "^1.4.0" + } + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "fs-constants": { + "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.realpath": { + "version": "1.0.0", + "resolved": "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "get-caller-file": { + "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==" + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "is-fullwidth-code-point": { + "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==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + }, + "jsonschema": { + "version": "1.2.6", + "resolved": "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b", + "integrity": "sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA==" + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "requires": { + "readable-stream": "^2.0.5" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "process-nextick-args": { + "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==" + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "readable-stream": { + "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==", + "requires": { + "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" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "string_decoder": { + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "tar-stream": { + "version": "2.1.3", + "resolved": "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.3.tgz#1e2022559221b7866161660f118255e20fa79e41", + "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", + "requires": { + "bl": "^4.0.1", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "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==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + }, + "dependencies": { + "sax": { + "version": "1.2.4", + "resolved": "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + } + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "zip-stream": { + "version": "3.0.1", + "resolved": "https://registry.yarnpkg.com/zip-stream/-/zip-stream-3.0.1.tgz#cb8db9d324a76c09f9b76b31a12a48638b0b9708", + "integrity": "sha512-r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ==", + "requires": { + "archiver-utils": "^2.1.0", + "compress-commons": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "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==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + } + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + }, + "chokidar": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "optional": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "optional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "optional": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "optional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "optional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "optional": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "optional": true + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "optional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "optional": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "cjs-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", + "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==" + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cli-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-0.1.7.tgz", + "integrity": "sha1-rcMgD6RxzCEbDaf1ZrcemLnWc0c=", + "requires": { + "es5-ext": "0.8.x" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "compress-commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-3.0.0.tgz", + "integrity": "sha512-FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg==", + "requires": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^3.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^2.3.7" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "constructs": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.2.37.tgz", + "integrity": "sha512-Z2dVwVaaw8cDIOeWT5smfgC4BLhkXK7JAfUUDtoB5WhUIIUZpRX+Pd5ZE6UrEuXSQkaJHUT6MVGxgBFZR3DpxQ==" + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "core-js": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.7.0.tgz", + "integrity": "sha512-NwS7fI5M5B85EwpWuIwJN4i/fbisQUwLwiSNUWeXlkAZ0sbBjLEvLvFLf1uzAUV66PcEPt4xCGCmOZSxVf3xzA==" + }, + "core-js-compat": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.7.0.tgz", + "integrity": "sha512-V8yBI3+ZLDVomoWICO6kq/CD28Y4r1M7CWeO4AGpMdMfseu8bkSubBmUPySMGKRTS+su4XQ07zUkAsiu9FCWTg==", + "requires": { + "browserslist": "^4.14.6", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "requires": { + "buffer": "^5.1.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + } + } + }, + "crc32-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", + "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", + "requires": { + "crc": "^3.4.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-uri-to-buffer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz", + "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==" + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + }, + "decimal.js": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", + "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "degenerator": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", + "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", + "requires": { + "ast-types": "0.x.x", + "escodegen": "1.x.x", + "esprima": "3.x.x" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, + "diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==" + }, + "difflib": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", + "integrity": "sha1-teMDYabbAjF21WKJLbhZQKcY9H4=", + "requires": { + "heap": ">= 0.2.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "requires": { + "esutils": "^2.0.2" + } + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" + } + } + }, + "dreamopt": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/dreamopt/-/dreamopt-0.6.0.tgz", + "integrity": "sha1-2BPM2sjTnYrVJndVFKE92mZNa0s=", + "requires": { + "wordwrap": ">=0.0.2" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "electron-to-chromium": { + "version": "1.3.603", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.603.tgz", + "integrity": "sha512-J8OHxOeJkoSLgBXfV9BHgKccgfLMHh+CoeRo6wJsi6m0k3otaxS/5vrHpMNSEYY4MISwewqanPOuhAtuE8riQQ==" + }, + "emittery": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", + "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es5-ext": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.8.2.tgz", + "integrity": "sha1-q6jZ4ZQ6iVrJaDemKjmz9V7NlKs=" + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + } + } + }, + "eslint": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.14.0.tgz", + "integrity": "sha512-5YubdnPXrlrYAFCKybPuHIAH++PINe1pmKNc5wQRB9HSbqIK1ywAnntE3Wwua4giKu0bjligf1gLF6qxMGOYRA==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==" + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "requires": { + "type-fest": "^0.8.1" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "requires": { + "prelude-ls": "^1.2.1" + } + } + } + }, + "eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==" + }, + "eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", + "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + }, + "espree": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + } + }, + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "exec-sh": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", + "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==" + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expect": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", + "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", + "requires": { + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "requires": { + "bser": "2.1.1" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "requires": { + "flat-cache": "^2.0.1" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "optional": true + }, + "ftp": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", + "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "requires": { + "readable-stream": "1.1.x", + "xregexp": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", + "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "get-uri": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.4.tgz", + "integrity": "sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q==", + "requires": { + "data-uri-to-buffer": "1", + "debug": "2", + "extend": "~3.0.2", + "file-uri-to-path": "1", + "ftp": "~0.3.10", + "readable-stream": "2" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "optional": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "heap": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz", + "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=" + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "requires": { + "agent-base": "4", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", + "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "import-fresh": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", + "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", + "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "optional": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-potential-custom-element-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", + "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "optional": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==" + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", + "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", + "requires": { + "@jest/core": "^26.6.3", + "import-local": "^3.0.2", + "jest-cli": "^26.6.3" + }, + "dependencies": { + "jest-cli": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", + "requires": { + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" + } + } + } + }, + "jest-changed-files": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", + "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", + "requires": { + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" + }, + "dependencies": { + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + } + } + }, + "jest-config": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", + "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-docblock": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", + "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", + "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" + } + }, + "jest-environment-jsdom": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", + "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "requires": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" + } + }, + "jest-environment-node": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", + "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "requires": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + } + }, + "jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==" + }, + "jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "requires": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "jest-jasmine2": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", + "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^26.6.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" + } + }, + "jest-leak-detector": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", + "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "requires": { + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-matcher-utils": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-message-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "jest-mock": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" + }, + "jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" + }, + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + }, + "dependencies": { + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + } + } + }, + "jest-resolve-dependencies": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", + "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "requires": { + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" + } + }, + "jest-runner": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", + "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", + "requires": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + } + }, + "jest-runtime": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", + "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", + "requires": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" + }, + "dependencies": { + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + } + } + }, + "jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + } + }, + "jest-snapshot": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + } + } + }, + "jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "requires": { + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" + } + }, + "jest-watcher": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", + "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "requires": { + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + } + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "jsdom": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", + "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", + "requires": { + "abab": "^2.0.3", + "acorn": "^7.1.1", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.2.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.0", + "domexception": "^2.0.1", + "escodegen": "^1.14.1", + "html-encoding-sniffer": "^2.0.1", + "is-potential-custom-element-name": "^1.0.0", + "nwsapi": "^2.2.0", + "parse5": "5.1.1", + "request": "^2.88.2", + "request-promise-native": "^1.0.8", + "saxes": "^5.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0", + "ws": "^7.2.3", + "xml-name-validator": "^3.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-diff": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/json-diff/-/json-diff-0.5.4.tgz", + "integrity": "sha512-q5Xmx9QXNOzOzIlMoYtLrLiu4Jl/Ce2bn0CNcv54PhyH89CI4GWlGVDye8ei2Ijt9R3U+vsWPsXpLUNob8bs8Q==", + "requires": { + "cli-color": "~0.1.6", + "difflib": "~0.2.1", + "dreamopt": "~0.6.0" + } + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "requires": { + "readable-stream": "^2.0.5" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "requires": { + "tmpl": "1.0.x" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + }, + "netmask": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", + "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" + }, + "node-notifier": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.0.tgz", + "integrity": "sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==", + "optional": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "optional": true + }, + "uuid": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==", + "optional": true + } + } + }, + "node-releases": { + "version": "1.1.67", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", + "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + }, + "dependencies": { + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + } + } + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pac-proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz", + "integrity": "sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ==", + "requires": { + "agent-base": "^4.2.0", + "debug": "^4.1.1", + "get-uri": "^2.0.0", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^3.0.0", + "pac-resolver": "^3.0.0", + "raw-body": "^2.2.0", + "socks-proxy-agent": "^4.0.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "pac-resolver": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-3.0.0.tgz", + "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==", + "requires": { + "co": "^4.6.0", + "degenerator": "^1.0.4", + "ip": "^1.1.5", + "netmask": "^1.0.6", + "thunkify": "^2.1.2" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "optional": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "promptly": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/promptly/-/promptly-3.2.0.tgz", + "integrity": "sha512-WnR9obtgW+rG4oUV3hSnNGl1pHm3V1H/qD9iJBumGSmVsSC5HpZOLuu8qdMb6yCItGfT7dcRszejr/5P3i9Pug==", + "requires": { + "read": "^1.0.4" + } + }, + "prompts": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", + "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "proxy-agent": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-3.1.1.tgz", + "integrity": "sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw==", + "requires": { + "agent-base": "^4.2.0", + "debug": "4", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^3.0.0", + "lru-cache": "^5.1.1", + "pac-proxy-agent": "^3.0.1", + "proxy-from-env": "^1.0.0", + "socks-proxy-agent": "^4.0.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "react-is": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", + "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==" + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "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" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" + }, + "regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + }, + "regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "replace-in-file": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-6.1.0.tgz", + "integrity": "sha512-URzjyF3nucvejuY13HFd7O+Q6tFJRLKGHLYVvSh+LiZj3gFXzSYGnIkQflnJJulCAI2/RTZaZkpOtdVdW0EhQA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "glob": "^7.1.6", + "yargs": "^15.3.1" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } + } + }, + "request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "requires": { + "lodash": "^4.17.19" + } + }, + "request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "requires": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + } + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + } + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "requires": { + "xmlchars": "^2.2.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "optional": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + } + } + }, + "smart-buffer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socks": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", + "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", + "requires": { + "ip": "1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "requires": { + "es6-promisify": "^5.0.0" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", + "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + } + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + }, + "string-length": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", + "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", + "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "tar-stream": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", + "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" + }, + "thunkify": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", + "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=" + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "requires": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } + } + }, + "tr46": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", + "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "requires": { + "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } + } + }, + "ts-jest": { + "version": "26.4.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.4.4.tgz", + "integrity": "sha512-3lFWKbLxJm34QxyVNNCgXX1u4o/RV0myvA2y2Bxm46iGIjKlaY0own9gIckbjZJPn+WaJEnfPPJ20HHGpoq4yg==", + "requires": { + "@types/jest": "26.x", + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^26.1.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "mkdirp": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + } + } + }, + "tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", + "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==" + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "optional": true + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==" + }, + "v8-to-istanbul": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz", + "integrity": "sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "requires": { + "makeerror": "1.0.x" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "whatwg-url": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", + "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", + "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==" + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "xregexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", + "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "dependencies": { + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + } + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + } + } + }, + "zip-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-3.0.1.tgz", + "integrity": "sha512-r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ==", + "requires": { + "archiver-utils": "^2.1.0", + "compress-commons": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + } + } +} diff --git a/packages/cli/package.json b/packages/cli/package.json index 92271ae66a..b327ef76a2 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -35,6 +35,11 @@ }, "homepage": "https://serverless-stack.com", "dependencies": { + "@aws-cdk/aws-apigatewayv2": "1.73.0", + "@aws-cdk/aws-dynamodb": "1.61.0", + "@aws-cdk/aws-iam": "1.61.0", + "@aws-cdk/aws-lambda": "1.61.0", + "@aws-cdk/core": "1.61.0", "@babel/cli": "^7.10.5", "@babel/core": "^7.10.5", "@babel/eslint-parser": "^7.11.3", @@ -57,6 +62,7 @@ "source-map-support": "^0.5.19", "ts-jest": "^26.1.4", "typescript": "^3.9.7", + "ws": "^7.4.0", "yargs": "^15.4.1" }, "devDependencies": { diff --git a/packages/cli/scripts/debug/bin/index.js b/packages/cli/scripts/debug/bin/index.js new file mode 100644 index 0000000000..fcf67cc84f --- /dev/null +++ b/packages/cli/scripts/debug/bin/index.js @@ -0,0 +1,9 @@ +#!/usr/bin/env node +const cdk = require("@aws-cdk/core"); +const { DebugStack } = require("../lib/debug-stack"); + +const app = new cdk.App(); +const stage = "local"; +const name = "debug-stack"; +const region = "us-east-1"; +new DebugStack(app, `${stage}-${name}`, { stage, name, region }); diff --git a/packages/cli/scripts/debug/cdk.json b/packages/cli/scripts/debug/cdk.json new file mode 100644 index 0000000000..bc80d4e7a6 --- /dev/null +++ b/packages/cli/scripts/debug/cdk.json @@ -0,0 +1,7 @@ +{ + "app": "node bin/index.js", + "context": { + "@aws-cdk/core:enableStackNameDuplicates": "true", + "aws-cdk:enableDiffNoFail": "true" + } +} diff --git a/packages/cli/scripts/debug/lambda/wsConnect.js b/packages/cli/scripts/debug/lambda/wsConnect.js new file mode 100644 index 0000000000..9eb2299cb3 --- /dev/null +++ b/packages/cli/scripts/debug/lambda/wsConnect.js @@ -0,0 +1,3 @@ +exports.main = async function () { + return { statusCode: 200, body: "Connected." }; +}; diff --git a/packages/cli/scripts/debug/lambda/wsDefault.js b/packages/cli/scripts/debug/lambda/wsDefault.js new file mode 100644 index 0000000000..91b34a6eae --- /dev/null +++ b/packages/cli/scripts/debug/lambda/wsDefault.js @@ -0,0 +1,77 @@ +const AWS = require("aws-sdk"); +AWS.config.logger = console; +const ddb = new AWS.DynamoDB.DocumentClient({ region: process.env.AWS_REGION }); + +// TODO +// - handle re-use websocket connection +// - handle client/channel's connectionId not connected +// - handle connection closed +// - get stub connection id needs to be strong consistent read +exports.main = async function (event) { + console.log(event); + const eventData = JSON.parse(event.body); + console.log(eventData); + + if (eventData.action === "registerClient") { + // register client + await ddb + .put({ + TableName: process.env.TABLE_NAME, + Item: { + channel: "client", + connectionId: event.requestContext.connectionId, + }, + }) + .promise(); + } else if (eventData.action === "newRequest") { + // send request to client + const ret = await ddb + .get({ + TableName: process.env.TABLE_NAME, + Key: { channel: "client" }, + }) + .promise(); + const connectionId = ret.Item.connectionId; + await postToConnection( + JSON.stringify({ + ...eventData, + stubConnectionId: event.requestContext.connectionId, + }), + connectionId + ); + } else if (eventData.action === "newResponse") { + await postToConnection(event.body, eventData.stubConnectionId); + } + + async function postToConnection(data, connectionId) { + // Post to connections + const apigwManagementApi = new AWS.ApiGatewayManagementApi({ + apiVersion: "2018-11-29", + endpoint: + event.requestContext.domainName + "/" + event.requestContext.stage, + }); + + try { + await apigwManagementApi + .postToConnection({ + ConnectionId: connectionId, + Data: data, + }) + .promise(); + } catch (e) { + if (e.statusCode === 410) { + console.log(`Found stale connection, deleting ${connectionId}`); + await ddb + .delete({ + TableName: process.env.TABLE_NAME, + Key: { connectionId }, + }) + .promise(); + } else { + throw e; + } + } + } + + return { statusCode: 200, body: "Data sent." }; +}; diff --git a/packages/cli/scripts/debug/lambda/wsDisconnect.js b/packages/cli/scripts/debug/lambda/wsDisconnect.js new file mode 100644 index 0000000000..8c44bc1707 --- /dev/null +++ b/packages/cli/scripts/debug/lambda/wsDisconnect.js @@ -0,0 +1,3 @@ +exports.main = async function () { + return { statusCode: 200, body: "Disconnected." }; +}; diff --git a/packages/cli/scripts/debug/lib/debug-stack.js b/packages/cli/scripts/debug/lib/debug-stack.js new file mode 100644 index 0000000000..72e0fdee85 --- /dev/null +++ b/packages/cli/scripts/debug/lib/debug-stack.js @@ -0,0 +1,107 @@ +const fs = require("fs"); +const cdk = require("@aws-cdk/core"); +const apig = require("@aws-cdk/aws-apigatewayv2"); +const lambda = require("@aws-cdk/aws-lambda"); +const iam = require("@aws-cdk/aws-iam"); +const dynamodb = require("@aws-cdk/aws-dynamodb"); + +class DebugStack extends cdk.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + const { stage, name, region } = props; + + const _this = this; + + // Create connection table + const table = new dynamodb.Table(this, "Table", { + partitionKey: { name: "channel", type: dynamodb.AttributeType.STRING }, + billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, + removalPolicy: cdk.RemovalPolicy.DESTROY, + }); + + // Create API + const api = new apig.CfnApi(this, "Api", { + name: `${stage}-${name}-api`, + protocolType: "WEBSOCKET", + routeSelectionExpression: "$request.body.action", + }); + const deployment = new apig.CfnDeployment(this, "ApiDeployment", { + apiId: api.ref, + }); + new apig.CfnStage(this, "ApiStage", { + apiId: api.ref, + autoDeploy: true, + deploymentId: deployment.ref, + stageName: stage, + }); + + addApiRoute({ + id: "Connect", + routeKey: "$connect", + codePath: "lambda/wsConnect.js", + }); + addApiRoute({ + id: "Disconnect", + routeKey: "$disconnect", + codePath: "lambda/wsDisconnect.js", + }); + addApiRoute({ + id: "Default", + routeKey: "$default", + codePath: "lambda/wsDefault.js", + }); + + new cdk.CfnOutput(this, "Endpoint", { + value: `${api.attrApiEndpoint}/${stage}`, + }); + + function addApiRoute({ id, routeKey, codePath }) { + // Create execution policy + const policyStatement = new iam.PolicyStatement(); + policyStatement.addAllResources(); + policyStatement.addActions( + "apigateway:*", + "dynamodb:*", + "execute-api:ManageConnections" + ); + + // Create Lambda + const lambdaFunc = new lambda.Function(_this, id, { + code: new lambda.InlineCode( + fs.readFileSync(codePath, { encoding: "utf-8" }) + ), + handler: "index.main", + timeout: cdk.Duration.seconds(10), + runtime: lambda.Runtime.NODEJS_12_X, + memorySize: 256, + environment: { + TABLE_NAME: table.tableName, + }, + initialPolicy: [policyStatement], + }); + lambdaFunc.addPermission(`${id}Permission`, { + principal: new iam.ServicePrincipal("apigateway.amazonaws.com"), + }); + + // Create API integrations + const integration = new apig.CfnIntegration(_this, `${id}Integration`, { + apiId: api.ref, + integrationType: "AWS_PROXY", + integrationUri: `arn:aws:apigateway:${region}:lambda:path/2015-03-31/functions/${lambdaFunc.functionArn}/invocations`, + //credentialsArn: role.roleArn, + }); + + // Create API routes + const route = new apig.CfnRoute(_this, `${id}Route`, { + apiId: api.ref, + routeKey, + authorizationType: "NONE", + target: `integrations/${integration.ref}`, + }); + deployment.node.addDependency(route); + } + } +} + +module.exports = { DebugStack }; diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index b72f1154f5..1c324887c4 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -1,38 +1,14 @@ "use strict"; const spawn = require("cross-spawn"); +const WebSocket = require("ws"); +const AWS = require("aws-sdk"); const paths = require("./config/paths"); +const deploy = require("./deploy"); +const { execSync } = require("child_process"); -const handler = "hello.handler"; - -const context = { - awsRequestId: "123", - invokedFunctionArn: "123", - logGroupName: "123", - logStreamName: "123", - functionName: "123", - functionVersion: "123", - memoryLimitInMB: 1024, - // Get calculated timeout - timeoutInMs: 4000, - //getRemainingTimeInMillis: () => deadlineMs - Date.now(), - callbackWaitsForEmptyEventLoop: true, - clientContext: {}, - identity: {}, -}; - -const event = { - body: "Hello World", -}; - -// From Lambda /var/runtime/bootstrap -// https://link.medium.com/7ir11kKjwbb -const newSpace = Math.floor(context.memoryLimitInMB / 10); -const semiSpace = Math.floor(newSpace / 2); -const oldSpace = context.memoryLimitInMB - newSpace; - -function setTimer(lambda, handleResponse) { +function setTimer(lambda, handleResponse, timeoutInMs) { return setTimeout(function () { handleResponse({ type: "failure", @@ -49,44 +25,138 @@ function setTimer(lambda, handleResponse) { console.log(e); console.log("Cannot kill timed out Lambda"); } - }, context.timeoutInMs); + }, timeoutInMs); } -module.exports = async function () { - let lambdaResponse; - const lambda = spawn( - "node", - [ - `--max-old-space-size=${oldSpace}`, - `--max-semi-space-size=${semiSpace}`, - "--max-http-header-size=81920", // HTTP header limit of 8KB - require.resolve("../scripts/wrapper/bootstrap.js"), - JSON.stringify(event), - JSON.stringify(context), - "./src", // Local path to the Lambda functions - handler, - ], - { stdio: ["inherit", "inherit", "inherit", "ipc"], cwd: paths.appPath } - ); - const timer = setTimer(lambda, handleResponse); - - function handleResponse(response) { - switch (response.type) { - case "success": - case "failure": - lambdaResponse = response; - break; - default: +function startClient(debugEndpoint) { + console.log("Starting up sst debugger..."); + + const ws = new WebSocket(debugEndpoint); + + ws.on("open", () => { + ws.send( + JSON.stringify({ + action: "registerClient", + }) + ); + console.log("Debug session started. Listening for requests..."); + }); + + ws.on("close", (code, reason) => { + console.log("Debug session closed.", { code, reason }); + }); + + ws.on("error", (e) => { + console.log("Debug session error.", e); + }); + + ws.on("message", (data) => { + console.debug(data); + const { + action, + stubConnectionId, + debugRequestId, + debugRequestExpireAt, + debugRequestTimeoutInMs, + debugSrcPath, + debugSrcHandler, + event, + context, + } = JSON.parse(data); + console.log("INFO", debugRequestId, "REQUEST", JSON.stringify(event)); + if (action !== "newRequest" || debugRequestExpireAt < Date.now()) { + console.log("INFO", debugRequestId, "DISCARDED"); + return; } - } + //delete require.cache[require.resolve('./lambda/handler')]; + //const handler = require('./lambda/handler'); + //const response = handler.main(); + //const srcEntry = props && props.entry + // || path.basename(__filename).split('.').splice(-1, 0,'id').join('.'); + //const srcHandler = props && props.handler || 'handler'; - function returnLambdaResponse() { - console.log("Done", lambdaResponse); - } + // From Lambda /var/runtime/bootstrap + // https://link.medium.com/7ir11kKjwbb + const newSpace = Math.floor(context.memoryLimitInMB / 10); + const semiSpace = Math.floor(newSpace / 2); + const oldSpace = context.memoryLimitInMB - newSpace; - lambda.on("message", handleResponse); - lambda.on("exit", function () { - returnLambdaResponse(); - clearTimeout(timer); + let lambdaResponse; + const lambda = spawn( + "node", + [ + `--max-old-space-size=${oldSpace}`, + `--max-semi-space-size=${semiSpace}`, + "--max-http-header-size=81920", // HTTP header limit of 8KB + require.resolve("../scripts/wrapper/bootstrap.js"), + JSON.stringify(event), + JSON.stringify(context), + //"./src", // Local path to the Lambda functions + //"hello.handler", + debugSrcPath, + debugSrcHandler, + ], + { stdio: ["inherit", "inherit", "inherit", "ipc"], cwd: paths.appPath } + ); + const timer = setTimer(lambda, handleResponse, debugRequestTimeoutInMs); + + function handleResponse(response) { + switch (response.type) { + case "success": + case "failure": + lambdaResponse = response; + break; + default: + } + } + + function returnLambdaResponse() { + console.log( + "INFO", + debugRequestId, + "RESPONSE", + JSON.stringify(lambdaResponse) + ); + ws.send( + JSON.stringify({ + action: "newResponse", + debugRequestId, + stubConnectionId, + response: lambdaResponse.data, + }) + ); + } + + lambda.on("message", handleResponse); + lambda.on("exit", function () { + returnLambdaResponse(); + clearTimeout(timer); + }); }); +} + +module.exports = async function (argv, config, cliInfo) { + const region = "us-east-1"; + const stage = "local"; + const stack = `${stage}-debug-stack`; + + // Deploy debug stack + execSync("npx cdk deploy --require-approval never", { + stdio: ["inherit", "inherit", "inherit"], + cwd: `${paths.ownPath}/scripts/debug`, + }); + + // Get websocket endpoint + const cf = new AWS.CloudFormation({ region }); + const cfRet = await cf.describeStacks({ StackName: stack }).promise(); + const debugEndpoint = cfRet.Stacks[0].Outputs.find( + (output) => output.OutputKey === "Endpoint" + ).OutputValue; + process.env.SST_DEBUG_ENDPOINT = debugEndpoint; + + // Deploy app + await deploy(argv, config, cliInfo); + + // Start client + startClient(debugEndpoint); }; diff --git a/packages/cli/test/start/lib/index.js b/packages/cli/test/start/lib/index.js index c857a02040..f306a4400e 100644 --- a/packages/cli/test/start/lib/index.js +++ b/packages/cli/test/start/lib/index.js @@ -1 +1,39 @@ -export default function main() {} +import * as sst from "@serverless-stack/resources"; +import * as cdk from "@aws-cdk/core"; +import * as lambda from "@aws-cdk/aws-lambda"; +import * as apig from "@aws-cdk/aws-apigatewayv2"; +import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; + +class MySampleStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + const { stage, name } = this.node.root; + + const func = new sst.Function(this, "MyLambda", { + code: lambda.Code.fromAsset("src"), + handler: "hello.handler", + timeout: cdk.Duration.seconds(6), + runtime: lambda.Runtime.NODEJS_12_X, + memorySize: 1024, + }); + + const api = new apig.HttpApi(this, "Api"); + api.addRoutes({ + integration: new apigIntegrations.LambdaProxyIntegration({ + handler: func, + }), + methods: [apig.HttpMethod.GET], + path: "/", + }); + + new cdk.CfnOutput(this, "ApiEndpoint", { + exportName: `${stage}-${name}-ApiEndpoint`, + value: api.apiEndpoint, + }); + } +} + +export default function main(app) { + new MySampleStack(app, "sample"); +} diff --git a/packages/cli/test/start/package.json b/packages/cli/test/start/package.json index 5fa7326891..6924a5a616 100644 --- a/packages/cli/test/start/package.json +++ b/packages/cli/test/start/package.json @@ -4,10 +4,18 @@ "description": "", "main": "index.js", "scripts": { - "start": "../../bin/scripts.js start" + "start": "../../bin/scripts.js start", + "build": "../../bin/scripts.js build", + "cdk": "../../bin/scripts.js cdk" }, "keywords": [], "author": "", - "dependencies": {}, + "dependencies": { + "@aws-cdk/aws-apigatewayv2": "1.73.0", + "@aws-cdk/aws-apigatewayv2-integrations": "1.73.0", + "@aws-cdk/aws-lambda": "1.61.0", + "@aws-cdk/core": "1.61.0", + "@serverless-stack/resources": "../../../resources" + }, "license": "ISC" } diff --git a/packages/cli/test/start/yarn.lock b/packages/cli/test/start/yarn.lock index fb57ccd13a..21982f0d16 100644 --- a/packages/cli/test/start/yarn.lock +++ b/packages/cli/test/start/yarn.lock @@ -2,3 +2,611 @@ # yarn lockfile v1 +"@aws-cdk/assets@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.61.0.tgz#9702ba8ef5b3c45ec47e0530006d63dc0685a5ff" + integrity sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA== + dependencies: + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/assets@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.73.0.tgz#dcca310ac82f2e2370cb7307b227dd59e319606e" + integrity sha512-fAdRAWn/IWbalMZva86Q4BimYrwipSoqPzyC5d6fwxNmJU/QiFLMpILanS1T9a0a+yjqAqk+8pAXn44lZIOlPQ== + dependencies: + "@aws-cdk/core" "1.73.0" + "@aws-cdk/cx-api" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-apigatewayv2-integrations@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2-integrations/-/aws-apigatewayv2-integrations-1.73.0.tgz#6b225f21231f3892368f9be2c327f2edbab7e8f9" + integrity sha512-yQdJI/8CrBvw4s8H/9rsw6XAJXhQMScf95lsj52uwNmHi/Xz1PYVVlisbEa5Fg8CUCFWO0lRG81QLNZpgfLzow== + dependencies: + "@aws-cdk/aws-apigatewayv2" "1.73.0" + "@aws-cdk/aws-ec2" "1.73.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.73.0" + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/aws-lambda" "1.73.0" + "@aws-cdk/aws-servicediscovery" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-apigatewayv2@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.73.0.tgz#c305288d049d9a1905642a60eedeabcfb8737df2" + integrity sha512-+++K1KADMSFGgvOaj3OwiVcNEYWUR878rqH50EDEf/UxaYky3eD0Sg255sGQWrjbi3bb60lYdzVFDjADHHnEtw== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.73.0" + "@aws-cdk/aws-cloudwatch" "1.73.0" + "@aws-cdk/aws-ec2" "1.73.0" + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-applicationautoscaling@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz#8129984ba0185bbb525fd8ef6328c5c84e51e4e5" + integrity sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-applicationautoscaling@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.73.0.tgz#2de1f609d25bd9a69c458ec06ae59820f75865f4" + integrity sha512-ROJPuj+PyrYa7/P6JoTrsFs8WMxKra1yuXZJ3r0iTrnAgCDAVCVpzmiF3Uwqw6rip1o63ZLT3fxxMeJBb2wL7Q== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.73.0" + "@aws-cdk/aws-cloudwatch" "1.73.0" + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-autoscaling-common@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz#9e7f6a8669b36001b846d90fa8cb65d8b4edb27b" + integrity sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-autoscaling-common@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.73.0.tgz#087cc95ed07cdc2e13acb770db40029e786c4c33" + integrity sha512-AJf9F9X/ktSMLj/NaX0ccPXr7VlDR6CTycpEgJZU4qbXqIW/LhIDkAhH15CNV38WYQnVDkVSQgDNfCtGaeHTqA== + dependencies: + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-certificatemanager@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.73.0.tgz#c21eb5c015985d65473429e6d1fc4184da1ac1bc" + integrity sha512-r5talegg1Z79Fo289JRgm1u6SV16I7nO4AZEmmbceDByDnXiRcnroi0o9fZTVWNUYuIwrpY4ZWR2UTKY71xYTg== + dependencies: + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/aws-lambda" "1.73.0" + "@aws-cdk/aws-route53" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudwatch@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz#3c0171ca76d086da424c1b4148a53c4d68dd885a" + integrity sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-cloudwatch@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.73.0.tgz#322638c3ab86bb9a9df24ab73de532fd4c9b98ed" + integrity sha512-H6MQVtJfKAJyE6DRHe71ivFu9OjhH32VtsJUZ1xuQ/pyeoQlOQ6fj0FIjz4ObG3qDBq72SBfrbPAQ3q+2g3HfA== + dependencies: + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-codeguruprofiler@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz#1ace4c61a4a7b916f4dbe28070b5b914949e6f06" + integrity sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + +"@aws-cdk/aws-codeguruprofiler@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.73.0.tgz#9dd6c9ff00aee0f05f6b9602521a44893aef5ecd" + integrity sha512-WcJjCT+4zd3v4E1nWUagpHKWVIafM4vMe+4DAcBXZbhqXww1yyXUxf1A08uc7zQGko3hvIoHp41maAiT5G6/nw== + dependencies: + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ec2@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz#d39b1f5356c57089b963bbe4644adc02fd12a4bf" + integrity sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/aws-ssm" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + "@aws-cdk/region-info" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-ec2@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.73.0.tgz#8c1fd13ff399d4acb7ab7a18e431bf72b0f8dea2" + integrity sha512-XjGcHaVlaJNorXv8qrRt7k8rPLE8yV1SAJWHY/SIf7NzIg9Y6lFV0eVkBU5RINfuD9GIW8YbgtLGE5ZpfZ5YkA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.73.0" + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/aws-kms" "1.73.0" + "@aws-cdk/aws-logs" "1.73.0" + "@aws-cdk/aws-s3" "1.73.0" + "@aws-cdk/aws-s3-assets" "1.73.0" + "@aws-cdk/aws-ssm" "1.73.0" + "@aws-cdk/cloud-assembly-schema" "1.73.0" + "@aws-cdk/core" "1.73.0" + "@aws-cdk/cx-api" "1.73.0" + "@aws-cdk/region-info" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-efs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz#c4d66d0d928c01c8018c1c8bc75a1c5097d649ce" + integrity sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg== + dependencies: + "@aws-cdk/aws-ec2" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-efs@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.73.0.tgz#48d87d8f2135f6d138a81fa8ff4f26715c672913" + integrity sha512-sWUU+nhJ78T5tElLy7BqUrlXj4kGv43nrkWE5+jbTaLRFEpJPM6fMuWfzcJGfkqpbppjc/aySyCPbvEcWb7bDQ== + dependencies: + "@aws-cdk/aws-ec2" "1.73.0" + "@aws-cdk/aws-kms" "1.73.0" + "@aws-cdk/cloud-assembly-schema" "1.73.0" + "@aws-cdk/core" "1.73.0" + "@aws-cdk/cx-api" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-elasticloadbalancingv2@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.73.0.tgz#b2159f142b14f90b6cf059402d40159ea326bad5" + integrity sha512-NqsPFxyCm6RSeaXQigQJh3CSUeKiAhOB4B1cyU4t/lHVG2EUd4ObDmOYLRREfXEax+nqDg+ZhLzDR03I+sXhIg== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.73.0" + "@aws-cdk/aws-cloudwatch" "1.73.0" + "@aws-cdk/aws-ec2" "1.73.0" + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/aws-lambda" "1.73.0" + "@aws-cdk/aws-s3" "1.73.0" + "@aws-cdk/cloud-assembly-schema" "1.73.0" + "@aws-cdk/core" "1.73.0" + "@aws-cdk/cx-api" "1.73.0" + "@aws-cdk/region-info" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-events@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" + integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-events@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.73.0.tgz#178a5e2ff0f11f20d79a722785b05491f16c95bc" + integrity sha512-CvOAIAt00xCWKC2U96NAgA8xIkzrNkwalCXk3RIRjz9xEVge5w3lQ7Hy6lSSbhyTfxQV01bppZO2ExaeAKOjOg== + dependencies: + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-iam@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" + integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== + dependencies: + "@aws-cdk/core" "1.61.0" + "@aws-cdk/region-info" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-iam@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.73.0.tgz#a53f3bbaa99b67b56e38fe167a5c867fe339c01f" + integrity sha512-o2pdkEEdwluZegLqlbhfK0zgIbezvKDf5UfwBKloeFSDcGOZAaqF25OPfrTowXkIakHbw2wMswbUlmUgYdmNFg== + dependencies: + "@aws-cdk/core" "1.73.0" + "@aws-cdk/region-info" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-kms@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" + integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-kms@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.73.0.tgz#76127abeaebaea93adf00aef85ff294494218c0e" + integrity sha512-4aQRGBktM1IYqM0Qa/yio1/sjNuokMdLQNrjTVxyX+AZE2/zPqARe+Gm6sFpPJ9Is8oy0YzecP80QZSCnWpCnQ== + dependencies: + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda-nodejs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.61.0.tgz#1c1b34fdf34ab585ea1ff5c0687e0d69a6a0d310" + integrity sha512-a6fiCqk4IjNjVGG8K+AjQviavno1SQwHcdf5JBYhXez7aJ8f2oTZHf5HC2UPTk3Ohu6HsIHds8KXbz4uqLp2Sw== + dependencies: + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-lambda@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz#65b2fb456f6c2d0566401bd3d265f5bae47d6346" + integrity sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-codeguruprofiler" "1.61.0" + "@aws-cdk/aws-ec2" "1.61.0" + "@aws-cdk/aws-efs" "1.61.0" + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/aws-sqs" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-lambda@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.73.0.tgz#2561d19ff9435ec0ef94d5050b92e914bf3c6aec" + integrity sha512-ffw/hK1DbbSXklry4sDmJ+c+dX3Zl+I9DsYNjf0h2aonEKZo+g7ItAhVzr5s1kDnKatlEJTNOw1Kdpn20vFZHg== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.73.0" + "@aws-cdk/aws-cloudwatch" "1.73.0" + "@aws-cdk/aws-codeguruprofiler" "1.73.0" + "@aws-cdk/aws-ec2" "1.73.0" + "@aws-cdk/aws-efs" "1.73.0" + "@aws-cdk/aws-events" "1.73.0" + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/aws-logs" "1.73.0" + "@aws-cdk/aws-s3" "1.73.0" + "@aws-cdk/aws-s3-assets" "1.73.0" + "@aws-cdk/aws-sqs" "1.73.0" + "@aws-cdk/core" "1.73.0" + "@aws-cdk/cx-api" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-logs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz#430bb5fc87ec606416ffb0869f04754185092a21" + integrity sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-logs@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.73.0.tgz#dbb01b6dfe144ab74bf37cce55cc39239bb2390a" + integrity sha512-pn/JUpz49nmP81rOW66S36HbBF+RCKDWyN+rQ671zr62T9EPJuRLWxbdahcnAN1eqyCsZEs9PpCvTnacj9ue7w== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.73.0" + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/aws-s3-assets" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-route53@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.73.0.tgz#c804c9ee74ec0f607b940774994a80afa96b2f5a" + integrity sha512-M3298IkyLELVTlA+2g0EdEV+bYTkC3xzTiHwoqcJeCd8T7IY8E89f73bsweX8k49cu1soPAUvXVJuUfxb6WYEg== + dependencies: + "@aws-cdk/aws-ec2" "1.73.0" + "@aws-cdk/aws-logs" "1.73.0" + "@aws-cdk/cloud-assembly-schema" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3-assets@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz#8512ac0e16818bc78eff010d15d6cc99a7d8fccf" + integrity sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA== + dependencies: + "@aws-cdk/assets" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-s3-assets@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.73.0.tgz#fdfae26ef5356368809e0d93f908650c6abb10b5" + integrity sha512-CvxEIBOOj7tYMrMimPSsbtQ4OOurhUIiNIhM38gisTXYgSchKTeDzKJAbalfYOZSNJNEx1wMNL/+oKV/gDtrHQ== + dependencies: + "@aws-cdk/assets" "1.73.0" + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/aws-kms" "1.73.0" + "@aws-cdk/aws-s3" "1.73.0" + "@aws-cdk/core" "1.73.0" + "@aws-cdk/cx-api" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" + integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== + dependencies: + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-s3@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.73.0.tgz#bb31d0eb2b2f204420c388015f26998fc702d67c" + integrity sha512-n0PuTBhqFxRfvGHhWk54R2hfS24b5DFkqP2PvTIwRFCBqmSUnRLF8I+GZ4c6RNxfVfDSzQBcGvfuCuNTL1KZLQ== + dependencies: + "@aws-cdk/aws-events" "1.73.0" + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/aws-kms" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-servicediscovery@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.73.0.tgz#3faec4889f6e89b4b4390bdce359b1661becaef6" + integrity sha512-3IV6+b6QUgQtOAqj1la6dagWufq6FcDIiDkhKLrzr3ppuT2wlkUsq+rjjQ6+4HHVoDEIy15E9/Dhxqm+nINCxQ== + dependencies: + "@aws-cdk/aws-ec2" "1.73.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.73.0" + "@aws-cdk/aws-route53" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sqs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz#b2d1d7a5d27d36d1580a3cb500daf417037da492" + integrity sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-sqs@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.73.0.tgz#a6108c57d6d22f91c9b11ecc0bb8072bc3d4cef1" + integrity sha512-15stNsRYY165Vvx/io6TnTSMHar10diLa2k2BTiL+PNzl18SfEIOoTy97PCvJp9AK2Ob9dyQwwjsiutTU56IbA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.73.0" + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/aws-kms" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ssm@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz#229308cfce757f8b3f75d12bf276ce4f8042076f" + integrity sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-ssm@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.73.0.tgz#29e5e0126f00b6bd91b58a6757ede3c579d9b9ea" + integrity sha512-6fobpaL7hh0My/aypd7DHQ+sLuPcb7Taj8ngjmoh8H0muiAkfj4O0CjN3cd+kCYRr8T4zRh546ypvFfsc9WEHQ== + dependencies: + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/aws-kms" "1.73.0" + "@aws-cdk/cloud-assembly-schema" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/cloud-assembly-schema@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" + integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/cloud-assembly-schema@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.73.0.tgz#75e27dddda8f65708a5f649760e92031c296416f" + integrity sha512-3m5nJDLSApAuUMra2WrQF7GHt6xgxqFET91WShtKtj48brZk4MBJ3dLre2LjDVsmMMOVdd6FpjY7tE5C1v9Hyw== + dependencies: + jsonschema "^1.4.0" + semver "^7.3.2" + +"@aws-cdk/core@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" + integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/core@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.73.0.tgz#15ef8230da5bb9d92b5e1c5f3cff0ade01a2b093" + integrity sha512-CTmUXo0hAH78/uvzfmgW4gQKLnusMxULIEUjd0wnfs/6/zoB6n2DP+lmkr/7Vp4aIG9nNNirThdHesidlx79eA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.73.0" + "@aws-cdk/cx-api" "1.73.0" + "@aws-cdk/region-info" "1.73.0" + "@balena/dockerignore" "^1.0.2" + constructs "^3.2.0" + fs-extra "^9.0.1" + ignore "^5.1.8" + minimatch "^3.0.4" + +"@aws-cdk/cx-api@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" + integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.61.0" + semver "^7.2.2" + +"@aws-cdk/cx-api@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.73.0.tgz#328562689a55fba184324ec2b83b3c72b88a1a3f" + integrity sha512-HlBpbIGu71xXdfJ1De1/HOMK5LWzKK9J7REho0oncpAO9KDxAbk+1aOFUZJVEgTsJSUUzLMSIUtDIo+ev70HGA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.73.0" + semver "^7.3.2" + +"@aws-cdk/region-info@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" + integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== + +"@aws-cdk/region-info@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.73.0.tgz#9f4444c57fa1d366205409a0a9e6b09f27b428cb" + integrity sha512-jWfx5mY3BaCVeFnbdUxrDTczVTuwShdtu3WkV2vL+W3VnUMzLPKbCPiGY8GutSBlWvoFpubsbVqx8Kw61pRgdQ== + +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== + +"@serverless-stack/resources@../../../resources": + version "0.4.3" + dependencies: + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/aws-lambda-nodejs" "1.61.0" + "@aws-cdk/core" "1.61.0" + +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== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +constructs@^3.0.4, constructs@^3.2.0: + version "3.2.37" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.37.tgz#ebced4a0fbfa81be8db730cbe7a82d18410bebcb" + integrity sha512-Z2dVwVaaw8cDIOeWT5smfgC4BLhkXK7JAfUUDtoB5WhUIIUZpRX+Pd5ZE6UrEuXSQkaJHUT6MVGxgBFZR3DpxQ== + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +ignore@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +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" + +jsonschema@^1.2.5, jsonschema@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +semver@^7.2.2, semver@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== diff --git a/packages/resources/lambda/lambdaStub.js b/packages/resources/lambda/lambdaStub.js new file mode 100644 index 0000000000..e4882457b4 --- /dev/null +++ b/packages/resources/lambda/lambdaStub.js @@ -0,0 +1,86 @@ +const WebSocket = require("ws"); +let ws; +let wsCallbackRef = {}; + +// TODO +// - handle stub is idle for 10min and connection closes, need to check if closed event is received + +exports.main = function (event, context, callback) { + context.callbackWaitsForEmptyEventLoop = false; + + const { + functionName, + memoryLimitInMB, + awsRequestId, + callbackWaitsForEmptyEventLoop, + } = context; + const debugRequestExpireAt = + Date.now() + context.getRemainingTimeInMillis() + 1000; + const debugRequestId = `${awsRequestId}-${debugRequestExpireAt}`; + + // Set debugRequestId in ref b/c debugRequestId will be used in callback, need to do the + // useRef trick to let the callback access its current value. + wsCallbackRef.debugRequestId = debugRequestId; + wsCallbackRef.callback = callback; + + if (!ws) { + connectAndSendMessage(); + } else { + sendMessage(); + } + + function connectAndSendMessage() { + ws = new WebSocket(process.env.SST_DEBUG_ENDPOINT); + + ws.on("open", () => { + console.log("opened"); + sendMessage(); + }); + + ws.on("close", () => { + console.log("closed"); + }); + + ws.on("message", (data) => { + receiveMessage(data); + }); + + ws.on("error", () => { + console.log("error"); + }); + } + + function sendMessage() { + ws.send( + JSON.stringify({ + action: "newRequest", + debugRequestId, + debugRequestExpireAt, + debugRequestTimeoutInMs: context.getRemainingTimeInMillis(), + debugSrcPath: process.env.SST_DEBUG_SRC_PATH, + debugSrcHandler: process.env.SST_DEBUG_SRC_HANDLER, + event, + context: { + functionName, + memoryLimitInMB, + awsRequestId, + callbackWaitsForEmptyEventLoop, + }, + }) + ); + console.log("request sent"); + } + + function receiveMessage(data) { + console.log("response received", { data }); + const { action, debugRequestId, response } = JSON.parse(data); + if ( + action !== "newResponse" || + debugRequestId !== wsCallbackRef.debugRequestId + ) { + console.log("discard response"); + return; + } + wsCallbackRef.callback(null, response); + } +}; diff --git a/packages/resources/lambda/package-lock.json b/packages/resources/lambda/package-lock.json new file mode 100644 index 0000000000..a4157c7a6c --- /dev/null +++ b/packages/resources/lambda/package-lock.json @@ -0,0 +1,13 @@ +{ + "name": "lambda", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "ws": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", + "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==" + } + } +} diff --git a/packages/resources/lambda/package.json b/packages/resources/lambda/package.json new file mode 100644 index 0000000000..d9dfe9df61 --- /dev/null +++ b/packages/resources/lambda/package.json @@ -0,0 +1,15 @@ +{ + "name": "lambda", + "version": "1.0.0", + "description": "", + "main": "lambdaStub.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "ws": "^7.4.0" + } +} diff --git a/packages/resources/package.json b/packages/resources/package.json index 7c2c7a37f5..c13034c4f9 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -25,7 +25,9 @@ "access": "public" }, "dependencies": { - "@aws-cdk/core": "1.61.0" + "@aws-cdk/core": "1.61.0", + "@aws-cdk/aws-lambda": "1.61.0", + "@aws-cdk/aws-lambda-nodejs": "1.61.0" }, "devDependencies": { "@types/node": "^14.0.27", diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts new file mode 100644 index 0000000000..1725d6c1b5 --- /dev/null +++ b/packages/resources/src/Function.ts @@ -0,0 +1,49 @@ +import path from "path"; +import * as cdk from "@aws-cdk/core"; +import * as lambda from "@aws-cdk/aws-lambda"; +import { App } from "./App"; + +export type FunctionProps = lambda.FunctionProps; + +export class Function extends lambda.Function { + constructor(scope: cdk.Construct, id: string, props: FunctionProps) { + const root = scope.node.root as App; + + // Validate NodeJS runtime + if ( + ![ + lambda.Runtime.NODEJS, + lambda.Runtime.NODEJS_10_X, + lambda.Runtime.NODEJS_12_X, + lambda.Runtime.NODEJS_4_3, + lambda.Runtime.NODEJS_6_10, + lambda.Runtime.NODEJS_8_10, + ].includes(props.runtime) + ) { + throw new Error( + `sst.Function does not support ${props.runtime}. Nnly NodeJS runtimes are currently supported.` + ); + } + + // Validate a plain file is specified + if (!(props.code instanceof lambda.AssetCode)) { + throw new Error(`sst.Function only supports AssetCode type for code.`); + } + + if (root.stage === "local") { + super(scope, id, { + ...props, + code: lambda.Code.fromAsset(path.resolve(__dirname, "../lambda")), + handler: "lambdaStub.main", + environment: { + SST_DEBUG_ENDPOINT: process.env.SST_DEBUG_ENDPOINT || "", + SST_DEBUG_SRC_PATH: props.code.path, + SST_DEBUG_SRC_HANDLER: props.handler, + }, + }); + // func.node.defaultChild.cfnOptions.metadata = { 'sst:lambda:src': 'src/hello.handler' }; + } else { + super(scope, id, props); + } + } +} diff --git a/packages/resources/src/NodejsFunction.ts b/packages/resources/src/NodejsFunction.ts new file mode 100644 index 0000000000..473a12c59a --- /dev/null +++ b/packages/resources/src/NodejsFunction.ts @@ -0,0 +1,41 @@ +import path from "path"; +import * as cdk from "@aws-cdk/core"; +import * as lambda from "@aws-cdk/aws-lambda-nodejs"; +import { App } from "./App"; + +export type NodejsFunctionProps = lambda.NodejsFunctionProps; + +export class NodejsFunction extends lambda.NodejsFunction { + constructor(scope: cdk.Construct, id: string, props?: NodejsFunctionProps) { + const root = scope.node.root as App; + + if (root.stage === "local") { + let srcPath, srcHandler; + if (props && props.entry) { + const entryParts = props.entry.split("/"); + srcPath = entryParts.slice(0, -1).join("/"); + srcHandler = `${entryParts.pop()}/${props.handler || "handler"}`; + } else { + srcPath = __dirname; + srcHandler = path + .basename(__filename) + .split(".") + .splice(0, -1) + .concat([id, (props && props.handler) || "handler"]) + .join("."); + } + super(scope, id, { + ...props, + entry: path.resolve(__dirname, "../lambda/lambdaStub.js"), + handler: "main", + environment: { + SST_DEBUG_ENDPOINT: process.env.SST_DEBUG_ENDPOINT || "", + SST_DEBUG_SRC_PATH: srcPath, + SST_DEBUG_SRC_HANDLER: srcHandler, + }, + }); + } else { + super(scope, id, props); + } + } +} diff --git a/packages/resources/src/index.ts b/packages/resources/src/index.ts index 809cc2f44d..53295be425 100644 --- a/packages/resources/src/index.ts +++ b/packages/resources/src/index.ts @@ -1,2 +1,4 @@ export * from "./App"; export * from "./Stack"; +export * from "./Function"; +export * from "./NodejsFunction"; From 20279bb329132b79662a10b693578a611dc83ac8 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 23 Nov 2020 19:08:14 -0500 Subject: [PATCH 130/481] Setting configs for start script --- packages/cli/bin/scripts.js | 2 +- packages/cli/scripts/config/cdkHelpers.js | 26 +- packages/cli/scripts/debug/bin/index.js | 3 + packages/cli/scripts/deploy.js | 2 +- packages/cli/scripts/start.js | 26 +- packages/cli/scripts/wrapper/run.js | 25 +- packages/cli/test/start/src/hello.js | 16 +- packages/resources/lambda/package-lock.json | 1138 +++++++++++++++++++ packages/resources/src/App.ts | 22 + packages/resources/src/Function.ts | 6 +- packages/resources/src/NodejsFunction.ts | 4 +- yarn.lock | 517 +++++++++ 12 files changed, 1746 insertions(+), 41 deletions(-) diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index ec9860efb9..3a9f24dece 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -181,7 +181,6 @@ if (argv.verbose) { } switch (script) { - case cmd.start: case cmd.build: case cmd.deploy: case cmd.remove: { @@ -193,6 +192,7 @@ switch (script) { Promise.resolve(internals[script](argv, config, cliInfo)); break; } + case cmd.start: case cmd.addCdk: { const cliInfo = getCliInfo(); diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index 256430aa23..0feec640ca 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -245,25 +245,34 @@ function applyConfig(argv) { ); } - const type = config.type.trim(); - - logger.log(chalk.grey(`Preparing ${type}`)); - config.name = config.name || DEFAULT_NAME; config.stage = argv.stage || config.stage || DEFAULT_STAGE; config.region = argv.region || config.region || DEFAULT_REGION; + return config; +} + +function writeConfig(config) { + const type = config.type.trim(); + + logger.log(chalk.grey(`Preparing ${type}`)); + fs.writeFileSync( path.join(paths.appBuildPath, "sst-merged.json"), JSON.stringify(config) ); - - return config; } -function prepareCdk(argv, cliInfo) { +function prepareCdk(argv, cliInfo, config) { + let appliedConfig = config; + createBuildPath(); - const appliedConfig = applyConfig(argv); + + if (!config) { + appliedConfig = applyConfig(argv); + } + + writeConfig(appliedConfig); copyConfigFiles(); copyWrapperFiles(); @@ -321,6 +330,7 @@ async function parallelDestroy(options, stackStates) { module.exports = { synth, prepareCdk, + applyConfig, parallelDeploy, parallelDestroy, }; diff --git a/packages/cli/scripts/debug/bin/index.js b/packages/cli/scripts/debug/bin/index.js index fcf67cc84f..6064a1de6d 100644 --- a/packages/cli/scripts/debug/bin/index.js +++ b/packages/cli/scripts/debug/bin/index.js @@ -1,9 +1,12 @@ #!/usr/bin/env node + const cdk = require("@aws-cdk/core"); const { DebugStack } = require("../lib/debug-stack"); const app = new cdk.App(); + const stage = "local"; const name = "debug-stack"; const region = "us-east-1"; + new DebugStack(app, `${stage}-${name}`, { stage, name, region }); diff --git a/packages/cli/scripts/deploy.js b/packages/cli/scripts/deploy.js index 221badb7e1..4fb27c8a4d 100644 --- a/packages/cli/scripts/deploy.js +++ b/packages/cli/scripts/deploy.js @@ -73,9 +73,9 @@ function getEventCount(stackStates) { function formatStackStatus(status) { return { + failed: "failed", succeeded: "deployed", unchanged: "no changes", - failed: "failed", skipped: "not deployed", }[status]; } diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 1c324887c4..1bd052c49a 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -1,12 +1,13 @@ "use strict"; -const spawn = require("cross-spawn"); -const WebSocket = require("ws"); const AWS = require("aws-sdk"); +const WebSocket = require("ws"); +const spawn = require("cross-spawn"); +const { execSync } = require("child_process"); -const paths = require("./config/paths"); const deploy = require("./deploy"); -const { execSync } = require("child_process"); +const paths = require("./config/paths"); +const { prepareCdk, applyConfig } = require("./config/cdkHelpers"); function setTimer(lambda, handleResponse, timeoutInMs) { return setTimeout(function () { @@ -135,7 +136,16 @@ function startClient(debugEndpoint) { }); } -module.exports = async function (argv, config, cliInfo) { +module.exports = async function (argv, cliInfo) { + const config = applyConfig(argv); + // + // console.log(argv, config, cliInfo); + // + // const stage = config.stage; + // const region = config.region; + // + // return; + const region = "us-east-1"; const stage = "local"; const stack = `${stage}-debug-stack`; @@ -152,7 +162,11 @@ module.exports = async function (argv, config, cliInfo) { const debugEndpoint = cfRet.Stacks[0].Outputs.find( (output) => output.OutputKey === "Endpoint" ).OutputValue; - process.env.SST_DEBUG_ENDPOINT = debugEndpoint; + //process.env.SST_DEBUG_ENDPOINT = debugEndpoint; + + config.debugEndpoint = debugEndpoint; + + prepareCdk(argv, cliInfo, config); // Deploy app await deploy(argv, config, cliInfo); diff --git a/packages/cli/scripts/wrapper/run.js b/packages/cli/scripts/wrapper/run.js index 919e16a241..957d2fc0f2 100644 --- a/packages/cli/scripts/wrapper/run.js +++ b/packages/cli/scripts/wrapper/run.js @@ -15,18 +15,6 @@ const sst = require("@serverless-stack/resources"); const config = require("./sst-merged.json"); -function handlerNotFound(importFailed) { - const extCopy = fs.existsSync(path.join(__dirname, "../", "tsconfig.json")) - ? "ts" - : "js"; - console.error( - importFailed - ? `\nCannot find app handler. Make sure to add a "lib/index.${extCopy}" file.\n` - : `\nCannot find app handler. Make sure "lib/index.${extCopy}" has a default export.\n` - ); - process.exit(1); -} - // Check first and throw an error if (!fs.existsSync(path.join(__dirname, "index.js"))) { handlerNotFound(true); @@ -43,5 +31,18 @@ handler.default( name: config.name, stage: config.stage, region: config.region, + debugEndpoint: config.debugEndpoint, }) ); + +function handlerNotFound(importFailed) { + const extCopy = fs.existsSync(path.join(__dirname, "../", "tsconfig.json")) + ? "ts" + : "js"; + console.error( + importFailed + ? `\nCannot find app handler. Make sure to add a "lib/index.${extCopy}" file.\n` + : `\nCannot find app handler. Make sure "lib/index.${extCopy}" has a default export.\n` + ); + process.exit(1); +} diff --git a/packages/cli/test/start/src/hello.js b/packages/cli/test/start/src/hello.js index ed8c2e23f2..432a997591 100644 --- a/packages/cli/test/start/src/hello.js +++ b/packages/cli/test/start/src/hello.js @@ -1,13 +1,13 @@ setTimeout(() => console.log("still here"), 3000); exports.handler = function (event, context, callback) { - context.callbackWaitsForEmptyEventLoop = true; + context.callbackWaitsForEmptyEventLoop = false; console.log("Calling from inside the function"); - setTimeout(() => { - callback(null, { - statusCode: 200, - headers: { "Content-Type": "text/plain" }, - body: "Hello World with event: " + JSON.stringify(event), - }); - }, 2000); + //setTimeout(() => { + callback(null, { + statusCode: 200, + headers: { "Content-Type": "text/plain" }, + body: "New World with event: " + JSON.stringify(event), + }); + //}, 2000); }; diff --git a/packages/resources/lambda/package-lock.json b/packages/resources/lambda/package-lock.json index a4157c7a6c..23dd524b0e 100644 --- a/packages/resources/lambda/package-lock.json +++ b/packages/resources/lambda/package-lock.json @@ -4,6 +4,1144 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@types/eslint": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.5.tgz", + "integrity": "sha512-Dc6ar9x16BdaR3NSxSF7T4IjL9gxxViJq8RmFd+2UAyA+K6ck2W+gUwfgpG/y9TPyUuBL35109bbULpEynvltA==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", + "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.45", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.45.tgz", + "integrity": "sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "dev": true + }, + "@types/node": { + "version": "14.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.9.tgz", + "integrity": "sha512-JsoLXFppG62tWTklIoO4knA+oDTYsmqWxHRvd4lpmfQRNhX6osheUOWETP2jMoV/2bEHuMra8Pp3Dmo/stBFcw==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/info": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.1.0.tgz", + "integrity": "sha512-uNWSdaYHc+f3LdIZNwhdhkjjLDDl3jP2+XBqAq9H8DjrJUvlOKdP8TNruy1yEaDfgpAIgbSAN7pye4FEHg9tYQ==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.1.0.tgz", + "integrity": "sha512-7RfnMXCpJ/NThrhq4gYQYILB18xWyoQcBey81oIyVbmgbc6m5ZHHyFK+DyH7pLHJf0p14MxL4mTsoPAgBSTpIg==", + "dev": true + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "acorn": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz", + "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "array-back": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz", + "integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==", + "dev": true + }, + "browserslist": { + "version": "4.14.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz", + "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001157", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.591", + "escalade": "^3.1.1", + "node-releases": "^1.1.66" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001159", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz", + "integrity": "sha512-w9Ph56jOsS8RL20K9cLND3u/+5WASWdhC/PPrf+V3/HsM3uHOavWOR1Xzakbv4Puo/srmPHudkmCRWM7Aq+/UA==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true + }, + "command-line-usage": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", + "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", + "dev": true, + "requires": { + "array-back": "^4.0.1", + "chalk": "^2.4.2", + "table-layout": "^1.0.1", + "typical": "^5.2.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.604", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.604.tgz", + "integrity": "sha512-Mk5ODhvz+ZaQpVFXbu51wGW94P3CnkJIDkEQGxXMl6Ix6R0PG4IFWz83WbqFEZjN1UksoTsmmzKY5SmUrEvNJQ==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.3.2.tgz", + "integrity": "sha512-G28GCrglCAH6+EqMN2D+Q2wCUS1O1vVQJBn8ME2I/Api41YBe4vLWWRBOUbwDH7vwzSZdljxwTRVqnf+sm6XqQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.0.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "envinfo": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz", + "integrity": "sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "dev": true + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "is-core-module": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", + "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "loader-runner": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.1.0.tgz", + "integrity": "sha512-oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node-releases": { + "version": "1.1.67", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", + "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "rechoir": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", + "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, + "reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true + }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "table-layout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.1.tgz", + "integrity": "sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q==", + "dev": true, + "requires": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + } + }, + "tapable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.1.1.tgz", + "integrity": "sha512-Wib1S8m2wdpLbmQz0RBEVosIyvb/ykfKXf3ZIDqvWoMg/zTNm6G/tDSuUM61J1kNCDXWJrLHGSFeMhAG+gAGpQ==", + "dev": true + }, + "terser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.0.tgz", + "integrity": "sha512-eopt1Gf7/AQyPhpygdKePTzaet31TvQxXvrf7xYUvD/d8qkCJm4SKPDzu+GHK5ZaYTn8rvttfqaZc3swK21e5g==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.0.3.tgz", + "integrity": "sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ==", + "dev": true, + "requires": { + "jest-worker": "^26.6.1", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.8" + }, + "dependencies": { + "p-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", + "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + } + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true + }, + "watchpack": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.0.1.tgz", + "integrity": "sha512-vO8AKGX22ZRo6PiOFM9dC0re8IcKh8Kd/aH2zeqUc6w4/jBGlTy2P7fTC6ekT0NjVeGjgU2dGC5rNstKkeLEQg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "webpack": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.6.0.tgz", + "integrity": "sha512-SIeFuBhuheKElRbd84O35UhKc0nxlgSwtzm2ksZ0BVhRJqxVJxEguT/pYhfiR0le/pxTa1VsCp7EOYyTsa6XOA==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.45", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^8.0.4", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.3.1", + "eslint-scope": "^5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.1.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "pkg-dir": "^4.2.0", + "schema-utils": "^3.0.0", + "tapable": "^2.0.0", + "terser-webpack-plugin": "^5.0.3", + "watchpack": "^2.0.0", + "webpack-sources": "^2.1.1" + } + }, + "webpack-cli": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.2.0.tgz", + "integrity": "sha512-EIl3k88vaF4fSxWSgtAQR+VwicfLMTZ9amQtqS4o+TDPW9HGaEpbFBbAZ4A3ZOT5SOnMxNOzROsSTPiE8tBJPA==", + "dev": true, + "requires": { + "@webpack-cli/info": "^1.1.0", + "@webpack-cli/serve": "^1.1.0", + "colorette": "^1.2.1", + "command-line-usage": "^6.1.0", + "commander": "^6.2.0", + "enquirer": "^2.3.6", + "execa": "^4.1.0", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "leven": "^3.1.0", + "rechoir": "^0.7.0", + "v8-compile-cache": "^2.2.0", + "webpack-merge": "^4.2.2" + }, + "dependencies": { + "commander": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", + "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", + "dev": true + } + } + }, + "webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "webpack-sources": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", + "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", + "dev": true, + "requires": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wordwrapjs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.0.tgz", + "integrity": "sha512-Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ==", + "dev": true, + "requires": { + "reduce-flatten": "^2.0.0", + "typical": "^5.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, "ws": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 0304e2a1ac..cd25735422 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -25,11 +25,23 @@ export interface DeployProps { * @default - Defaults to us-east-1 */ readonly region?: string; + + /** + * The local WebSockets debug enpoint used by `sst start`. + * + * @default - Defaults to undefined + */ + readonly debugEndpoint?: string; } export type AppProps = cdk.AppProps; export class App extends cdk.App { + /** + * Is the app being deployed locally + */ + public readonly LOCAL: boolean = false; + /** * The app name */ @@ -45,12 +57,22 @@ export class App extends cdk.App { */ public readonly region: string; + /** + * The local WebSockets debug endpoint + */ + public readonly debugEndpoint?: string; + constructor(deployProps: DeployProps = {}, props: AppProps = {}) { super(props); this.stage = deployProps.stage || "dev"; this.name = deployProps.name || "my-app"; this.region = deployProps.region || "us-east-1"; + + if (deployProps.debugEndpoint) { + this.LOCAL = true; + this.debugEndpoint = deployProps.debugEndpoint; + } } logicalPrefixedName(logicalName: string): string { diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index 1725d6c1b5..4f874c1617 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -21,7 +21,7 @@ export class Function extends lambda.Function { ].includes(props.runtime) ) { throw new Error( - `sst.Function does not support ${props.runtime}. Nnly NodeJS runtimes are currently supported.` + `sst.Function does not support ${props.runtime}. Only NodeJS runtimes are currently supported.` ); } @@ -30,15 +30,15 @@ export class Function extends lambda.Function { throw new Error(`sst.Function only supports AssetCode type for code.`); } - if (root.stage === "local") { + if (root.LOCAL) { super(scope, id, { ...props, code: lambda.Code.fromAsset(path.resolve(__dirname, "../lambda")), handler: "lambdaStub.main", environment: { - SST_DEBUG_ENDPOINT: process.env.SST_DEBUG_ENDPOINT || "", SST_DEBUG_SRC_PATH: props.code.path, SST_DEBUG_SRC_HANDLER: props.handler, + SST_DEBUG_ENDPOINT: root.debugEndpoint || "", }, }); // func.node.defaultChild.cfnOptions.metadata = { 'sst:lambda:src': 'src/hello.handler' }; diff --git a/packages/resources/src/NodejsFunction.ts b/packages/resources/src/NodejsFunction.ts index 473a12c59a..5bc0303164 100644 --- a/packages/resources/src/NodejsFunction.ts +++ b/packages/resources/src/NodejsFunction.ts @@ -9,7 +9,7 @@ export class NodejsFunction extends lambda.NodejsFunction { constructor(scope: cdk.Construct, id: string, props?: NodejsFunctionProps) { const root = scope.node.root as App; - if (root.stage === "local") { + if (root.LOCAL) { let srcPath, srcHandler; if (props && props.entry) { const entryParts = props.entry.split("/"); @@ -29,9 +29,9 @@ export class NodejsFunction extends lambda.NodejsFunction { entry: path.resolve(__dirname, "../lambda/lambdaStub.js"), handler: "main", environment: { - SST_DEBUG_ENDPOINT: process.env.SST_DEBUG_ENDPOINT || "", SST_DEBUG_SRC_PATH: srcPath, SST_DEBUG_SRC_HANDLER: srcHandler, + SST_DEBUG_ENDPOINT: root.debugEndpoint || "", }, }); } else { diff --git a/yarn.lock b/yarn.lock index 90131f9195..b16da093d3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,450 @@ # yarn lockfile v1 +"@aws-cdk/assets@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.61.0.tgz#9702ba8ef5b3c45ec47e0530006d63dc0685a5ff" + integrity sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA== + dependencies: + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/assets@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.73.0.tgz#dcca310ac82f2e2370cb7307b227dd59e319606e" + integrity sha512-fAdRAWn/IWbalMZva86Q4BimYrwipSoqPzyC5d6fwxNmJU/QiFLMpILanS1T9a0a+yjqAqk+8pAXn44lZIOlPQ== + dependencies: + "@aws-cdk/core" "1.73.0" + "@aws-cdk/cx-api" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-apigatewayv2@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.73.0.tgz#c305288d049d9a1905642a60eedeabcfb8737df2" + integrity sha512-+++K1KADMSFGgvOaj3OwiVcNEYWUR878rqH50EDEf/UxaYky3eD0Sg255sGQWrjbi3bb60lYdzVFDjADHHnEtw== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.73.0" + "@aws-cdk/aws-cloudwatch" "1.73.0" + "@aws-cdk/aws-ec2" "1.73.0" + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-applicationautoscaling@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz#8129984ba0185bbb525fd8ef6328c5c84e51e4e5" + integrity sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-applicationautoscaling@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.73.0.tgz#2de1f609d25bd9a69c458ec06ae59820f75865f4" + integrity sha512-ROJPuj+PyrYa7/P6JoTrsFs8WMxKra1yuXZJ3r0iTrnAgCDAVCVpzmiF3Uwqw6rip1o63ZLT3fxxMeJBb2wL7Q== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.73.0" + "@aws-cdk/aws-cloudwatch" "1.73.0" + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-autoscaling-common@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz#9e7f6a8669b36001b846d90fa8cb65d8b4edb27b" + integrity sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-autoscaling-common@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.73.0.tgz#087cc95ed07cdc2e13acb770db40029e786c4c33" + integrity sha512-AJf9F9X/ktSMLj/NaX0ccPXr7VlDR6CTycpEgJZU4qbXqIW/LhIDkAhH15CNV38WYQnVDkVSQgDNfCtGaeHTqA== + dependencies: + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-certificatemanager@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.73.0.tgz#c21eb5c015985d65473429e6d1fc4184da1ac1bc" + integrity sha512-r5talegg1Z79Fo289JRgm1u6SV16I7nO4AZEmmbceDByDnXiRcnroi0o9fZTVWNUYuIwrpY4ZWR2UTKY71xYTg== + dependencies: + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/aws-lambda" "1.73.0" + "@aws-cdk/aws-route53" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudformation@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.61.0.tgz#6810e5327aa53b6d73cb337af340db152284aad7" + integrity sha512-e7mti0sWR6Sf4tav36bu379kkG5E33VMPLZaT8RkhXkIl97c1OaGHVx5G1Oe5DiHka08c+PA6da8ahkrR1wSkQ== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-sns" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-cloudwatch@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz#3c0171ca76d086da424c1b4148a53c4d68dd885a" + integrity sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-cloudwatch@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.73.0.tgz#322638c3ab86bb9a9df24ab73de532fd4c9b98ed" + integrity sha512-H6MQVtJfKAJyE6DRHe71ivFu9OjhH32VtsJUZ1xuQ/pyeoQlOQ6fj0FIjz4ObG3qDBq72SBfrbPAQ3q+2g3HfA== + dependencies: + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-codeguruprofiler@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz#1ace4c61a4a7b916f4dbe28070b5b914949e6f06" + integrity sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + +"@aws-cdk/aws-codeguruprofiler@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.73.0.tgz#9dd6c9ff00aee0f05f6b9602521a44893aef5ecd" + integrity sha512-WcJjCT+4zd3v4E1nWUagpHKWVIafM4vMe+4DAcBXZbhqXww1yyXUxf1A08uc7zQGko3hvIoHp41maAiT5G6/nw== + dependencies: + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-dynamodb@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.61.0.tgz#3d9b1ffd6eb965152a2456de1b08625d3f3ee907" + integrity sha512-Qd87xJNTjCRBQ//H4WA6Lif3VuA9QuyKyterlmTGnmrUsAqubkKtxu/lLvMp0gQb9LzjQ5Hn9238v1s8rDBDlw== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/custom-resources" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-ec2@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz#d39b1f5356c57089b963bbe4644adc02fd12a4bf" + integrity sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/aws-ssm" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + "@aws-cdk/region-info" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-ec2@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.73.0.tgz#8c1fd13ff399d4acb7ab7a18e431bf72b0f8dea2" + integrity sha512-XjGcHaVlaJNorXv8qrRt7k8rPLE8yV1SAJWHY/SIf7NzIg9Y6lFV0eVkBU5RINfuD9GIW8YbgtLGE5ZpfZ5YkA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.73.0" + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/aws-kms" "1.73.0" + "@aws-cdk/aws-logs" "1.73.0" + "@aws-cdk/aws-s3" "1.73.0" + "@aws-cdk/aws-s3-assets" "1.73.0" + "@aws-cdk/aws-ssm" "1.73.0" + "@aws-cdk/cloud-assembly-schema" "1.73.0" + "@aws-cdk/core" "1.73.0" + "@aws-cdk/cx-api" "1.73.0" + "@aws-cdk/region-info" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-efs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz#c4d66d0d928c01c8018c1c8bc75a1c5097d649ce" + integrity sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg== + dependencies: + "@aws-cdk/aws-ec2" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-efs@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.73.0.tgz#48d87d8f2135f6d138a81fa8ff4f26715c672913" + integrity sha512-sWUU+nhJ78T5tElLy7BqUrlXj4kGv43nrkWE5+jbTaLRFEpJPM6fMuWfzcJGfkqpbppjc/aySyCPbvEcWb7bDQ== + dependencies: + "@aws-cdk/aws-ec2" "1.73.0" + "@aws-cdk/aws-kms" "1.73.0" + "@aws-cdk/cloud-assembly-schema" "1.73.0" + "@aws-cdk/core" "1.73.0" + "@aws-cdk/cx-api" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-events@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" + integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-events@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.73.0.tgz#178a5e2ff0f11f20d79a722785b05491f16c95bc" + integrity sha512-CvOAIAt00xCWKC2U96NAgA8xIkzrNkwalCXk3RIRjz9xEVge5w3lQ7Hy6lSSbhyTfxQV01bppZO2ExaeAKOjOg== + dependencies: + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-iam@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" + integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== + dependencies: + "@aws-cdk/core" "1.61.0" + "@aws-cdk/region-info" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-iam@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.73.0.tgz#a53f3bbaa99b67b56e38fe167a5c867fe339c01f" + integrity sha512-o2pdkEEdwluZegLqlbhfK0zgIbezvKDf5UfwBKloeFSDcGOZAaqF25OPfrTowXkIakHbw2wMswbUlmUgYdmNFg== + dependencies: + "@aws-cdk/core" "1.73.0" + "@aws-cdk/region-info" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-kms@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" + integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-kms@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.73.0.tgz#76127abeaebaea93adf00aef85ff294494218c0e" + integrity sha512-4aQRGBktM1IYqM0Qa/yio1/sjNuokMdLQNrjTVxyX+AZE2/zPqARe+Gm6sFpPJ9Is8oy0YzecP80QZSCnWpCnQ== + dependencies: + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda-nodejs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.61.0.tgz#1c1b34fdf34ab585ea1ff5c0687e0d69a6a0d310" + integrity sha512-a6fiCqk4IjNjVGG8K+AjQviavno1SQwHcdf5JBYhXez7aJ8f2oTZHf5HC2UPTk3Ohu6HsIHds8KXbz4uqLp2Sw== + dependencies: + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-lambda@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz#65b2fb456f6c2d0566401bd3d265f5bae47d6346" + integrity sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.61.0" + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-codeguruprofiler" "1.61.0" + "@aws-cdk/aws-ec2" "1.61.0" + "@aws-cdk/aws-efs" "1.61.0" + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/aws-sqs" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-lambda@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.73.0.tgz#2561d19ff9435ec0ef94d5050b92e914bf3c6aec" + integrity sha512-ffw/hK1DbbSXklry4sDmJ+c+dX3Zl+I9DsYNjf0h2aonEKZo+g7ItAhVzr5s1kDnKatlEJTNOw1Kdpn20vFZHg== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.73.0" + "@aws-cdk/aws-cloudwatch" "1.73.0" + "@aws-cdk/aws-codeguruprofiler" "1.73.0" + "@aws-cdk/aws-ec2" "1.73.0" + "@aws-cdk/aws-efs" "1.73.0" + "@aws-cdk/aws-events" "1.73.0" + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/aws-logs" "1.73.0" + "@aws-cdk/aws-s3" "1.73.0" + "@aws-cdk/aws-s3-assets" "1.73.0" + "@aws-cdk/aws-sqs" "1.73.0" + "@aws-cdk/core" "1.73.0" + "@aws-cdk/cx-api" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-logs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz#430bb5fc87ec606416ffb0869f04754185092a21" + integrity sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-s3-assets" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-logs@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.73.0.tgz#dbb01b6dfe144ab74bf37cce55cc39239bb2390a" + integrity sha512-pn/JUpz49nmP81rOW66S36HbBF+RCKDWyN+rQ671zr62T9EPJuRLWxbdahcnAN1eqyCsZEs9PpCvTnacj9ue7w== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.73.0" + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/aws-s3-assets" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-route53@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.73.0.tgz#c804c9ee74ec0f607b940774994a80afa96b2f5a" + integrity sha512-M3298IkyLELVTlA+2g0EdEV+bYTkC3xzTiHwoqcJeCd8T7IY8E89f73bsweX8k49cu1soPAUvXVJuUfxb6WYEg== + dependencies: + "@aws-cdk/aws-ec2" "1.73.0" + "@aws-cdk/aws-logs" "1.73.0" + "@aws-cdk/cloud-assembly-schema" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3-assets@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz#8512ac0e16818bc78eff010d15d6cc99a7d8fccf" + integrity sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA== + dependencies: + "@aws-cdk/assets" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-s3" "1.61.0" + "@aws-cdk/core" "1.61.0" + "@aws-cdk/cx-api" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-s3-assets@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.73.0.tgz#fdfae26ef5356368809e0d93f908650c6abb10b5" + integrity sha512-CvxEIBOOj7tYMrMimPSsbtQ4OOurhUIiNIhM38gisTXYgSchKTeDzKJAbalfYOZSNJNEx1wMNL/+oKV/gDtrHQ== + dependencies: + "@aws-cdk/assets" "1.73.0" + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/aws-kms" "1.73.0" + "@aws-cdk/aws-s3" "1.73.0" + "@aws-cdk/core" "1.73.0" + "@aws-cdk/cx-api" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" + integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== + dependencies: + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-s3@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.73.0.tgz#bb31d0eb2b2f204420c388015f26998fc702d67c" + integrity sha512-n0PuTBhqFxRfvGHhWk54R2hfS24b5DFkqP2PvTIwRFCBqmSUnRLF8I+GZ4c6RNxfVfDSzQBcGvfuCuNTL1KZLQ== + dependencies: + "@aws-cdk/aws-events" "1.73.0" + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/aws-kms" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sns@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.61.0.tgz#c82f9b224b7ebf3e48cd9433456156e5d3f1df89" + integrity sha512-jmJmZXidJAJTg4lPnxMm26QR3ovMYb/89NBWnIRwGdVGcZ7nrWUkC0JNPQMbP+EvUFdh/9xdFVP4JvvzZzoy0w== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-events" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/aws-sqs" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-sqs@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz#b2d1d7a5d27d36d1580a3cb500daf417037da492" + integrity sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-sqs@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.73.0.tgz#a6108c57d6d22f91c9b11ecc0bb8072bc3d4cef1" + integrity sha512-15stNsRYY165Vvx/io6TnTSMHar10diLa2k2BTiL+PNzl18SfEIOoTy97PCvJp9AK2Ob9dyQwwjsiutTU56IbA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.73.0" + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/aws-kms" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ssm@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz#229308cfce757f8b3f75d12bf276ce4f8042076f" + integrity sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg== + dependencies: + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-kms" "1.61.0" + "@aws-cdk/cloud-assembly-schema" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + +"@aws-cdk/aws-ssm@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.73.0.tgz#29e5e0126f00b6bd91b58a6757ede3c579d9b9ea" + integrity sha512-6fobpaL7hh0My/aypd7DHQ+sLuPcb7Taj8ngjmoh8H0muiAkfj4O0CjN3cd+kCYRr8T4zRh546ypvFfsc9WEHQ== + dependencies: + "@aws-cdk/aws-iam" "1.73.0" + "@aws-cdk/aws-kms" "1.73.0" + "@aws-cdk/cloud-assembly-schema" "1.73.0" + "@aws-cdk/core" "1.73.0" + constructs "^3.2.0" + "@aws-cdk/cfnspec@1.61.0": version "1.61.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.61.0.tgz#69e998ab83c0a478b76e1c5deb8484171dfd95f9" @@ -17,6 +461,14 @@ jsonschema "^1.2.5" semver "^7.2.2" +"@aws-cdk/cloud-assembly-schema@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.73.0.tgz#75e27dddda8f65708a5f649760e92031c296416f" + integrity sha512-3m5nJDLSApAuUMra2WrQF7GHt6xgxqFET91WShtKtj48brZk4MBJ3dLre2LjDVsmMMOVdd6FpjY7tE5C1v9Hyw== + dependencies: + jsonschema "^1.4.0" + semver "^7.3.2" + "@aws-cdk/cloudformation-diff@1.61.0": version "1.61.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.61.0.tgz#8acb549fd1dd819aa61dfed47e011b44827045a8" @@ -40,6 +492,33 @@ fs-extra "^9.0.1" minimatch "^3.0.4" +"@aws-cdk/core@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.73.0.tgz#15ef8230da5bb9d92b5e1c5f3cff0ade01a2b093" + integrity sha512-CTmUXo0hAH78/uvzfmgW4gQKLnusMxULIEUjd0wnfs/6/zoB6n2DP+lmkr/7Vp4aIG9nNNirThdHesidlx79eA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.73.0" + "@aws-cdk/cx-api" "1.73.0" + "@aws-cdk/region-info" "1.73.0" + "@balena/dockerignore" "^1.0.2" + constructs "^3.2.0" + fs-extra "^9.0.1" + ignore "^5.1.8" + minimatch "^3.0.4" + +"@aws-cdk/custom-resources@1.61.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.61.0.tgz#03749f4122e46504fd1b3b3b9a11aa3578f269bf" + integrity sha512-etnHE7A0+J5w1L/m+KxEbPQ7LgtVYvEUV6naqRp5uIsTBaJ9sCQ+q43Y3Fj+g3NMigm8C2fKg5FmiFE6kiymDQ== + dependencies: + "@aws-cdk/aws-cloudformation" "1.61.0" + "@aws-cdk/aws-iam" "1.61.0" + "@aws-cdk/aws-lambda" "1.61.0" + "@aws-cdk/aws-logs" "1.61.0" + "@aws-cdk/aws-sns" "1.61.0" + "@aws-cdk/core" "1.61.0" + constructs "^3.0.4" + "@aws-cdk/cx-api@1.61.0": version "1.61.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" @@ -48,11 +527,24 @@ "@aws-cdk/cloud-assembly-schema" "1.61.0" semver "^7.2.2" +"@aws-cdk/cx-api@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.73.0.tgz#328562689a55fba184324ec2b83b3c72b88a1a3f" + integrity sha512-HlBpbIGu71xXdfJ1De1/HOMK5LWzKK9J7REho0oncpAO9KDxAbk+1aOFUZJVEgTsJSUUzLMSIUtDIo+ev70HGA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.73.0" + semver "^7.3.2" + "@aws-cdk/region-info@1.61.0": version "1.61.0" resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== +"@aws-cdk/region-info@1.73.0": + version "1.73.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.73.0.tgz#9f4444c57fa1d366205409a0a9e6b09f27b428cb" + integrity sha512-jWfx5mY3BaCVeFnbdUxrDTczVTuwShdtu3WkV2vL+W3VnUMzLPKbCPiGY8GutSBlWvoFpubsbVqx8Kw61pRgdQ== + "@babel/cli@^7.10.5": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.5.tgz#57df2987c8cf89d0fc7d4b157ec59d7619f1b77a" @@ -927,6 +1419,11 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -3319,6 +3816,11 @@ constructs@^3.0.4: resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== +constructs@^3.2.0: + version "3.2.38" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.38.tgz#40168c33ddf56948ece101775223e5c0f2cb3388" + integrity sha512-SNGmqvT9yFtkrIX+FjIg7GaFvzhffis46kYvknr3vVjuCXSSAtivPS28mxAOdv23Faq6FBU0+cX/XdZa2g/glw== + conventional-changelog-angular@^5.0.3: version "5.0.11" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.11.tgz#99a3ca16e4a5305e0c2c2fae3ef74fd7631fc3fb" @@ -4882,6 +5384,11 @@ ignore@^4.0.3, ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" @@ -5856,6 +6363,11 @@ jsonschema@^1.2.5: resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== +jsonschema@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -9206,6 +9718,11 @@ ws@^7.2.3: resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== +ws@^7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.0.tgz#a5dd76a24197940d4a8bb9e0e152bb4503764da7" + integrity sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ== + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" From cc1e8abfe61b9230633bc9d26af4c6c6830335e3 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 23 Nov 2020 21:58:38 -0500 Subject: [PATCH 131/481] Adding stub lambda to build script --- packages/resources/lambda/package-lock.json | 1151 ----------------- packages/resources/lambda/package.json | 15 - .../lambda/{lambdaStub.js => stub/index.js} | 0 packages/resources/lambda/stub/package.json | 14 + packages/resources/lambda/stub/yarn.lock | 8 + packages/resources/package.json | 2 +- packages/resources/src/App.ts | 4 +- packages/resources/src/Function.ts | 7 +- packages/resources/src/NodejsFunction.ts | 5 +- 9 files changed, 32 insertions(+), 1174 deletions(-) delete mode 100644 packages/resources/lambda/package-lock.json delete mode 100644 packages/resources/lambda/package.json rename packages/resources/lambda/{lambdaStub.js => stub/index.js} (100%) create mode 100644 packages/resources/lambda/stub/package.json create mode 100644 packages/resources/lambda/stub/yarn.lock diff --git a/packages/resources/lambda/package-lock.json b/packages/resources/lambda/package-lock.json deleted file mode 100644 index 23dd524b0e..0000000000 --- a/packages/resources/lambda/package-lock.json +++ /dev/null @@ -1,1151 +0,0 @@ -{ - "name": "lambda", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/eslint": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.5.tgz", - "integrity": "sha512-Dc6ar9x16BdaR3NSxSF7T4IjL9gxxViJq8RmFd+2UAyA+K6ck2W+gUwfgpG/y9TPyUuBL35109bbULpEynvltA==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.45", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.45.tgz", - "integrity": "sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", - "dev": true - }, - "@types/node": { - "version": "14.14.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.9.tgz", - "integrity": "sha512-JsoLXFppG62tWTklIoO4knA+oDTYsmqWxHRvd4lpmfQRNhX6osheUOWETP2jMoV/2bEHuMra8Pp3Dmo/stBFcw==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webpack-cli/info": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.1.0.tgz", - "integrity": "sha512-uNWSdaYHc+f3LdIZNwhdhkjjLDDl3jP2+XBqAq9H8DjrJUvlOKdP8TNruy1yEaDfgpAIgbSAN7pye4FEHg9tYQ==", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.1.0.tgz", - "integrity": "sha512-7RfnMXCpJ/NThrhq4gYQYILB18xWyoQcBey81oIyVbmgbc6m5ZHHyFK+DyH7pLHJf0p14MxL4mTsoPAgBSTpIg==", - "dev": true - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "acorn": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz", - "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "array-back": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz", - "integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==", - "dev": true - }, - "browserslist": { - "version": "4.14.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz", - "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001157", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.591", - "escalade": "^3.1.1", - "node-releases": "^1.1.66" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001159", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz", - "integrity": "sha512-w9Ph56jOsS8RL20K9cLND3u/+5WASWdhC/PPrf+V3/HsM3uHOavWOR1Xzakbv4Puo/srmPHudkmCRWM7Aq+/UA==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", - "dev": true - }, - "command-line-usage": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", - "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", - "dev": true, - "requires": { - "array-back": "^4.0.1", - "chalk": "^2.4.2", - "table-layout": "^1.0.1", - "typical": "^5.2.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.604", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.604.tgz", - "integrity": "sha512-Mk5ODhvz+ZaQpVFXbu51wGW94P3CnkJIDkEQGxXMl6Ix6R0PG4IFWz83WbqFEZjN1UksoTsmmzKY5SmUrEvNJQ==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.3.2.tgz", - "integrity": "sha512-G28GCrglCAH6+EqMN2D+Q2wCUS1O1vVQJBn8ME2I/Api41YBe4vLWWRBOUbwDH7vwzSZdljxwTRVqnf+sm6XqQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.0.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "envinfo": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz", - "integrity": "sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", - "dev": true - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, - "is-core-module": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", - "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "loader-runner": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.1.0.tgz", - "integrity": "sha512-oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node-releases": { - "version": "1.1.67", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", - "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "rechoir": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", - "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", - "dev": true, - "requires": { - "resolve": "^1.9.0" - } - }, - "reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true - }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "table-layout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.1.tgz", - "integrity": "sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q==", - "dev": true, - "requires": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - } - }, - "tapable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.1.1.tgz", - "integrity": "sha512-Wib1S8m2wdpLbmQz0RBEVosIyvb/ykfKXf3ZIDqvWoMg/zTNm6G/tDSuUM61J1kNCDXWJrLHGSFeMhAG+gAGpQ==", - "dev": true - }, - "terser": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.0.tgz", - "integrity": "sha512-eopt1Gf7/AQyPhpygdKePTzaet31TvQxXvrf7xYUvD/d8qkCJm4SKPDzu+GHK5ZaYTn8rvttfqaZc3swK21e5g==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.0.3.tgz", - "integrity": "sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ==", - "dev": true, - "requires": { - "jest-worker": "^26.6.1", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.3.8" - }, - "dependencies": { - "p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - }, - "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", - "dev": true - }, - "watchpack": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.0.1.tgz", - "integrity": "sha512-vO8AKGX22ZRo6PiOFM9dC0re8IcKh8Kd/aH2zeqUc6w4/jBGlTy2P7fTC6ekT0NjVeGjgU2dGC5rNstKkeLEQg==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "webpack": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.6.0.tgz", - "integrity": "sha512-SIeFuBhuheKElRbd84O35UhKc0nxlgSwtzm2ksZ0BVhRJqxVJxEguT/pYhfiR0le/pxTa1VsCp7EOYyTsa6XOA==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.45", - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^8.0.4", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.3.1", - "eslint-scope": "^5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.1.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "pkg-dir": "^4.2.0", - "schema-utils": "^3.0.0", - "tapable": "^2.0.0", - "terser-webpack-plugin": "^5.0.3", - "watchpack": "^2.0.0", - "webpack-sources": "^2.1.1" - } - }, - "webpack-cli": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.2.0.tgz", - "integrity": "sha512-EIl3k88vaF4fSxWSgtAQR+VwicfLMTZ9amQtqS4o+TDPW9HGaEpbFBbAZ4A3ZOT5SOnMxNOzROsSTPiE8tBJPA==", - "dev": true, - "requires": { - "@webpack-cli/info": "^1.1.0", - "@webpack-cli/serve": "^1.1.0", - "colorette": "^1.2.1", - "command-line-usage": "^6.1.0", - "commander": "^6.2.0", - "enquirer": "^2.3.6", - "execa": "^4.1.0", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "leven": "^3.1.0", - "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", - "webpack-merge": "^4.2.2" - }, - "dependencies": { - "commander": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", - "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", - "dev": true - } - } - }, - "webpack-merge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", - "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "webpack-sources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", - "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wordwrapjs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.0.tgz", - "integrity": "sha512-Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ==", - "dev": true, - "requires": { - "reduce-flatten": "^2.0.0", - "typical": "^5.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", - "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==" - } - } -} diff --git a/packages/resources/lambda/package.json b/packages/resources/lambda/package.json deleted file mode 100644 index d9dfe9df61..0000000000 --- a/packages/resources/lambda/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "lambda", - "version": "1.0.0", - "description": "", - "main": "lambdaStub.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "ws": "^7.4.0" - } -} diff --git a/packages/resources/lambda/lambdaStub.js b/packages/resources/lambda/stub/index.js similarity index 100% rename from packages/resources/lambda/lambdaStub.js rename to packages/resources/lambda/stub/index.js diff --git a/packages/resources/lambda/stub/package.json b/packages/resources/lambda/stub/package.json new file mode 100644 index 0000000000..f12680ecda --- /dev/null +++ b/packages/resources/lambda/stub/package.json @@ -0,0 +1,14 @@ +{ + "name": "stub", + "version": "1.0.0", + "description": "Lambda function that's deployed while developing locally", + "main": "index.js", + "author": { + "name": "Anomaly Innovations", + "url": "https://anoma.ly" + }, + "license": "MIT", + "dependencies": { + "ws": "^7.4.0" + } +} diff --git a/packages/resources/lambda/stub/yarn.lock b/packages/resources/lambda/stub/yarn.lock new file mode 100644 index 0000000000..3a0796466e --- /dev/null +++ b/packages/resources/lambda/stub/yarn.lock @@ -0,0 +1,8 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +ws@^7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.0.tgz#a5dd76a24197940d4a8bb9e0e152bb4503764da7" + integrity sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ== diff --git a/packages/resources/package.json b/packages/resources/package.json index c13034c4f9..2833d3732e 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -7,7 +7,7 @@ "types": "dist/index.d.ts", "scripts": { "watch": "tsc --watch --rootDir src --outDir dist", - "build": "tsc --rootDir src --outDir dist", + "build": "tsc --rootDir src --outDir dist && cd lambda/stub && yarn", "clean": "rm -rf dist", "prepare": "node scripts/aws-cdk-version-check.js && npm run build" }, diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index cd25735422..4249399dd6 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -40,7 +40,7 @@ export class App extends cdk.App { /** * Is the app being deployed locally */ - public readonly LOCAL: boolean = false; + public readonly local: boolean = false; /** * The app name @@ -70,7 +70,7 @@ export class App extends cdk.App { this.region = deployProps.region || "us-east-1"; if (deployProps.debugEndpoint) { - this.LOCAL = true; + this.local = true; this.debugEndpoint = deployProps.debugEndpoint; } } diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index 4f874c1617..e35cc8a6ef 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -1,6 +1,7 @@ import path from "path"; import * as cdk from "@aws-cdk/core"; import * as lambda from "@aws-cdk/aws-lambda"; + import { App } from "./App"; export type FunctionProps = lambda.FunctionProps; @@ -30,11 +31,11 @@ export class Function extends lambda.Function { throw new Error(`sst.Function only supports AssetCode type for code.`); } - if (root.LOCAL) { + if (root.local) { super(scope, id, { ...props, - code: lambda.Code.fromAsset(path.resolve(__dirname, "../lambda")), - handler: "lambdaStub.main", + code: lambda.Code.fromAsset(path.resolve(__dirname, "../lambda/stub")), + handler: "index.main", environment: { SST_DEBUG_SRC_PATH: props.code.path, SST_DEBUG_SRC_HANDLER: props.handler, diff --git a/packages/resources/src/NodejsFunction.ts b/packages/resources/src/NodejsFunction.ts index 5bc0303164..833d7818e7 100644 --- a/packages/resources/src/NodejsFunction.ts +++ b/packages/resources/src/NodejsFunction.ts @@ -1,6 +1,7 @@ import path from "path"; import * as cdk from "@aws-cdk/core"; import * as lambda from "@aws-cdk/aws-lambda-nodejs"; + import { App } from "./App"; export type NodejsFunctionProps = lambda.NodejsFunctionProps; @@ -9,7 +10,7 @@ export class NodejsFunction extends lambda.NodejsFunction { constructor(scope: cdk.Construct, id: string, props?: NodejsFunctionProps) { const root = scope.node.root as App; - if (root.LOCAL) { + if (root.local) { let srcPath, srcHandler; if (props && props.entry) { const entryParts = props.entry.split("/"); @@ -26,7 +27,7 @@ export class NodejsFunction extends lambda.NodejsFunction { } super(scope, id, { ...props, - entry: path.resolve(__dirname, "../lambda/lambdaStub.js"), + entry: path.resolve(__dirname, "../lambda/stub/index.js"), handler: "main", environment: { SST_DEBUG_SRC_PATH: srcPath, From f29a40a6bc33d5c99e1589a08057acc3fde1819d Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 23 Nov 2020 22:00:34 -0500 Subject: [PATCH 132/481] Update sst-cdk version to 1.74.0 --- packages/cli/package-lock.json | 10843 ---------------- packages/cli/package.json | 12 +- packages/cli/test/base-ts/package.json | 6 +- packages/cli/test/base/package.json | 6 +- packages/cli/test/config/package.json | 2 +- packages/cli/test/context/package.json | 2 +- packages/cli/test/jest-ts/package.json | 12 +- packages/cli/test/jest/package.json | 6 +- .../cli/test/stack-no-prefix/package.json | 2 +- packages/cli/test/start/package.json | 8 +- packages/core/package.json | 2 +- packages/resources/package.json | 6 +- yarn.lock | 1251 +- 13 files changed, 612 insertions(+), 11546 deletions(-) delete mode 100644 packages/cli/package-lock.json diff --git a/packages/cli/package-lock.json b/packages/cli/package-lock.json deleted file mode 100644 index 732d14bb42..0000000000 --- a/packages/cli/package-lock.json +++ /dev/null @@ -1,10843 +0,0 @@ -{ - "name": "@serverless-stack/cli", - "version": "0.4.3", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@aws-cdk/assets": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.61.0.tgz", - "integrity": "sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA==", - "requires": { - "@aws-cdk/core": "1.61.0", - "@aws-cdk/cx-api": "1.61.0", - "constructs": "^3.0.4" - } - }, - "@aws-cdk/aws-apigatewayv2": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.73.0.tgz", - "integrity": "sha512-+++K1KADMSFGgvOaj3OwiVcNEYWUR878rqH50EDEf/UxaYky3eD0Sg255sGQWrjbi3bb60lYdzVFDjADHHnEtw==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.73.0", - "@aws-cdk/aws-cloudwatch": "1.73.0", - "@aws-cdk/aws-ec2": "1.73.0", - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - }, - "dependencies": { - "@aws-cdk/assets": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.73.0.tgz", - "integrity": "sha512-fAdRAWn/IWbalMZva86Q4BimYrwipSoqPzyC5d6fwxNmJU/QiFLMpILanS1T9a0a+yjqAqk+8pAXn44lZIOlPQ==", - "requires": { - "@aws-cdk/core": "1.73.0", - "@aws-cdk/cx-api": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-cloudwatch": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.73.0.tgz", - "integrity": "sha512-H6MQVtJfKAJyE6DRHe71ivFu9OjhH32VtsJUZ1xuQ/pyeoQlOQ6fj0FIjz4ObG3qDBq72SBfrbPAQ3q+2g3HfA==", - "requires": { - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-ec2": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.73.0.tgz", - "integrity": "sha512-XjGcHaVlaJNorXv8qrRt7k8rPLE8yV1SAJWHY/SIf7NzIg9Y6lFV0eVkBU5RINfuD9GIW8YbgtLGE5ZpfZ5YkA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.73.0", - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/aws-kms": "1.73.0", - "@aws-cdk/aws-logs": "1.73.0", - "@aws-cdk/aws-s3": "1.73.0", - "@aws-cdk/aws-s3-assets": "1.73.0", - "@aws-cdk/aws-ssm": "1.73.0", - "@aws-cdk/cloud-assembly-schema": "1.73.0", - "@aws-cdk/core": "1.73.0", - "@aws-cdk/cx-api": "1.73.0", - "@aws-cdk/region-info": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-events": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.73.0.tgz", - "integrity": "sha512-CvOAIAt00xCWKC2U96NAgA8xIkzrNkwalCXk3RIRjz9xEVge5w3lQ7Hy6lSSbhyTfxQV01bppZO2ExaeAKOjOg==", - "requires": { - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-iam": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.73.0.tgz", - "integrity": "sha512-o2pdkEEdwluZegLqlbhfK0zgIbezvKDf5UfwBKloeFSDcGOZAaqF25OPfrTowXkIakHbw2wMswbUlmUgYdmNFg==", - "requires": { - "@aws-cdk/core": "1.73.0", - "@aws-cdk/region-info": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-kms": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.73.0.tgz", - "integrity": "sha512-4aQRGBktM1IYqM0Qa/yio1/sjNuokMdLQNrjTVxyX+AZE2/zPqARe+Gm6sFpPJ9Is8oy0YzecP80QZSCnWpCnQ==", - "requires": { - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-logs": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.73.0.tgz", - "integrity": "sha512-pn/JUpz49nmP81rOW66S36HbBF+RCKDWyN+rQ671zr62T9EPJuRLWxbdahcnAN1eqyCsZEs9PpCvTnacj9ue7w==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.73.0", - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/aws-s3-assets": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-s3": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.73.0.tgz", - "integrity": "sha512-n0PuTBhqFxRfvGHhWk54R2hfS24b5DFkqP2PvTIwRFCBqmSUnRLF8I+GZ4c6RNxfVfDSzQBcGvfuCuNTL1KZLQ==", - "requires": { - "@aws-cdk/aws-events": "1.73.0", - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/aws-kms": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-s3-assets": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.73.0.tgz", - "integrity": "sha512-CvxEIBOOj7tYMrMimPSsbtQ4OOurhUIiNIhM38gisTXYgSchKTeDzKJAbalfYOZSNJNEx1wMNL/+oKV/gDtrHQ==", - "requires": { - "@aws-cdk/assets": "1.73.0", - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/aws-kms": "1.73.0", - "@aws-cdk/aws-s3": "1.73.0", - "@aws-cdk/core": "1.73.0", - "@aws-cdk/cx-api": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-ssm": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.73.0.tgz", - "integrity": "sha512-6fobpaL7hh0My/aypd7DHQ+sLuPcb7Taj8ngjmoh8H0muiAkfj4O0CjN3cd+kCYRr8T4zRh546ypvFfsc9WEHQ==", - "requires": { - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/aws-kms": "1.73.0", - "@aws-cdk/cloud-assembly-schema": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/cloud-assembly-schema": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.73.0.tgz", - "integrity": "sha512-3m5nJDLSApAuUMra2WrQF7GHt6xgxqFET91WShtKtj48brZk4MBJ3dLre2LjDVsmMMOVdd6FpjY7tE5C1v9Hyw==", - "requires": { - "jsonschema": "^1.4.0", - "semver": "^7.3.2" - }, - "dependencies": { - "jsonschema": { - "version": "1.4.0", - "bundled": true - }, - "semver": { - "version": "7.3.2", - "bundled": true - } - } - }, - "@aws-cdk/core": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.73.0.tgz", - "integrity": "sha512-CTmUXo0hAH78/uvzfmgW4gQKLnusMxULIEUjd0wnfs/6/zoB6n2DP+lmkr/7Vp4aIG9nNNirThdHesidlx79eA==", - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.73.0", - "@aws-cdk/cx-api": "1.73.0", - "@aws-cdk/region-info": "1.73.0", - "@balena/dockerignore": "^1.0.2", - "constructs": "^3.2.0", - "fs-extra": "^9.0.1", - "ignore": "^5.1.8", - "minimatch": "^3.0.4" - }, - "dependencies": { - "@balena/dockerignore": { - "version": "1.0.2", - "bundled": true - }, - "at-least-node": { - "version": "1.0.0", - "bundled": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "fs-extra": { - "version": "9.0.1", - "bundled": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "bundled": true - }, - "ignore": { - "version": "5.1.8", - "bundled": true - }, - "jsonfile": { - "version": "6.0.1", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "universalify": { - "version": "1.0.0", - "bundled": true - } - } - }, - "@aws-cdk/cx-api": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.73.0.tgz", - "integrity": "sha512-HlBpbIGu71xXdfJ1De1/HOMK5LWzKK9J7REho0oncpAO9KDxAbk+1aOFUZJVEgTsJSUUzLMSIUtDIo+ev70HGA==", - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.73.0", - "semver": "^7.3.2" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "bundled": true - } - } - }, - "@aws-cdk/region-info": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.73.0.tgz", - "integrity": "sha512-jWfx5mY3BaCVeFnbdUxrDTczVTuwShdtu3WkV2vL+W3VnUMzLPKbCPiGY8GutSBlWvoFpubsbVqx8Kw61pRgdQ==" - } - } - }, - "@aws-cdk/aws-applicationautoscaling": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz", - "integrity": "sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw==", - "requires": { - "@aws-cdk/aws-autoscaling-common": "1.61.0", - "@aws-cdk/aws-cloudwatch": "1.61.0", - "@aws-cdk/aws-iam": "1.61.0", - "@aws-cdk/core": "1.61.0", - "constructs": "^3.0.4" - } - }, - "@aws-cdk/aws-autoscaling-common": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz", - "integrity": "sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ==", - "requires": { - "@aws-cdk/aws-iam": "1.61.0", - "@aws-cdk/core": "1.61.0", - "constructs": "^3.0.4" - } - }, - "@aws-cdk/aws-certificatemanager": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.73.0.tgz", - "integrity": "sha512-r5talegg1Z79Fo289JRgm1u6SV16I7nO4AZEmmbceDByDnXiRcnroi0o9fZTVWNUYuIwrpY4ZWR2UTKY71xYTg==", - "requires": { - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/aws-lambda": "1.73.0", - "@aws-cdk/aws-route53": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - }, - "dependencies": { - "@aws-cdk/assets": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.73.0.tgz", - "integrity": "sha512-fAdRAWn/IWbalMZva86Q4BimYrwipSoqPzyC5d6fwxNmJU/QiFLMpILanS1T9a0a+yjqAqk+8pAXn44lZIOlPQ==", - "requires": { - "@aws-cdk/core": "1.73.0", - "@aws-cdk/cx-api": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-applicationautoscaling": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.73.0.tgz", - "integrity": "sha512-ROJPuj+PyrYa7/P6JoTrsFs8WMxKra1yuXZJ3r0iTrnAgCDAVCVpzmiF3Uwqw6rip1o63ZLT3fxxMeJBb2wL7Q==", - "requires": { - "@aws-cdk/aws-autoscaling-common": "1.73.0", - "@aws-cdk/aws-cloudwatch": "1.73.0", - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-autoscaling-common": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.73.0.tgz", - "integrity": "sha512-AJf9F9X/ktSMLj/NaX0ccPXr7VlDR6CTycpEgJZU4qbXqIW/LhIDkAhH15CNV38WYQnVDkVSQgDNfCtGaeHTqA==", - "requires": { - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-cloudwatch": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.73.0.tgz", - "integrity": "sha512-H6MQVtJfKAJyE6DRHe71ivFu9OjhH32VtsJUZ1xuQ/pyeoQlOQ6fj0FIjz4ObG3qDBq72SBfrbPAQ3q+2g3HfA==", - "requires": { - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-codeguruprofiler": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.73.0.tgz", - "integrity": "sha512-WcJjCT+4zd3v4E1nWUagpHKWVIafM4vMe+4DAcBXZbhqXww1yyXUxf1A08uc7zQGko3hvIoHp41maAiT5G6/nw==", - "requires": { - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-ec2": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.73.0.tgz", - "integrity": "sha512-XjGcHaVlaJNorXv8qrRt7k8rPLE8yV1SAJWHY/SIf7NzIg9Y6lFV0eVkBU5RINfuD9GIW8YbgtLGE5ZpfZ5YkA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.73.0", - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/aws-kms": "1.73.0", - "@aws-cdk/aws-logs": "1.73.0", - "@aws-cdk/aws-s3": "1.73.0", - "@aws-cdk/aws-s3-assets": "1.73.0", - "@aws-cdk/aws-ssm": "1.73.0", - "@aws-cdk/cloud-assembly-schema": "1.73.0", - "@aws-cdk/core": "1.73.0", - "@aws-cdk/cx-api": "1.73.0", - "@aws-cdk/region-info": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-efs": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-efs/-/aws-efs-1.73.0.tgz", - "integrity": "sha512-sWUU+nhJ78T5tElLy7BqUrlXj4kGv43nrkWE5+jbTaLRFEpJPM6fMuWfzcJGfkqpbppjc/aySyCPbvEcWb7bDQ==", - "requires": { - "@aws-cdk/aws-ec2": "1.73.0", - "@aws-cdk/aws-kms": "1.73.0", - "@aws-cdk/cloud-assembly-schema": "1.73.0", - "@aws-cdk/core": "1.73.0", - "@aws-cdk/cx-api": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-events": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.73.0.tgz", - "integrity": "sha512-CvOAIAt00xCWKC2U96NAgA8xIkzrNkwalCXk3RIRjz9xEVge5w3lQ7Hy6lSSbhyTfxQV01bppZO2ExaeAKOjOg==", - "requires": { - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-iam": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.73.0.tgz", - "integrity": "sha512-o2pdkEEdwluZegLqlbhfK0zgIbezvKDf5UfwBKloeFSDcGOZAaqF25OPfrTowXkIakHbw2wMswbUlmUgYdmNFg==", - "requires": { - "@aws-cdk/core": "1.73.0", - "@aws-cdk/region-info": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-kms": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.73.0.tgz", - "integrity": "sha512-4aQRGBktM1IYqM0Qa/yio1/sjNuokMdLQNrjTVxyX+AZE2/zPqARe+Gm6sFpPJ9Is8oy0YzecP80QZSCnWpCnQ==", - "requires": { - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-lambda": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda/-/aws-lambda-1.73.0.tgz", - "integrity": "sha512-ffw/hK1DbbSXklry4sDmJ+c+dX3Zl+I9DsYNjf0h2aonEKZo+g7ItAhVzr5s1kDnKatlEJTNOw1Kdpn20vFZHg==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.73.0", - "@aws-cdk/aws-cloudwatch": "1.73.0", - "@aws-cdk/aws-codeguruprofiler": "1.73.0", - "@aws-cdk/aws-ec2": "1.73.0", - "@aws-cdk/aws-efs": "1.73.0", - "@aws-cdk/aws-events": "1.73.0", - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/aws-logs": "1.73.0", - "@aws-cdk/aws-s3": "1.73.0", - "@aws-cdk/aws-s3-assets": "1.73.0", - "@aws-cdk/aws-sqs": "1.73.0", - "@aws-cdk/core": "1.73.0", - "@aws-cdk/cx-api": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-logs": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.73.0.tgz", - "integrity": "sha512-pn/JUpz49nmP81rOW66S36HbBF+RCKDWyN+rQ671zr62T9EPJuRLWxbdahcnAN1eqyCsZEs9PpCvTnacj9ue7w==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.73.0", - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/aws-s3-assets": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-s3": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.73.0.tgz", - "integrity": "sha512-n0PuTBhqFxRfvGHhWk54R2hfS24b5DFkqP2PvTIwRFCBqmSUnRLF8I+GZ4c6RNxfVfDSzQBcGvfuCuNTL1KZLQ==", - "requires": { - "@aws-cdk/aws-events": "1.73.0", - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/aws-kms": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-s3-assets": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.73.0.tgz", - "integrity": "sha512-CvxEIBOOj7tYMrMimPSsbtQ4OOurhUIiNIhM38gisTXYgSchKTeDzKJAbalfYOZSNJNEx1wMNL/+oKV/gDtrHQ==", - "requires": { - "@aws-cdk/assets": "1.73.0", - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/aws-kms": "1.73.0", - "@aws-cdk/aws-s3": "1.73.0", - "@aws-cdk/core": "1.73.0", - "@aws-cdk/cx-api": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-sqs": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sqs/-/aws-sqs-1.73.0.tgz", - "integrity": "sha512-15stNsRYY165Vvx/io6TnTSMHar10diLa2k2BTiL+PNzl18SfEIOoTy97PCvJp9AK2Ob9dyQwwjsiutTU56IbA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.73.0", - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/aws-kms": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-ssm": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.73.0.tgz", - "integrity": "sha512-6fobpaL7hh0My/aypd7DHQ+sLuPcb7Taj8ngjmoh8H0muiAkfj4O0CjN3cd+kCYRr8T4zRh546ypvFfsc9WEHQ==", - "requires": { - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/aws-kms": "1.73.0", - "@aws-cdk/cloud-assembly-schema": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/cloud-assembly-schema": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.73.0.tgz", - "integrity": "sha512-3m5nJDLSApAuUMra2WrQF7GHt6xgxqFET91WShtKtj48brZk4MBJ3dLre2LjDVsmMMOVdd6FpjY7tE5C1v9Hyw==", - "requires": { - "jsonschema": "^1.4.0", - "semver": "^7.3.2" - }, - "dependencies": { - "jsonschema": { - "version": "1.4.0", - "bundled": true - }, - "semver": { - "version": "7.3.2", - "bundled": true - } - } - }, - "@aws-cdk/core": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.73.0.tgz", - "integrity": "sha512-CTmUXo0hAH78/uvzfmgW4gQKLnusMxULIEUjd0wnfs/6/zoB6n2DP+lmkr/7Vp4aIG9nNNirThdHesidlx79eA==", - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.73.0", - "@aws-cdk/cx-api": "1.73.0", - "@aws-cdk/region-info": "1.73.0", - "@balena/dockerignore": "^1.0.2", - "constructs": "^3.2.0", - "fs-extra": "^9.0.1", - "ignore": "^5.1.8", - "minimatch": "^3.0.4" - }, - "dependencies": { - "@balena/dockerignore": { - "version": "1.0.2", - "bundled": true - }, - "at-least-node": { - "version": "1.0.0", - "bundled": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "fs-extra": { - "version": "9.0.1", - "bundled": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "bundled": true - }, - "ignore": { - "version": "5.1.8", - "bundled": true - }, - "jsonfile": { - "version": "6.0.1", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "universalify": { - "version": "1.0.0", - "bundled": true - } - } - }, - "@aws-cdk/cx-api": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.73.0.tgz", - "integrity": "sha512-HlBpbIGu71xXdfJ1De1/HOMK5LWzKK9J7REho0oncpAO9KDxAbk+1aOFUZJVEgTsJSUUzLMSIUtDIo+ev70HGA==", - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.73.0", - "semver": "^7.3.2" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "bundled": true - } - } - }, - "@aws-cdk/region-info": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.73.0.tgz", - "integrity": "sha512-jWfx5mY3BaCVeFnbdUxrDTczVTuwShdtu3WkV2vL+W3VnUMzLPKbCPiGY8GutSBlWvoFpubsbVqx8Kw61pRgdQ==" - } - } - }, - "@aws-cdk/aws-cloudformation": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.61.0.tgz", - "integrity": "sha512-e7mti0sWR6Sf4tav36bu379kkG5E33VMPLZaT8RkhXkIl97c1OaGHVx5G1Oe5DiHka08c+PA6da8ahkrR1wSkQ==", - "requires": { - "@aws-cdk/aws-iam": "1.61.0", - "@aws-cdk/aws-lambda": "1.61.0", - "@aws-cdk/aws-s3": "1.61.0", - "@aws-cdk/aws-sns": "1.61.0", - "@aws-cdk/core": "1.61.0", - "@aws-cdk/cx-api": "1.61.0", - "constructs": "^3.0.4" - } - }, - "@aws-cdk/aws-cloudwatch": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz", - "integrity": "sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug==", - "requires": { - "@aws-cdk/aws-iam": "1.61.0", - "@aws-cdk/core": "1.61.0", - "constructs": "^3.0.4" - } - }, - "@aws-cdk/aws-codeguruprofiler": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz", - "integrity": "sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w==", - "requires": { - "@aws-cdk/aws-iam": "1.61.0", - "@aws-cdk/core": "1.61.0" - } - }, - "@aws-cdk/aws-dynamodb": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.61.0.tgz", - "integrity": "sha512-Qd87xJNTjCRBQ//H4WA6Lif3VuA9QuyKyterlmTGnmrUsAqubkKtxu/lLvMp0gQb9LzjQ5Hn9238v1s8rDBDlw==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.61.0", - "@aws-cdk/aws-cloudwatch": "1.61.0", - "@aws-cdk/aws-iam": "1.61.0", - "@aws-cdk/aws-kms": "1.61.0", - "@aws-cdk/aws-lambda": "1.61.0", - "@aws-cdk/core": "1.61.0", - "@aws-cdk/custom-resources": "1.61.0", - "constructs": "^3.0.4" - } - }, - "@aws-cdk/aws-ec2": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz", - "integrity": "sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.61.0", - "@aws-cdk/aws-iam": "1.61.0", - "@aws-cdk/aws-kms": "1.61.0", - "@aws-cdk/aws-logs": "1.61.0", - "@aws-cdk/aws-s3": "1.61.0", - "@aws-cdk/aws-s3-assets": "1.61.0", - "@aws-cdk/aws-ssm": "1.61.0", - "@aws-cdk/cloud-assembly-schema": "1.61.0", - "@aws-cdk/core": "1.61.0", - "@aws-cdk/cx-api": "1.61.0", - "@aws-cdk/region-info": "1.61.0", - "constructs": "^3.0.4" - } - }, - "@aws-cdk/aws-efs": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz", - "integrity": "sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg==", - "requires": { - "@aws-cdk/aws-ec2": "1.61.0", - "@aws-cdk/aws-kms": "1.61.0", - "@aws-cdk/cloud-assembly-schema": "1.61.0", - "@aws-cdk/core": "1.61.0", - "@aws-cdk/cx-api": "1.61.0", - "constructs": "^3.0.4" - } - }, - "@aws-cdk/aws-events": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz", - "integrity": "sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw==", - "requires": { - "@aws-cdk/aws-iam": "1.61.0", - "@aws-cdk/core": "1.61.0", - "constructs": "^3.0.4" - } - }, - "@aws-cdk/aws-iam": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz", - "integrity": "sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg==", - "requires": { - "@aws-cdk/core": "1.61.0", - "@aws-cdk/region-info": "1.61.0", - "constructs": "^3.0.4" - } - }, - "@aws-cdk/aws-kms": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz", - "integrity": "sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA==", - "requires": { - "@aws-cdk/aws-iam": "1.61.0", - "@aws-cdk/core": "1.61.0", - "constructs": "^3.0.4" - } - }, - "@aws-cdk/aws-lambda": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz", - "integrity": "sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.61.0", - "@aws-cdk/aws-cloudwatch": "1.61.0", - "@aws-cdk/aws-codeguruprofiler": "1.61.0", - "@aws-cdk/aws-ec2": "1.61.0", - "@aws-cdk/aws-efs": "1.61.0", - "@aws-cdk/aws-events": "1.61.0", - "@aws-cdk/aws-iam": "1.61.0", - "@aws-cdk/aws-logs": "1.61.0", - "@aws-cdk/aws-s3": "1.61.0", - "@aws-cdk/aws-s3-assets": "1.61.0", - "@aws-cdk/aws-sqs": "1.61.0", - "@aws-cdk/core": "1.61.0", - "@aws-cdk/cx-api": "1.61.0", - "constructs": "^3.0.4" - } - }, - "@aws-cdk/aws-logs": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz", - "integrity": "sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.61.0", - "@aws-cdk/aws-iam": "1.61.0", - "@aws-cdk/aws-s3-assets": "1.61.0", - "@aws-cdk/core": "1.61.0", - "constructs": "^3.0.4" - } - }, - "@aws-cdk/aws-route53": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53/-/aws-route53-1.73.0.tgz", - "integrity": "sha512-M3298IkyLELVTlA+2g0EdEV+bYTkC3xzTiHwoqcJeCd8T7IY8E89f73bsweX8k49cu1soPAUvXVJuUfxb6WYEg==", - "requires": { - "@aws-cdk/aws-ec2": "1.73.0", - "@aws-cdk/aws-logs": "1.73.0", - "@aws-cdk/cloud-assembly-schema": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - }, - "dependencies": { - "@aws-cdk/assets": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.73.0.tgz", - "integrity": "sha512-fAdRAWn/IWbalMZva86Q4BimYrwipSoqPzyC5d6fwxNmJU/QiFLMpILanS1T9a0a+yjqAqk+8pAXn44lZIOlPQ==", - "requires": { - "@aws-cdk/core": "1.73.0", - "@aws-cdk/cx-api": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-cloudwatch": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.73.0.tgz", - "integrity": "sha512-H6MQVtJfKAJyE6DRHe71ivFu9OjhH32VtsJUZ1xuQ/pyeoQlOQ6fj0FIjz4ObG3qDBq72SBfrbPAQ3q+2g3HfA==", - "requires": { - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-ec2": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.73.0.tgz", - "integrity": "sha512-XjGcHaVlaJNorXv8qrRt7k8rPLE8yV1SAJWHY/SIf7NzIg9Y6lFV0eVkBU5RINfuD9GIW8YbgtLGE5ZpfZ5YkA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.73.0", - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/aws-kms": "1.73.0", - "@aws-cdk/aws-logs": "1.73.0", - "@aws-cdk/aws-s3": "1.73.0", - "@aws-cdk/aws-s3-assets": "1.73.0", - "@aws-cdk/aws-ssm": "1.73.0", - "@aws-cdk/cloud-assembly-schema": "1.73.0", - "@aws-cdk/core": "1.73.0", - "@aws-cdk/cx-api": "1.73.0", - "@aws-cdk/region-info": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-events": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.73.0.tgz", - "integrity": "sha512-CvOAIAt00xCWKC2U96NAgA8xIkzrNkwalCXk3RIRjz9xEVge5w3lQ7Hy6lSSbhyTfxQV01bppZO2ExaeAKOjOg==", - "requires": { - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-iam": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.73.0.tgz", - "integrity": "sha512-o2pdkEEdwluZegLqlbhfK0zgIbezvKDf5UfwBKloeFSDcGOZAaqF25OPfrTowXkIakHbw2wMswbUlmUgYdmNFg==", - "requires": { - "@aws-cdk/core": "1.73.0", - "@aws-cdk/region-info": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-kms": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.73.0.tgz", - "integrity": "sha512-4aQRGBktM1IYqM0Qa/yio1/sjNuokMdLQNrjTVxyX+AZE2/zPqARe+Gm6sFpPJ9Is8oy0YzecP80QZSCnWpCnQ==", - "requires": { - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-logs": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.73.0.tgz", - "integrity": "sha512-pn/JUpz49nmP81rOW66S36HbBF+RCKDWyN+rQ671zr62T9EPJuRLWxbdahcnAN1eqyCsZEs9PpCvTnacj9ue7w==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.73.0", - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/aws-s3-assets": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-s3": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.73.0.tgz", - "integrity": "sha512-n0PuTBhqFxRfvGHhWk54R2hfS24b5DFkqP2PvTIwRFCBqmSUnRLF8I+GZ4c6RNxfVfDSzQBcGvfuCuNTL1KZLQ==", - "requires": { - "@aws-cdk/aws-events": "1.73.0", - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/aws-kms": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-s3-assets": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.73.0.tgz", - "integrity": "sha512-CvxEIBOOj7tYMrMimPSsbtQ4OOurhUIiNIhM38gisTXYgSchKTeDzKJAbalfYOZSNJNEx1wMNL/+oKV/gDtrHQ==", - "requires": { - "@aws-cdk/assets": "1.73.0", - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/aws-kms": "1.73.0", - "@aws-cdk/aws-s3": "1.73.0", - "@aws-cdk/core": "1.73.0", - "@aws-cdk/cx-api": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/aws-ssm": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.73.0.tgz", - "integrity": "sha512-6fobpaL7hh0My/aypd7DHQ+sLuPcb7Taj8ngjmoh8H0muiAkfj4O0CjN3cd+kCYRr8T4zRh546ypvFfsc9WEHQ==", - "requires": { - "@aws-cdk/aws-iam": "1.73.0", - "@aws-cdk/aws-kms": "1.73.0", - "@aws-cdk/cloud-assembly-schema": "1.73.0", - "@aws-cdk/core": "1.73.0", - "constructs": "^3.2.0" - } - }, - "@aws-cdk/cloud-assembly-schema": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.73.0.tgz", - "integrity": "sha512-3m5nJDLSApAuUMra2WrQF7GHt6xgxqFET91WShtKtj48brZk4MBJ3dLre2LjDVsmMMOVdd6FpjY7tE5C1v9Hyw==", - "requires": { - "jsonschema": "^1.4.0", - "semver": "^7.3.2" - }, - "dependencies": { - "jsonschema": { - "version": "1.4.0", - "bundled": true - }, - "semver": { - "version": "7.3.2", - "bundled": true - } - } - }, - "@aws-cdk/core": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.73.0.tgz", - "integrity": "sha512-CTmUXo0hAH78/uvzfmgW4gQKLnusMxULIEUjd0wnfs/6/zoB6n2DP+lmkr/7Vp4aIG9nNNirThdHesidlx79eA==", - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.73.0", - "@aws-cdk/cx-api": "1.73.0", - "@aws-cdk/region-info": "1.73.0", - "@balena/dockerignore": "^1.0.2", - "constructs": "^3.2.0", - "fs-extra": "^9.0.1", - "ignore": "^5.1.8", - "minimatch": "^3.0.4" - }, - "dependencies": { - "@balena/dockerignore": { - "version": "1.0.2", - "bundled": true - }, - "at-least-node": { - "version": "1.0.0", - "bundled": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "fs-extra": { - "version": "9.0.1", - "bundled": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "bundled": true - }, - "ignore": { - "version": "5.1.8", - "bundled": true - }, - "jsonfile": { - "version": "6.0.1", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "universalify": { - "version": "1.0.0", - "bundled": true - } - } - }, - "@aws-cdk/cx-api": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.73.0.tgz", - "integrity": "sha512-HlBpbIGu71xXdfJ1De1/HOMK5LWzKK9J7REho0oncpAO9KDxAbk+1aOFUZJVEgTsJSUUzLMSIUtDIo+ev70HGA==", - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.73.0", - "semver": "^7.3.2" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "bundled": true - } - } - }, - "@aws-cdk/region-info": { - "version": "1.73.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.73.0.tgz", - "integrity": "sha512-jWfx5mY3BaCVeFnbdUxrDTczVTuwShdtu3WkV2vL+W3VnUMzLPKbCPiGY8GutSBlWvoFpubsbVqx8Kw61pRgdQ==" - } - } - }, - "@aws-cdk/aws-s3": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz", - "integrity": "sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg==", - "requires": { - "@aws-cdk/aws-events": "1.61.0", - "@aws-cdk/aws-iam": "1.61.0", - "@aws-cdk/aws-kms": "1.61.0", - "@aws-cdk/core": "1.61.0", - "constructs": "^3.0.4" - } - }, - "@aws-cdk/aws-s3-assets": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz", - "integrity": "sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA==", - "requires": { - "@aws-cdk/assets": "1.61.0", - "@aws-cdk/aws-iam": "1.61.0", - "@aws-cdk/aws-kms": "1.61.0", - "@aws-cdk/aws-s3": "1.61.0", - "@aws-cdk/core": "1.61.0", - "@aws-cdk/cx-api": "1.61.0", - "constructs": "^3.0.4" - } - }, - "@aws-cdk/aws-sns": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns/-/aws-sns-1.61.0.tgz", - "integrity": "sha512-jmJmZXidJAJTg4lPnxMm26QR3ovMYb/89NBWnIRwGdVGcZ7nrWUkC0JNPQMbP+EvUFdh/9xdFVP4JvvzZzoy0w==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.61.0", - "@aws-cdk/aws-events": "1.61.0", - "@aws-cdk/aws-iam": "1.61.0", - "@aws-cdk/aws-kms": "1.61.0", - "@aws-cdk/aws-sqs": "1.61.0", - "@aws-cdk/core": "1.61.0", - "constructs": "^3.0.4" - } - }, - "@aws-cdk/aws-sqs": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz", - "integrity": "sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.61.0", - "@aws-cdk/aws-iam": "1.61.0", - "@aws-cdk/aws-kms": "1.61.0", - "@aws-cdk/core": "1.61.0", - "constructs": "^3.0.4" - } - }, - "@aws-cdk/aws-ssm": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz", - "integrity": "sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg==", - "requires": { - "@aws-cdk/aws-iam": "1.61.0", - "@aws-cdk/aws-kms": "1.61.0", - "@aws-cdk/cloud-assembly-schema": "1.61.0", - "@aws-cdk/core": "1.61.0", - "constructs": "^3.0.4" - } - }, - "@aws-cdk/cfnspec": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.61.0.tgz", - "integrity": "sha512-Ss5N3unY6iVh9SjYAYvTyvhdb7Kaz6dVFeV8K68UGewiFcHpC5tQi3YmlVBw3HCgKoRt20emiHAfmdfeGO/PUQ==", - "requires": { - "md5": "^2.3.0" - } - }, - "@aws-cdk/cloud-assembly-schema": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz", - "integrity": "sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ==", - "requires": { - "jsonschema": "^1.2.5", - "semver": "^7.2.2" - }, - "dependencies": { - "jsonschema": { - "version": "1.2.6", - "bundled": true - }, - "semver": { - "version": "7.3.2", - "bundled": true - } - } - }, - "@aws-cdk/cloudformation-diff": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.61.0.tgz", - "integrity": "sha512-TrrmywhYkXxGNTmDd1k2biJMVtEvb0QcbZ/IGM6biMXIJ+wsjw/n5snvwciQ8/PHZmsUYk67qulGdso1rpy06Q==", - "requires": { - "@aws-cdk/cfnspec": "1.61.0", - "colors": "^1.4.0", - "diff": "^4.0.2", - "fast-deep-equal": "^3.1.3", - "string-width": "^4.2.0", - "table": "^5.4.6" - } - }, - "@aws-cdk/core": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.61.0.tgz", - "integrity": "sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw==", - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.61.0", - "@aws-cdk/cx-api": "1.61.0", - "constructs": "^3.0.4", - "fs-extra": "^9.0.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "at-least-node": { - "version": "1.0.0", - "bundled": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "fs-extra": { - "version": "9.0.1", - "bundled": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "bundled": true - }, - "jsonfile": { - "version": "6.0.1", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "universalify": { - "version": "1.0.0", - "bundled": true - } - } - }, - "@aws-cdk/custom-resources": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/custom-resources/-/custom-resources-1.61.0.tgz", - "integrity": "sha512-etnHE7A0+J5w1L/m+KxEbPQ7LgtVYvEUV6naqRp5uIsTBaJ9sCQ+q43Y3Fj+g3NMigm8C2fKg5FmiFE6kiymDQ==", - "requires": { - "@aws-cdk/aws-cloudformation": "1.61.0", - "@aws-cdk/aws-iam": "1.61.0", - "@aws-cdk/aws-lambda": "1.61.0", - "@aws-cdk/aws-logs": "1.61.0", - "@aws-cdk/aws-sns": "1.61.0", - "@aws-cdk/core": "1.61.0", - "constructs": "^3.0.4" - } - }, - "@aws-cdk/cx-api": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz", - "integrity": "sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g==", - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.61.0", - "semver": "^7.2.2" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "bundled": true - } - } - }, - "@aws-cdk/region-info": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.61.0.tgz", - "integrity": "sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw==" - }, - "@babel/cli": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.12.7.tgz", - "integrity": "sha512-vE1fidQsaWnQVs4SItkuCdi3+uXqjbhw4cIKp8aawKxOnTnlvxYMzXSeMAqo6alldQRFQYb198YQfW0Sp1jl5Q==", - "requires": { - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents", - "chokidar": "^3.4.0", - "commander": "^4.0.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.0.0", - "lodash": "^4.17.19", - "make-dir": "^2.1.0", - "slash": "^2.0.0", - "source-map": "^0.5.0" - } - }, - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/compat-data": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", - "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==" - }, - "@babel/core": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.7.tgz", - "integrity": "sha512-tRKx9B53kJe8NCGGIxEQb2Bkr0riUIEuN7Sc1fxhs5H8lKlCWUvQCSNMVIB0Meva7hcbCRJ76de15KoLltdoqw==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.7", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@babel/eslint-parser": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.12.1.tgz", - "integrity": "sha512-cc7WQHnHQY3++/bghgbDtPx+5bf6xTsokyGzV6Qzh65NLz/unv+mPQuACkQ9GFhIhcTFv6yqwNaEcfX7EkOEsg==", - "requires": { - "eslint-scope": "5.1.0", - "eslint-visitor-keys": "^1.3.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/eslint-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.12.1.tgz", - "integrity": "sha512-rOjrD5yupTYCO4x0kEbQmi/NsaD+VGOD/9Cvso64WMVPY2y6o5Nvw2sqFWdeSEBdR1Dsa07YjplBs067x5YbXg==", - "requires": { - "eslint-rule-composer": "^0.3.0" - } - }, - "@babel/generator": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", - "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", - "requires": { - "@babel/types": "^7.12.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", - "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", - "requires": { - "@babel/compat-data": "^7.12.5", - "@babel/helper-validator-option": "^7.12.1", - "browserslist": "^4.14.5", - "semver": "^5.5.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", - "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "regexpu-core": "^4.7.1" - } - }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", - "requires": { - "@babel/types": "^7.12.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", - "requires": { - "@babel/types": "^7.12.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz", - "integrity": "sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==", - "requires": { - "@babel/types": "^7.12.7" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", - "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@babel/helper-validator-option": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", - "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==" - }, - "@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", - "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } - } - }, - "@babel/parser": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz", - "integrity": "sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==" - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", - "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", - "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", - "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", - "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.12.1", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", - "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-identifier": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", - "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", - "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", - "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/preset-env": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.7.tgz", - "integrity": "sha512-OnNdfAr1FUQg7ksb7bmbKoby4qFOHw6DKWWUNB9KqnnCldxhxJlP+21dpyaWFmf2h0rTbOkXJtAGevY3XW1eew==", - "requires": { - "@babel/compat-data": "^7.12.7", - "@babel/helper-compilation-targets": "^7.12.5", - "@babel/helper-module-imports": "^7.12.5", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-option": "^7.12.1", - "@babel/plugin-proposal-async-generator-functions": "^7.12.1", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-dynamic-import": "^7.12.1", - "@babel/plugin-proposal-export-namespace-from": "^7.12.1", - "@babel/plugin-proposal-json-strings": "^7.12.1", - "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-numeric-separator": "^7.12.7", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.12.1", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-async-to-generator": "^7.12.1", - "@babel/plugin-transform-block-scoped-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.1", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-computed-properties": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-dotall-regex": "^7.12.1", - "@babel/plugin-transform-duplicate-keys": "^7.12.1", - "@babel/plugin-transform-exponentiation-operator": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-function-name": "^7.12.1", - "@babel/plugin-transform-literals": "^7.12.1", - "@babel/plugin-transform-member-expression-literals": "^7.12.1", - "@babel/plugin-transform-modules-amd": "^7.12.1", - "@babel/plugin-transform-modules-commonjs": "^7.12.1", - "@babel/plugin-transform-modules-systemjs": "^7.12.1", - "@babel/plugin-transform-modules-umd": "^7.12.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", - "@babel/plugin-transform-new-target": "^7.12.1", - "@babel/plugin-transform-object-super": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-property-literals": "^7.12.1", - "@babel/plugin-transform-regenerator": "^7.12.1", - "@babel/plugin-transform-reserved-words": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/plugin-transform-sticky-regex": "^7.12.7", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/plugin-transform-typeof-symbol": "^7.12.1", - "@babel/plugin-transform-unicode-escapes": "^7.12.1", - "@babel/plugin-transform-unicode-regex": "^7.12.1", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.12.7", - "core-js-compat": "^3.7.0", - "semver": "^5.5.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" - } - }, - "@babel/traverse": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.7.tgz", - "integrity": "sha512-nMWaqsQEeSvMNypswUDzjqQ+0rR6pqCtoQpsqGJC4/Khm9cISwPTSpai57F6/jDaOoEGz8yE/WxcO3PV6tKSmQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@babel/types": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.7.tgz", - "integrity": "sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@eslint/eslintrc": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz", - "integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==", - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "requires": { - "type-fest": "^0.8.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==" - }, - "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - } - } - }, - "@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "requires": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "requires": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - } - }, - "@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "requires": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - } - }, - "@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "requires": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - } - }, - "@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "node-notifier": "^8.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", - "requires": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - } - }, - "@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz", - "integrity": "sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w==", - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "@serverless-stack/core": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@serverless-stack/core/-/core-0.4.3.tgz", - "integrity": "sha512-R+iUsOKMYFof+nu4O9VhZrNmiJs3ap6sxuKjXfiUwTI6Iy8wCFE5aIb3Wu0EIBmfeVe7vR4PPH9TYjh3kJ4UdA==", - "requires": { - "aws-sdk": "^2.761.0", - "chalk": "^4.1.0", - "sst-cdk": "1.61.0-rc.25" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - }, - "sst-cdk": { - "version": "1.61.0-rc.25", - "resolved": "https://registry.npmjs.org/sst-cdk/-/sst-cdk-1.61.0-rc.25.tgz", - "integrity": "sha512-Vc9pRpTIV0xUBZHK6Qj3Xrb/LCPiXw2nVJaWZPiSiUc2mi566KsxpmWFvjqrYXKFesRSwUoIVgfEwop12CiLzw==", - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.61.0", - "@aws-cdk/cloudformation-diff": "1.61.0", - "@aws-cdk/cx-api": "1.61.0", - "@aws-cdk/region-info": "1.61.0", - "archiver": "^4.0.2", - "aws-sdk": "^2.739.0", - "camelcase": "^6.0.0", - "cdk-assets": "1.61.0", - "colors": "^1.4.0", - "decamelize": "^4.0.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "json-diff": "^0.5.4", - "minimatch": ">=3.0", - "promptly": "^3.0.3", - "proxy-agent": "^3.1.1", - "semver": "^7.2.2", - "source-map-support": "^0.5.19", - "table": "^5.4.6", - "uuid": "^8.3.0", - "wrap-ansi": "^7.0.0", - "yaml": "^1.10.0", - "yargs": "^15.4.1" - } - }, - "uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==" - } - } - }, - "@serverless-stack/resources": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@serverless-stack/resources/-/resources-0.4.3.tgz", - "integrity": "sha512-cYE2aTHbToj71xZyEbCMH5+5jZEHx2ebL/gA5eEC0JUnlrfCIt6K3buO4nIKvOY01hQD/kS6OLM40x6keV2F3A==", - "requires": { - "@aws-cdk/core": "1.61.0" - } - }, - "@sinonjs/commons": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", - "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==", - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@types/babel__core": { - "version": "7.1.12", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", - "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.15.tgz", - "integrity": "sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A==", - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==" - }, - "@types/graceful-fs": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz", - "integrity": "sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg==", - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "26.0.15", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.15.tgz", - "integrity": "sha512-s2VMReFXRg9XXxV+CW9e5Nz8fH2K1aEhwgjUqPPbQd7g95T0laAcvLv032EhFHIa5GHsZ8W7iJEQVaJq6k3Gog==", - "requires": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" - } - }, - "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==" - }, - "@types/node": { - "version": "14.14.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.9.tgz", - "integrity": "sha512-JsoLXFppG62tWTklIoO4knA+oDTYsmqWxHRvd4lpmfQRNhX6osheUOWETP2jMoV/2bEHuMra8Pp3Dmo/stBFcw==" - }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" - }, - "@types/prettier": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.5.tgz", - "integrity": "sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ==" - }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==" - }, - "@types/yargs": { - "version": "15.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.10.tgz", - "integrity": "sha512-z8PNtlhrj7eJNLmrAivM7rjBESG6JwC5xP3RVk12i/8HVP7Xnx/sEmERnRImyEuUaJfO942X0qMOYsoupaJbZQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==" - }, - "@typescript-eslint/eslint-plugin": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz", - "integrity": "sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==", - "requires": { - "@typescript-eslint/experimental-utils": "3.10.1", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", - "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz", - "integrity": "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==", - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "3.10.1", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-visitor-keys": "^1.1.0" - } - }, - "@typescript-eslint/types": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", - "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==" - }, - "@typescript-eslint/typescript-estree": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", - "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", - "requires": { - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/visitor-keys": "3.10.1", - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", - "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==" - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" - }, - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "requires": { - "type-fest": "^0.11.0" - }, - "dependencies": { - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" - } - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "archiver": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-4.0.2.tgz", - "integrity": "sha512-B9IZjlGwaxF33UN4oPbfBkyA4V1SxNLeIhR1qY8sRXSsbdUkEHrrOvwlYFPx+8uQeCe9M+FG6KgO+imDmQ79CQ==", - "requires": { - "archiver-utils": "^2.1.0", - "async": "^3.2.0", - "buffer-crc32": "^0.2.1", - "glob": "^7.1.6", - "readable-stream": "^3.6.0", - "tar-stream": "^2.1.2", - "zip-stream": "^3.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "requires": { - "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" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, - "ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "requires": { - "tslib": "^2.0.1" - } - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" - }, - "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "aws-cdk": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-1.61.0.tgz", - "integrity": "sha512-deLtRq3DkiUB/5EN8ZCWLdXY0Uhm+fUvA1WSO8lzEhl71SmD7dyEHqvl7k96WPrIhUkS0nbiz6a+WC0QadIthg==", - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.61.0", - "@aws-cdk/cloudformation-diff": "1.61.0", - "@aws-cdk/cx-api": "1.61.0", - "@aws-cdk/region-info": "1.61.0", - "archiver": "^4.0.2", - "aws-sdk": "^2.739.0", - "camelcase": "^6.0.0", - "cdk-assets": "1.61.0", - "colors": "^1.4.0", - "decamelize": "^4.0.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "json-diff": "^0.5.4", - "minimatch": ">=3.0", - "promptly": "^3.0.3", - "proxy-agent": "^3.1.1", - "semver": "^7.2.2", - "source-map-support": "^0.5.19", - "table": "^5.4.6", - "uuid": "^8.3.0", - "wrap-ansi": "^7.0.0", - "yaml": "^1.10.0", - "yargs": "^15.4.1" - }, - "dependencies": { - "@aws-cdk/cfnspec": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.61.0.tgz", - "integrity": "sha512-Ss5N3unY6iVh9SjYAYvTyvhdb7Kaz6dVFeV8K68UGewiFcHpC5tQi3YmlVBw3HCgKoRt20emiHAfmdfeGO/PUQ==", - "requires": { - "md5": "^2.3.0" - } - }, - "@aws-cdk/cloud-assembly-schema": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz", - "integrity": "sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ==", - "requires": { - "jsonschema": "^1.2.5", - "semver": "^7.2.2" - } - }, - "@aws-cdk/cloudformation-diff": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.61.0.tgz", - "integrity": "sha512-TrrmywhYkXxGNTmDd1k2biJMVtEvb0QcbZ/IGM6biMXIJ+wsjw/n5snvwciQ8/PHZmsUYk67qulGdso1rpy06Q==", - "requires": { - "@aws-cdk/cfnspec": "1.61.0", - "colors": "^1.4.0", - "diff": "^4.0.2", - "fast-deep-equal": "^3.1.3", - "string-width": "^4.2.0", - "table": "^5.4.6" - } - }, - "@aws-cdk/cx-api": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz", - "integrity": "sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g==", - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.61.0", - "semver": "^7.2.2" - } - }, - "@aws-cdk/region-info": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.61.0.tgz", - "integrity": "sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw==" - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "ajv": { - "version": "6.12.4", - "resolved": "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234", - "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "archiver": { - "version": "4.0.2", - "resolved": "https://registry.yarnpkg.com/archiver/-/archiver-4.0.2.tgz#43c72865eadb4ddaaa2fb74852527b6a450d927c", - "integrity": "sha512-B9IZjlGwaxF33UN4oPbfBkyA4V1SxNLeIhR1qY8sRXSsbdUkEHrrOvwlYFPx+8uQeCe9M+FG6KgO+imDmQ79CQ==", - "requires": { - "archiver-utils": "^2.1.0", - "async": "^3.2.0", - "buffer-crc32": "^0.2.1", - "glob": "^7.1.6", - "readable-stream": "^3.6.0", - "tar-stream": "^2.1.2", - "zip-stream": "^3.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "string_decoder": { - "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==", - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "archiver-utils": { - "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==", - "requires": { - "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" - } - }, - "ast-types": { - "version": "0.14.1", - "resolved": "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.1.tgz#0b415043770d7a2cbe4b2770271cbd7d2c9f61b9", - "integrity": "sha512-pfSiukbt23P1qMhNnsozLzhMLBs7EEeXqPyvPmnuZM+RMfwfqwDbSVKYflgGuVI7/VehR4oMks0igzdNAg4VeQ==", - "requires": { - "tslib": "^2.0.1" - } - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" - }, - "async": { - "version": "3.2.0", - "resolved": "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "aws-sdk": { - "version": "2.739.0", - "resolved": "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.739.0.tgz#10b0b29be18c3f0f85ca145cbed8b10793ddc7a7", - "integrity": "sha512-N2XyxY12gs0GJc26O8TmdT30ovEKWsPX787CNW24g0cXTCyc/Teltq0re6yGxfaH0VmN6qONNLr3E59JtJ3neA==", - "requires": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.3.2", - "xml2js": "0.4.19" - }, - "dependencies": { - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - } - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "bl": { - "version": "4.0.2", - "resolved": "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a", - "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "string_decoder": { - "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==", - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "camelcase": { - "version": "6.0.0", - "resolved": "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e", - "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==" - }, - "cdk-assets": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/cdk-assets/-/cdk-assets-1.61.0.tgz", - "integrity": "sha512-nZJNQq6vktb5j8xl+IYLWbN82E6EVANJQIZvOM1H/SLuYsjyuoAlIxBp6e50XqYRApnLYJ7BpDdAnLWOmfY8MQ==", - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.61.0", - "@aws-cdk/cx-api": "1.61.0", - "archiver": "^4.0.2", - "aws-sdk": "^2.739.0", - "glob": "^7.1.6", - "yargs": "^15.4.1" - } - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" - }, - "cli-color": { - "version": "0.1.7", - "resolved": "https://registry.yarnpkg.com/cli-color/-/cli-color-0.1.7.tgz#adc3200fa471cc211b0da7f566b71e98b9d67347", - "integrity": "sha1-rcMgD6RxzCEbDaf1ZrcemLnWc0c=", - "requires": { - "es5-ext": "0.8.x" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "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==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, - "compress-commons": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/compress-commons/-/compress-commons-3.0.0.tgz#833944d84596e537224dd91cf92f5246823d4f1d", - "integrity": "sha512-FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg==", - "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^3.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^2.3.7" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "requires": { - "buffer": "^5.1.0" - } - }, - "crc32-stream": { - "version": "3.0.1", - "resolved": "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85", - "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", - "requires": { - "crc": "^3.4.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "string_decoder": { - "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==", - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" - }, - "data-uri-to-buffer": { - "version": "1.2.0", - "resolved": "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835", - "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==" - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "degenerator": { - "version": "1.0.4", - "resolved": "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095", - "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", - "requires": { - "ast-types": "0.x.x", - "escodegen": "1.x.x", - "esprima": "3.x.x" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - }, - "difflib": { - "version": "0.2.4", - "resolved": "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e", - "integrity": "sha1-teMDYabbAjF21WKJLbhZQKcY9H4=", - "requires": { - "heap": ">= 0.2.0" - } - }, - "dreamopt": { - "version": "0.6.0", - "resolved": "https://registry.yarnpkg.com/dreamopt/-/dreamopt-0.6.0.tgz#d813ccdac8d39d8ad526775514a13dda664d6b4b", - "integrity": "sha1-2BPM2sjTnYrVJndVFKE92mZNa0s=", - "requires": { - "wordwrap": ">=0.0.2" - } - }, - "emoji-regex": { - "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": { - "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==", - "requires": { - "once": "^1.4.0" - } - }, - "es5-ext": { - "version": "0.8.2", - "resolved": "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab", - "integrity": "sha1-q6jZ4ZQ6iVrJaDemKjmz9V7NlKs=" - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "^4.0.3" - } - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - } - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "fast-deep-equal": { - "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-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "fs-constants": { - "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": { - "version": "9.0.1", - "resolved": "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "ftp": { - "version": "0.3.10", - "resolved": "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "requires": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "get-caller-file": { - "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-uri": { - "version": "2.0.4", - "resolved": "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.4.tgz#d4937ab819e218d4cb5ae18e4f5962bef169cc6a", - "integrity": "sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q==", - "requires": { - "data-uri-to-buffer": "1", - "debug": "2", - "extend": "~3.0.2", - "file-uri-to-path": "1", - "ftp": "~0.3.10", - "readable-stream": "2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "heap": { - "version": "0.2.6", - "resolved": "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac", - "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=" - }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "requires": { - "agent-base": "4", - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "https-proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81", - "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-fullwidth-code-point": { - "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==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" - }, - "json-diff": { - "version": "0.5.4", - "resolved": "https://registry.yarnpkg.com/json-diff/-/json-diff-0.5.4.tgz#7bc8198c441756632aab66c7d9189d365a7a035a", - "integrity": "sha512-q5Xmx9QXNOzOzIlMoYtLrLiu4Jl/Ce2bn0CNcv54PhyH89CI4GWlGVDye8ei2Ijt9R3U+vsWPsXpLUNob8bs8Q==", - "requires": { - "cli-color": "~0.1.6", - "difflib": "~0.2.1", - "dreamopt": "~0.6.0" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" - } - }, - "jsonschema": { - "version": "1.2.6", - "resolved": "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b", - "integrity": "sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA==" - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "requires": { - "readable-stream": "^2.0.5" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "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": { - "version": "0.0.8", - "resolved": "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "netmask": { - "version": "1.0.6", - "resolved": "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35", - "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "pac-proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz#115b1e58f92576cac2eba718593ca7b0e37de2ad", - "integrity": "sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ==", - "requires": { - "agent-base": "^4.2.0", - "debug": "^4.1.1", - "get-uri": "^2.0.0", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^3.0.0", - "pac-resolver": "^3.0.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "^4.0.1" - } - }, - "pac-resolver": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26", - "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==", - "requires": { - "co": "^4.6.0", - "degenerator": "^1.0.4", - "ip": "^1.1.5", - "netmask": "^1.0.6", - "thunkify": "^2.1.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "process-nextick-args": { - "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==" - }, - "promptly": { - "version": "3.0.3", - "resolved": "https://registry.yarnpkg.com/promptly/-/promptly-3.0.3.tgz#e178f722e73d82c60d019462044bccfdd9872f42", - "integrity": "sha512-EWnzOsxVKUjqKeE6SStH1/cO4+DE44QolaoJ4ojGd9z6pcNkpgfJKr1ncwxrOFHSTIzoudo7jG8y0re30/LO1g==", - "requires": { - "pify": "^3.0.0", - "read": "^1.0.4" - } - }, - "proxy-agent": { - "version": "3.1.1", - "resolved": "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.1.1.tgz#7e04e06bf36afa624a1540be247b47c970bd3014", - "integrity": "sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw==", - "requires": { - "agent-base": "^4.2.0", - "debug": "4", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^3.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^3.0.1", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^4.0.1" - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "raw-body": { - "version": "2.4.1", - "resolved": "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.3", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "requires": { - "mute-stream": "~0.0.4" - } - }, - "readable-stream": { - "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==", - "requires": { - "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" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - } - } - }, - "smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" - }, - "socks": { - "version": "2.3.3", - "resolved": "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3", - "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", - "requires": { - "ip": "1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "4.0.2", - "resolved": "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386", - "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", - "requires": { - "agent-base": "~4.2.1", - "socks": "~2.3.2" - }, - "dependencies": { - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", - "requires": { - "es6-promisify": "^5.0.0" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "string_decoder": { - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "tar-stream": { - "version": "2.1.3", - "resolved": "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.3.tgz#1e2022559221b7866161660f118255e20fa79e41", - "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", - "requires": { - "bl": "^4.0.1", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "string_decoder": { - "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==", - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "thunkify": { - "version": "2.1.2", - "resolved": "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d", - "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=" - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "tslib": { - "version": "2.0.1", - "resolved": "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e", - "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "universalify": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } - } - }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "uuid": { - "version": "8.3.0", - "resolved": "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea", - "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==" - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "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==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - }, - "dependencies": { - "sax": { - "version": "1.2.4", - "resolved": "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - } - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" - }, - "xregexp": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "yaml": { - "version": "1.10.0", - "resolved": "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "dependencies": { - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - } - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - } - } - }, - "zip-stream": { - "version": "3.0.1", - "resolved": "https://registry.yarnpkg.com/zip-stream/-/zip-stream-3.0.1.tgz#cb8db9d324a76c09f9b76b31a12a48638b0b9708", - "integrity": "sha512-r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ==", - "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "string_decoder": { - "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==", - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - } - } - }, - "aws-sdk": { - "version": "2.797.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.797.0.tgz", - "integrity": "sha512-fFc/2Xr7NkSXlZ9+2rCOFovA9NO1OnIyEaJFVwMM9gaqzucwRAfNNT0Pa1Kua5dhWrcf/mX0Z4mCDnTBf0/5mA==", - "requires": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.3.2", - "xml2js": "0.4.19" - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, - "babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "requires": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz", - "integrity": "sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q==", - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "requires": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "optional": true - }, - "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, - "browserslist": { - "version": "4.14.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz", - "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==", - "requires": { - "caniuse-lite": "^1.0.30001157", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.591", - "escalade": "^3.1.1", - "node-releases": "^1.1.66" - } - }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" - }, - "caniuse-lite": { - "version": "1.0.30001159", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz", - "integrity": "sha512-w9Ph56jOsS8RL20K9cLND3u/+5WASWdhC/PPrf+V3/HsM3uHOavWOR1Xzakbv4Puo/srmPHudkmCRWM7Aq+/UA==" - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "requires": { - "rsvp": "^4.8.4" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "cdk-assets": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/cdk-assets/-/cdk-assets-1.61.0.tgz", - "integrity": "sha512-nZJNQq6vktb5j8xl+IYLWbN82E6EVANJQIZvOM1H/SLuYsjyuoAlIxBp6e50XqYRApnLYJ7BpDdAnLWOmfY8MQ==", - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.61.0", - "@aws-cdk/cx-api": "1.61.0", - "archiver": "^4.0.2", - "aws-sdk": "^2.739.0", - "glob": "^7.1.6", - "yargs": "^15.4.1" - }, - "dependencies": { - "@aws-cdk/cloud-assembly-schema": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz", - "integrity": "sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ==", - "requires": { - "jsonschema": "^1.2.5", - "semver": "^7.2.2" - } - }, - "@aws-cdk/cx-api": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz", - "integrity": "sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g==", - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.61.0", - "semver": "^7.2.2" - } - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "archiver": { - "version": "4.0.2", - "resolved": "https://registry.yarnpkg.com/archiver/-/archiver-4.0.2.tgz#43c72865eadb4ddaaa2fb74852527b6a450d927c", - "integrity": "sha512-B9IZjlGwaxF33UN4oPbfBkyA4V1SxNLeIhR1qY8sRXSsbdUkEHrrOvwlYFPx+8uQeCe9M+FG6KgO+imDmQ79CQ==", - "requires": { - "archiver-utils": "^2.1.0", - "async": "^3.2.0", - "buffer-crc32": "^0.2.1", - "glob": "^7.1.6", - "readable-stream": "^3.6.0", - "tar-stream": "^2.1.2", - "zip-stream": "^3.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "string_decoder": { - "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==", - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "archiver-utils": { - "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==", - "requires": { - "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" - } - }, - "async": { - "version": "3.2.0", - "resolved": "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" - }, - "aws-sdk": { - "version": "2.739.0", - "resolved": "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.739.0.tgz#10b0b29be18c3f0f85ca145cbed8b10793ddc7a7", - "integrity": "sha512-N2XyxY12gs0GJc26O8TmdT30ovEKWsPX787CNW24g0cXTCyc/Teltq0re6yGxfaH0VmN6qONNLr3E59JtJ3neA==", - "requires": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.3.2", - "xml2js": "0.4.19" - }, - "dependencies": { - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - } - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "bl": { - "version": "4.0.2", - "resolved": "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a", - "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "string_decoder": { - "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==", - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "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==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "compress-commons": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/compress-commons/-/compress-commons-3.0.0.tgz#833944d84596e537224dd91cf92f5246823d4f1d", - "integrity": "sha512-FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg==", - "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^3.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^2.3.7" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "requires": { - "buffer": "^5.1.0" - } - }, - "crc32-stream": { - "version": "3.0.1", - "resolved": "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85", - "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", - "requires": { - "crc": "^3.4.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "string_decoder": { - "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==", - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "emoji-regex": { - "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": { - "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==", - "requires": { - "once": "^1.4.0" - } - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "fs-constants": { - "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.realpath": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "get-caller-file": { - "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==" - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-fullwidth-code-point": { - "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==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" - }, - "jsonschema": { - "version": "1.2.6", - "resolved": "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b", - "integrity": "sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA==" - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "requires": { - "readable-stream": "^2.0.5" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "process-nextick-args": { - "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==" - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "readable-stream": { - "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==", - "requires": { - "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" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "string_decoder": { - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "tar-stream": { - "version": "2.1.3", - "resolved": "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.3.tgz#1e2022559221b7866161660f118255e20fa79e41", - "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", - "requires": { - "bl": "^4.0.1", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "string_decoder": { - "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==", - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - }, - "dependencies": { - "sax": { - "version": "1.2.4", - "resolved": "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - } - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "zip-stream": { - "version": "3.0.1", - "resolved": "https://registry.yarnpkg.com/zip-stream/-/zip-stream-3.0.1.tgz#cb8db9d324a76c09f9b76b31a12a48638b0b9708", - "integrity": "sha512-r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ==", - "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "string_decoder": { - "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==", - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - } - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" - }, - "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", - "optional": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - }, - "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "optional": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "optional": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "optional": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "optional": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "optional": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "optional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "optional": true - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "optional": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "optional": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==" - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cli-color": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-0.1.7.tgz", - "integrity": "sha1-rcMgD6RxzCEbDaf1ZrcemLnWc0c=", - "requires": { - "es5-ext": "0.8.x" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "compress-commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-3.0.0.tgz", - "integrity": "sha512-FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg==", - "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^3.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^2.3.7" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "constructs": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.2.37.tgz", - "integrity": "sha512-Z2dVwVaaw8cDIOeWT5smfgC4BLhkXK7JAfUUDtoB5WhUIIUZpRX+Pd5ZE6UrEuXSQkaJHUT6MVGxgBFZR3DpxQ==" - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "core-js": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.7.0.tgz", - "integrity": "sha512-NwS7fI5M5B85EwpWuIwJN4i/fbisQUwLwiSNUWeXlkAZ0sbBjLEvLvFLf1uzAUV66PcEPt4xCGCmOZSxVf3xzA==" - }, - "core-js-compat": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.7.0.tgz", - "integrity": "sha512-V8yBI3+ZLDVomoWICO6kq/CD28Y4r1M7CWeO4AGpMdMfseu8bkSubBmUPySMGKRTS+su4XQ07zUkAsiu9FCWTg==", - "requires": { - "browserslist": "^4.14.6", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "requires": { - "buffer": "^5.1.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } - } - }, - "crc32-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", - "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", - "requires": { - "crc": "^3.4.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - } - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-uri-to-buffer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz", - "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==" - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" - }, - "decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==" - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "degenerator": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", - "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", - "requires": { - "ast-types": "0.x.x", - "escodegen": "1.x.x", - "esprima": "3.x.x" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - }, - "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==" - }, - "difflib": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", - "integrity": "sha1-teMDYabbAjF21WKJLbhZQKcY9H4=", - "requires": { - "heap": ">= 0.2.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "requires": { - "esutils": "^2.0.2" - } - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" - } - } - }, - "dreamopt": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/dreamopt/-/dreamopt-0.6.0.tgz", - "integrity": "sha1-2BPM2sjTnYrVJndVFKE92mZNa0s=", - "requires": { - "wordwrap": ">=0.0.2" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "electron-to-chromium": { - "version": "1.3.603", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.603.tgz", - "integrity": "sha512-J8OHxOeJkoSLgBXfV9BHgKccgfLMHh+CoeRo6wJsi6m0k3otaxS/5vrHpMNSEYY4MISwewqanPOuhAtuE8riQQ==" - }, - "emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es5-ext": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.8.2.tgz", - "integrity": "sha1-q6jZ4ZQ6iVrJaDemKjmz9V7NlKs=" - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "^4.0.3" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - } - } - }, - "eslint": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.14.0.tgz", - "integrity": "sha512-5YubdnPXrlrYAFCKybPuHIAH++PINe1pmKNc5wQRB9HSbqIK1ywAnntE3Wwua4giKu0bjligf1gLF6qxMGOYRA==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.0", - "esquery": "^1.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==" - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "requires": { - "type-fest": "^0.8.1" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "requires": { - "prelude-ls": "^1.2.1" - } - } - } - }, - "eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==" - }, - "eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" - }, - "espree": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", - "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.3.0" - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" - }, - "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, - "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==" - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "requires": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "requires": { - "bser": "2.1.1" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "requires": { - "flat-cache": "^2.0.1" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - } - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "optional": true - }, - "ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "requires": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", - "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "get-uri": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.4.tgz", - "integrity": "sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q==", - "requires": { - "data-uri-to-buffer": "1", - "debug": "2", - "extend": "~3.0.2", - "file-uri-to-path": "1", - "ftp": "~0.3.10", - "readable-stream": "2" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "optional": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "heap": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz", - "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=" - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "requires": { - "agent-base": "4", - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", - "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" - }, - "import-fresh": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", - "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", - "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", - "optional": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-potential-custom-element-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", - "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "optional": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==" - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", - "requires": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "dependencies": { - "jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "requires": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - } - } - } - }, - "jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", - "requires": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "dependencies": { - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" - } - } - } - }, - "jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", - "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" - } - }, - "jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", - "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" - } - }, - "jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", - "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - } - }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==" - }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" - } - }, - "jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", - "requires": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" - }, - "jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", - "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - } - } - }, - "jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", - "requires": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - } - }, - "jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - } - }, - "jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - } - } - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - } - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "requires": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - } - }, - "jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", - "requires": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - } - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jsdom": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", - "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", - "requires": { - "abab": "^2.0.3", - "acorn": "^7.1.1", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.2.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.0", - "domexception": "^2.0.1", - "escodegen": "^1.14.1", - "html-encoding-sniffer": "^2.0.1", - "is-potential-custom-element-name": "^1.0.0", - "nwsapi": "^2.2.0", - "parse5": "5.1.1", - "request": "^2.88.2", - "request-promise-native": "^1.0.8", - "saxes": "^5.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0", - "ws": "^7.2.3", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-diff": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/json-diff/-/json-diff-0.5.4.tgz", - "integrity": "sha512-q5Xmx9QXNOzOzIlMoYtLrLiu4Jl/Ce2bn0CNcv54PhyH89CI4GWlGVDye8ei2Ijt9R3U+vsWPsXpLUNob8bs8Q==", - "requires": { - "cli-color": "~0.1.6", - "difflib": "~0.2.1", - "dreamopt": "~0.6.0" - } - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "requires": { - "readable-stream": "^2.0.5" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, - "lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "requires": { - "tmpl": "1.0.x" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" - }, - "netmask": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", - "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" - }, - "node-notifier": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.0.tgz", - "integrity": "sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==", - "optional": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "optional": true - }, - "uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==", - "optional": true - } - } - }, - "node-releases": { - "version": "1.1.67", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", - "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==" - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - }, - "dependencies": { - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - } - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "pac-proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz", - "integrity": "sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ==", - "requires": { - "agent-base": "^4.2.0", - "debug": "^4.1.1", - "get-uri": "^2.0.0", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^3.0.0", - "pac-resolver": "^3.0.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "^4.0.1" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "pac-resolver": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-3.0.0.tgz", - "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==", - "requires": { - "co": "^4.6.0", - "degenerator": "^1.0.4", - "ip": "^1.1.5", - "netmask": "^1.0.6", - "thunkify": "^2.1.2" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "optional": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { - "find-up": "^4.0.0" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - } - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, - "promptly": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/promptly/-/promptly-3.2.0.tgz", - "integrity": "sha512-WnR9obtgW+rG4oUV3hSnNGl1pHm3V1H/qD9iJBumGSmVsSC5HpZOLuu8qdMb6yCItGfT7dcRszejr/5P3i9Pug==", - "requires": { - "read": "^1.0.4" - } - }, - "prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "proxy-agent": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-3.1.1.tgz", - "integrity": "sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw==", - "requires": { - "agent-base": "^4.2.0", - "debug": "4", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^3.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^3.0.1", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^4.0.1" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "raw-body": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.3", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==" - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "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" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" - }, - "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" - }, - "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "replace-in-file": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-6.1.0.tgz", - "integrity": "sha512-URzjyF3nucvejuY13HFd7O+Q6tFJRLKGHLYVvSh+LiZj3gFXzSYGnIkQflnJJulCAI2/RTZaZkpOtdVdW0EhQA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "glob": "^7.1.6", - "yargs": "^15.3.1" - } - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "requires": { - "glob": "^7.1.3" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - } - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "requires": { - "xmlchars": "^2.2.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "optional": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - } - } - }, - "smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "socks": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", - "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", - "requires": { - "ip": "1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", - "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", - "requires": { - "agent-base": "~4.2.1", - "socks": "~2.3.2" - }, - "dependencies": { - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", - "requires": { - "es6-promisify": "^5.0.0" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", - "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==" - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - } - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" - }, - "string-length": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", - "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", - "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "tar-stream": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", - "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" - }, - "thunkify": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", - "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=" - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "requires": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } - } - }, - "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", - "requires": { - "punycode": "^2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } - } - }, - "ts-jest": { - "version": "26.4.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.4.4.tgz", - "integrity": "sha512-3lFWKbLxJm34QxyVNNCgXX1u4o/RV0myvA2y2Bxm46iGIjKlaY0own9gIckbjZJPn+WaJEnfPPJ20HHGpoq4yg==", - "requires": { - "@types/jest": "26.x", - "bs-logger": "0.x", - "buffer-from": "1.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^26.1.0", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "mkdirp": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" - } - } - }, - "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" - }, - "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==" - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "optional": true - }, - "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==" - }, - "v8-to-istanbul": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz", - "integrity": "sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - } - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "requires": { - "makeerror": "1.0.x" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, - "whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "requires": { - "mkdirp": "^0.5.1" - } - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", - "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==" - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "dependencies": { - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - } - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - } - } - }, - "zip-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-3.0.1.tgz", - "integrity": "sha512-r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ==", - "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - } - } -} diff --git a/packages/cli/package.json b/packages/cli/package.json index b327ef76a2..51e5de1a2e 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -35,11 +35,11 @@ }, "homepage": "https://serverless-stack.com", "dependencies": { - "@aws-cdk/aws-apigatewayv2": "1.73.0", - "@aws-cdk/aws-dynamodb": "1.61.0", - "@aws-cdk/aws-iam": "1.61.0", - "@aws-cdk/aws-lambda": "1.61.0", - "@aws-cdk/core": "1.61.0", + "@aws-cdk/aws-apigatewayv2": "1.74.0", + "@aws-cdk/aws-dynamodb": "1.74.0", + "@aws-cdk/aws-iam": "1.74.0", + "@aws-cdk/aws-lambda": "1.74.0", + "@aws-cdk/core": "1.74.0", "@babel/cli": "^7.10.5", "@babel/core": "^7.10.5", "@babel/eslint-parser": "^7.11.3", @@ -52,7 +52,7 @@ "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", "@typescript-eslint/parser": "^3.9.1", - "aws-cdk": "1.61.0", + "aws-cdk": "1.74.0", "chalk": "^4.1.0", "core-js": "^3.6.5", "cross-spawn": "^7.0.3", diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index 519628d1ba..ec313590d0 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -9,12 +9,12 @@ "keywords": [], "author": "", "dependencies": { - "@aws-cdk/aws-s3": "1.61.0", - "@aws-cdk/core": "1.61.0", + "@aws-cdk/aws-s3": "1.74.0", + "@aws-cdk/core": "1.74.0", "@serverless-stack/resources": "../../../resources" }, "license": "ISC", "devDependencies": { - "@aws-cdk/assert": "1.61.0" + "@aws-cdk/assert": "1.74.0" } } diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index b22cc68627..3499465f79 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -13,9 +13,9 @@ "keywords": [], "author": "", "dependencies": { - "@aws-cdk/aws-cognito": "1.61.0", - "@aws-cdk/aws-dynamodb": "1.61.0", - "@aws-cdk/core": "1.61.0", + "@aws-cdk/aws-cognito": "1.74.0", + "@aws-cdk/aws-dynamodb": "1.74.0", + "@aws-cdk/core": "1.74.0", "@serverless-stack/resources": "../../../resources" }, "license": "ISC" diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index 42af884e7f..b945257815 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -12,7 +12,7 @@ "author": "", "dependencies": { "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-dynamodb": "1.61.0" + "@aws-cdk/aws-dynamodb": "1.74.0" }, "license": "ISC" } diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index ccab7f2b9f..e14beb5728 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -10,7 +10,7 @@ "author": "", "dependencies": { "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-dynamodb": "1.61.0" + "@aws-cdk/aws-dynamodb": "1.74.0" }, "license": "ISC" } diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index 1a8e6d624c..765f96db0a 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -17,14 +17,14 @@ "dependencies": { "@serverless-stack/cli": "../../../cli", "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-dynamodb": "1.61.0", - "@aws-cdk/aws-sns": "1.61.0", - "@aws-cdk/aws-sns-subscriptions": "1.61.0", - "@aws-cdk/aws-sqs": "1.61.0", - "@aws-cdk/core": "1.61.0" + "@aws-cdk/aws-dynamodb": "1.74.0", + "@aws-cdk/aws-sns": "1.74.0", + "@aws-cdk/aws-sns-subscriptions": "1.74.0", + "@aws-cdk/aws-sqs": "1.74.0", + "@aws-cdk/core": "1.74.0" }, "license": "ISC", "devDependencies": { - "@aws-cdk/assert": "1.61.0" + "@aws-cdk/assert": "1.74.0" } } diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index 93351e19a8..0866d8057f 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -15,11 +15,11 @@ "author": "", "dependencies": { "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-dynamodb": "1.61.0", - "@aws-cdk/core": "1.61.0" + "@aws-cdk/aws-dynamodb": "1.74.0", + "@aws-cdk/core": "1.74.0" }, "license": "ISC", "devDependencies": { - "@aws-cdk/assert": "1.61.0" + "@aws-cdk/assert": "1.74.0" } } diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index be56b87a0a..80d9dfa1f4 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -10,7 +10,7 @@ "author": "", "dependencies": { "@serverless-stack/resources": "../../../resources", - "@aws-cdk/core": "1.61.0" + "@aws-cdk/core": "1.74.0" }, "license": "ISC" } diff --git a/packages/cli/test/start/package.json b/packages/cli/test/start/package.json index 6924a5a616..0a8bb693c6 100644 --- a/packages/cli/test/start/package.json +++ b/packages/cli/test/start/package.json @@ -11,10 +11,10 @@ "keywords": [], "author": "", "dependencies": { - "@aws-cdk/aws-apigatewayv2": "1.73.0", - "@aws-cdk/aws-apigatewayv2-integrations": "1.73.0", - "@aws-cdk/aws-lambda": "1.61.0", - "@aws-cdk/core": "1.61.0", + "@aws-cdk/aws-apigatewayv2": "1.74.0", + "@aws-cdk/aws-apigatewayv2-integrations": "1.74.0", + "@aws-cdk/aws-lambda": "1.74.0", + "@aws-cdk/core": "1.74.0", "@serverless-stack/resources": "../../../resources" }, "license": "ISC" diff --git a/packages/core/package.json b/packages/core/package.json index a91040f75a..b383af5cc2 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -20,6 +20,6 @@ "dependencies": { "aws-sdk": "^2.761.0", "chalk": "^4.1.0", - "sst-cdk": "1.61.0-rc.25" + "sst-cdk": "1.74.0-rc.1" } } diff --git a/packages/resources/package.json b/packages/resources/package.json index c13034c4f9..0ec99e8e8a 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -25,9 +25,9 @@ "access": "public" }, "dependencies": { - "@aws-cdk/core": "1.61.0", - "@aws-cdk/aws-lambda": "1.61.0", - "@aws-cdk/aws-lambda-nodejs": "1.61.0" + "@aws-cdk/core": "1.74.0", + "@aws-cdk/aws-lambda": "1.74.0", + "@aws-cdk/aws-lambda-nodejs": "1.74.0" }, "devDependencies": { "@types/node": "^14.0.27", diff --git a/yarn.lock b/yarn.lock index b16da093d3..69df9729b8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,548 +2,344 @@ # yarn lockfile v1 -"@aws-cdk/assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.61.0.tgz#9702ba8ef5b3c45ec47e0530006d63dc0685a5ff" - integrity sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA== - dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/assets@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.73.0.tgz#dcca310ac82f2e2370cb7307b227dd59e319606e" - integrity sha512-fAdRAWn/IWbalMZva86Q4BimYrwipSoqPzyC5d6fwxNmJU/QiFLMpILanS1T9a0a+yjqAqk+8pAXn44lZIOlPQ== - dependencies: - "@aws-cdk/core" "1.73.0" - "@aws-cdk/cx-api" "1.73.0" - constructs "^3.2.0" - -"@aws-cdk/aws-apigatewayv2@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.73.0.tgz#c305288d049d9a1905642a60eedeabcfb8737df2" - integrity sha512-+++K1KADMSFGgvOaj3OwiVcNEYWUR878rqH50EDEf/UxaYky3eD0Sg255sGQWrjbi3bb60lYdzVFDjADHHnEtw== +"@aws-cdk/assets@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.74.0.tgz#8aea948a32afcf7c60449346a087c4b5aecff251" + integrity sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ== dependencies: - "@aws-cdk/aws-certificatemanager" "1.73.0" - "@aws-cdk/aws-cloudwatch" "1.73.0" - "@aws-cdk/aws-ec2" "1.73.0" - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/core" "1.73.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-applicationautoscaling@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz#8129984ba0185bbb525fd8ef6328c5c84e51e4e5" - integrity sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-applicationautoscaling@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.73.0.tgz#2de1f609d25bd9a69c458ec06ae59820f75865f4" - integrity sha512-ROJPuj+PyrYa7/P6JoTrsFs8WMxKra1yuXZJ3r0iTrnAgCDAVCVpzmiF3Uwqw6rip1o63ZLT3fxxMeJBb2wL7Q== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.73.0" - "@aws-cdk/aws-cloudwatch" "1.73.0" - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/core" "1.73.0" +"@aws-cdk/aws-apigatewayv2@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.74.0.tgz#c65c94e25b70fcee53a3e15e211f74819eff4d77" + integrity sha512-Z8GRXYZX6MHZeyKQpiiCUvtxIKh6y9UGRM9f6+xfjMa75WwjoM8cFm9h41720LwKcUXYj0TlKiqEyeL12UIAYA== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-autoscaling-common@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz#9e7f6a8669b36001b846d90fa8cb65d8b4edb27b" - integrity sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ== +"@aws-cdk/aws-applicationautoscaling@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz#ad5e946e68bd4094c3236e983d36f67d66135dfc" + integrity sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" + "@aws-cdk/aws-autoscaling-common" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" -"@aws-cdk/aws-autoscaling-common@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.73.0.tgz#087cc95ed07cdc2e13acb770db40029e786c4c33" - integrity sha512-AJf9F9X/ktSMLj/NaX0ccPXr7VlDR6CTycpEgJZU4qbXqIW/LhIDkAhH15CNV38WYQnVDkVSQgDNfCtGaeHTqA== +"@aws-cdk/aws-autoscaling-common@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz#f6bcbb987830f299b6e2ef454944afdde9a8a82e" + integrity sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg== dependencies: - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/core" "1.73.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-certificatemanager@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.73.0.tgz#c21eb5c015985d65473429e6d1fc4184da1ac1bc" - integrity sha512-r5talegg1Z79Fo289JRgm1u6SV16I7nO4AZEmmbceDByDnXiRcnroi0o9fZTVWNUYuIwrpY4ZWR2UTKY71xYTg== +"@aws-cdk/aws-certificatemanager@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.74.0.tgz#35b07c4b396a3db96da5d431e549460d1edc2251" + integrity sha512-Ve1SYM6qpUysHLD5bzHiE4kXBeo7VAEQlUti0cjkkjkuPh+dKHti/TqYhA0tkfUIMjZylnvkogBzMYdIUBTNxg== dependencies: - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/aws-lambda" "1.73.0" - "@aws-cdk/aws-route53" "1.73.0" - "@aws-cdk/core" "1.73.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-route53" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-cloudformation@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.61.0.tgz#6810e5327aa53b6d73cb337af340db152284aad7" - integrity sha512-e7mti0sWR6Sf4tav36bu379kkG5E33VMPLZaT8RkhXkIl97c1OaGHVx5G1Oe5DiHka08c+PA6da8ahkrR1wSkQ== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudwatch@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz#3c0171ca76d086da424c1b4148a53c4d68dd885a" - integrity sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudwatch@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.73.0.tgz#322638c3ab86bb9a9df24ab73de532fd4c9b98ed" - integrity sha512-H6MQVtJfKAJyE6DRHe71ivFu9OjhH32VtsJUZ1xuQ/pyeoQlOQ6fj0FIjz4ObG3qDBq72SBfrbPAQ3q+2g3HfA== - dependencies: - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/core" "1.73.0" +"@aws-cdk/aws-cloudformation@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.74.0.tgz#04fffb02403fb52ee05ec43172b845a29a903a9e" + integrity sha512-VOyuMhoxA9vk3zSUfzqSg1YjYYgc+qyB0bpaOJIW/iinXYXhA64z5YQnTxdwd/exlFgA59chOanA7aRrNM2YIg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-sns" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-codeguruprofiler@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz#1ace4c61a4a7b916f4dbe28070b5b914949e6f06" - integrity sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w== +"@aws-cdk/aws-cloudwatch@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz#94a29d2998a5c08412084b346d404b3a8b90f8a8" + integrity sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" -"@aws-cdk/aws-codeguruprofiler@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.73.0.tgz#9dd6c9ff00aee0f05f6b9602521a44893aef5ecd" - integrity sha512-WcJjCT+4zd3v4E1nWUagpHKWVIafM4vMe+4DAcBXZbhqXww1yyXUxf1A08uc7zQGko3hvIoHp41maAiT5G6/nw== +"@aws-cdk/aws-codeguruprofiler@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz#d749688e9edb252ce6fc68efa4f9977f7ba02cb6" + integrity sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg== dependencies: - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/core" "1.73.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-dynamodb@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.61.0.tgz#3d9b1ffd6eb965152a2456de1b08625d3f3ee907" - integrity sha512-Qd87xJNTjCRBQ//H4WA6Lif3VuA9QuyKyterlmTGnmrUsAqubkKtxu/lLvMp0gQb9LzjQ5Hn9238v1s8rDBDlw== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/custom-resources" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ec2@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz#d39b1f5356c57089b963bbe4644adc02fd12a4bf" - integrity sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-ssm" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ec2@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.73.0.tgz#8c1fd13ff399d4acb7ab7a18e431bf72b0f8dea2" - integrity sha512-XjGcHaVlaJNorXv8qrRt7k8rPLE8yV1SAJWHY/SIf7NzIg9Y6lFV0eVkBU5RINfuD9GIW8YbgtLGE5ZpfZ5YkA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.73.0" - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/aws-kms" "1.73.0" - "@aws-cdk/aws-logs" "1.73.0" - "@aws-cdk/aws-s3" "1.73.0" - "@aws-cdk/aws-s3-assets" "1.73.0" - "@aws-cdk/aws-ssm" "1.73.0" - "@aws-cdk/cloud-assembly-schema" "1.73.0" - "@aws-cdk/core" "1.73.0" - "@aws-cdk/cx-api" "1.73.0" - "@aws-cdk/region-info" "1.73.0" +"@aws-cdk/aws-dynamodb@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.74.0.tgz#7e0ef530e9c3d7301a9db616ddf6d650f7acb76f" + integrity sha512-YU38dFYLMyMe5u2GLy8sFCFTVxwDgWZ67HzFg41kSj8WpAsVQEE5Zxh1nf0+8Ai1J4MNeLeMCaXtuliHipoQSw== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/custom-resources" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-efs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz#c4d66d0d928c01c8018c1c8bc75a1c5097d649ce" - integrity sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg== - dependencies: - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-efs@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.73.0.tgz#48d87d8f2135f6d138a81fa8ff4f26715c672913" - integrity sha512-sWUU+nhJ78T5tElLy7BqUrlXj4kGv43nrkWE5+jbTaLRFEpJPM6fMuWfzcJGfkqpbppjc/aySyCPbvEcWb7bDQ== - dependencies: - "@aws-cdk/aws-ec2" "1.73.0" - "@aws-cdk/aws-kms" "1.73.0" - "@aws-cdk/cloud-assembly-schema" "1.73.0" - "@aws-cdk/core" "1.73.0" - "@aws-cdk/cx-api" "1.73.0" +"@aws-cdk/aws-ec2@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz#eae31df9045ca9374daf6b1562674e31d8053aff" + integrity sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/aws-ssm" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-events@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" - integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== +"@aws-cdk/aws-efs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz#367b89f14ccd090f98227dbc975076571b31faac" + integrity sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-events@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.73.0.tgz#178a5e2ff0f11f20d79a722785b05491f16c95bc" - integrity sha512-CvOAIAt00xCWKC2U96NAgA8xIkzrNkwalCXk3RIRjz9xEVge5w3lQ7Hy6lSSbhyTfxQV01bppZO2ExaeAKOjOg== - dependencies: - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/core" "1.73.0" + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-iam@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" - integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== +"@aws-cdk/aws-events@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz#2ed5a4cdd737ce4c8950506df496d0b43ac6aa12" + integrity sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw== dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" -"@aws-cdk/aws-iam@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.73.0.tgz#a53f3bbaa99b67b56e38fe167a5c867fe339c01f" - integrity sha512-o2pdkEEdwluZegLqlbhfK0zgIbezvKDf5UfwBKloeFSDcGOZAaqF25OPfrTowXkIakHbw2wMswbUlmUgYdmNFg== +"@aws-cdk/aws-iam@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz#c255c9676fb6048ab27c00d111ed5e7d8b46877c" + integrity sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA== dependencies: - "@aws-cdk/core" "1.73.0" - "@aws-cdk/region-info" "1.73.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/region-info" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-kms@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" - integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== +"@aws-cdk/aws-kms@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz#73531f7b5d2542eb5e3f7bb54604944921e34995" + integrity sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" -"@aws-cdk/aws-kms@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.73.0.tgz#76127abeaebaea93adf00aef85ff294494218c0e" - integrity sha512-4aQRGBktM1IYqM0Qa/yio1/sjNuokMdLQNrjTVxyX+AZE2/zPqARe+Gm6sFpPJ9Is8oy0YzecP80QZSCnWpCnQ== +"@aws-cdk/aws-lambda-nodejs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.74.0.tgz#aa818270e4dcd74be51d402cdb114da311b3c966" + integrity sha512-1mc8I+Yz43El8O8SjsfkABsI31tcpO5e3fAz7/40DKuFgM9jkL6vyiL55MLIckAqmE2N9mRYU0xF4RC7uRZdmQ== dependencies: - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/core" "1.73.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-lambda-nodejs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.61.0.tgz#1c1b34fdf34ab585ea1ff5c0687e0d69a6a0d310" - integrity sha512-a6fiCqk4IjNjVGG8K+AjQviavno1SQwHcdf5JBYhXez7aJ8f2oTZHf5HC2UPTk3Ohu6HsIHds8KXbz4uqLp2Sw== - dependencies: - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-lambda@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz#65b2fb456f6c2d0566401bd3d265f5bae47d6346" - integrity sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-codeguruprofiler" "1.61.0" - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-efs" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-lambda@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.73.0.tgz#2561d19ff9435ec0ef94d5050b92e914bf3c6aec" - integrity sha512-ffw/hK1DbbSXklry4sDmJ+c+dX3Zl+I9DsYNjf0h2aonEKZo+g7ItAhVzr5s1kDnKatlEJTNOw1Kdpn20vFZHg== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.73.0" - "@aws-cdk/aws-cloudwatch" "1.73.0" - "@aws-cdk/aws-codeguruprofiler" "1.73.0" - "@aws-cdk/aws-ec2" "1.73.0" - "@aws-cdk/aws-efs" "1.73.0" - "@aws-cdk/aws-events" "1.73.0" - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/aws-logs" "1.73.0" - "@aws-cdk/aws-s3" "1.73.0" - "@aws-cdk/aws-s3-assets" "1.73.0" - "@aws-cdk/aws-sqs" "1.73.0" - "@aws-cdk/core" "1.73.0" - "@aws-cdk/cx-api" "1.73.0" +"@aws-cdk/aws-lambda@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz#52175fbc9e679ca5c0f4d15e0666c99fc4a953d0" + integrity sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-codeguruprofiler" "1.74.0" + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-efs" "1.74.0" + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/aws-sqs" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-logs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz#430bb5fc87ec606416ffb0869f04754185092a21" - integrity sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-logs@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.73.0.tgz#dbb01b6dfe144ab74bf37cce55cc39239bb2390a" - integrity sha512-pn/JUpz49nmP81rOW66S36HbBF+RCKDWyN+rQ671zr62T9EPJuRLWxbdahcnAN1eqyCsZEs9PpCvTnacj9ue7w== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.73.0" - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/aws-s3-assets" "1.73.0" - "@aws-cdk/core" "1.73.0" +"@aws-cdk/aws-logs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz#cd40afe70ffeb5250ecea1db0ee0a2f68fb2084a" + integrity sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-route53@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.73.0.tgz#c804c9ee74ec0f607b940774994a80afa96b2f5a" - integrity sha512-M3298IkyLELVTlA+2g0EdEV+bYTkC3xzTiHwoqcJeCd8T7IY8E89f73bsweX8k49cu1soPAUvXVJuUfxb6WYEg== +"@aws-cdk/aws-route53@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.74.0.tgz#f9b3c770cf613227bba31c4a7499c8f19966f3e4" + integrity sha512-TYnAByXLc6B/uAG03bYLV0kPi1TU8G95kW6wNhfiqvPCSwfizbsg5rztbUoydJpBocbOs9qbtCM7v6gbDsB2bQ== dependencies: - "@aws-cdk/aws-ec2" "1.73.0" - "@aws-cdk/aws-logs" "1.73.0" - "@aws-cdk/cloud-assembly-schema" "1.73.0" - "@aws-cdk/core" "1.73.0" + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-s3-assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz#8512ac0e16818bc78eff010d15d6cc99a7d8fccf" - integrity sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA== - dependencies: - "@aws-cdk/assets" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3-assets@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.73.0.tgz#fdfae26ef5356368809e0d93f908650c6abb10b5" - integrity sha512-CvxEIBOOj7tYMrMimPSsbtQ4OOurhUIiNIhM38gisTXYgSchKTeDzKJAbalfYOZSNJNEx1wMNL/+oKV/gDtrHQ== - dependencies: - "@aws-cdk/assets" "1.73.0" - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/aws-kms" "1.73.0" - "@aws-cdk/aws-s3" "1.73.0" - "@aws-cdk/core" "1.73.0" - "@aws-cdk/cx-api" "1.73.0" +"@aws-cdk/aws-s3-assets@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz#7f1988f3931e95d88a8c1357f98c47f7f9b73dee" + integrity sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg== + dependencies: + "@aws-cdk/assets" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-s3@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" - integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== - dependencies: - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.73.0.tgz#bb31d0eb2b2f204420c388015f26998fc702d67c" - integrity sha512-n0PuTBhqFxRfvGHhWk54R2hfS24b5DFkqP2PvTIwRFCBqmSUnRLF8I+GZ4c6RNxfVfDSzQBcGvfuCuNTL1KZLQ== - dependencies: - "@aws-cdk/aws-events" "1.73.0" - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/aws-kms" "1.73.0" - "@aws-cdk/core" "1.73.0" +"@aws-cdk/aws-s3@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz#5b53839c3af0f67bfb1e96061f6a1ea5be445fe9" + integrity sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q== + dependencies: + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-sns@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.61.0.tgz#c82f9b224b7ebf3e48cd9433456156e5d3f1df89" - integrity sha512-jmJmZXidJAJTg4lPnxMm26QR3ovMYb/89NBWnIRwGdVGcZ7nrWUkC0JNPQMbP+EvUFdh/9xdFVP4JvvzZzoy0w== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sqs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz#b2d1d7a5d27d36d1580a3cb500daf417037da492" - integrity sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sqs@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.73.0.tgz#a6108c57d6d22f91c9b11ecc0bb8072bc3d4cef1" - integrity sha512-15stNsRYY165Vvx/io6TnTSMHar10diLa2k2BTiL+PNzl18SfEIOoTy97PCvJp9AK2Ob9dyQwwjsiutTU56IbA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.73.0" - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/aws-kms" "1.73.0" - "@aws-cdk/core" "1.73.0" +"@aws-cdk/aws-sns@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.74.0.tgz#c9289b34cb2512010a0b6813f684c93398502bdd" + integrity sha512-O0HDGvl1WjCTU53auNJKCW5/6vpbVYlj0RwLgGaOOlTeKnfuq53kGvL/t3QdZQlJWxSvkbN61O+rZB7GacXV0g== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-sqs" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-ssm@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz#229308cfce757f8b3f75d12bf276ce4f8042076f" - integrity sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ssm@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.73.0.tgz#29e5e0126f00b6bd91b58a6757ede3c579d9b9ea" - integrity sha512-6fobpaL7hh0My/aypd7DHQ+sLuPcb7Taj8ngjmoh8H0muiAkfj4O0CjN3cd+kCYRr8T4zRh546ypvFfsc9WEHQ== - dependencies: - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/aws-kms" "1.73.0" - "@aws-cdk/cloud-assembly-schema" "1.73.0" - "@aws-cdk/core" "1.73.0" +"@aws-cdk/aws-sqs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz#998da5838d4310805432f0cf55fcc7c8f34657e2" + integrity sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/cfnspec@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.61.0.tgz#69e998ab83c0a478b76e1c5deb8484171dfd95f9" - integrity sha512-Ss5N3unY6iVh9SjYAYvTyvhdb7Kaz6dVFeV8K68UGewiFcHpC5tQi3YmlVBw3HCgKoRt20emiHAfmdfeGO/PUQ== +"@aws-cdk/aws-ssm@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz#426dd65c0b933618d5c196cb38386c1035b0fdc4" + integrity sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg== dependencies: - md5 "^2.3.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== +"@aws-cdk/cfnspec@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.74.0.tgz#03577e266721fe87287f9fc710a95d7b7e5886cd" + integrity sha512-9rdFgRUoV3lbAD6lnU+hGdkit8ILmUq+XCXzRdc9xWHUXIKxMmFK9frXTT+wGmjgdz/GpPyfSbFjzyqk4QE5+w== dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" + md5 "^2.3.0" -"@aws-cdk/cloud-assembly-schema@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.73.0.tgz#75e27dddda8f65708a5f649760e92031c296416f" - integrity sha512-3m5nJDLSApAuUMra2WrQF7GHt6xgxqFET91WShtKtj48brZk4MBJ3dLre2LjDVsmMMOVdd6FpjY7tE5C1v9Hyw== +"@aws-cdk/cloud-assembly-schema@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz#f1bbd8411ec320dd9e14ef2dce626a05019c42bc" + integrity sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw== dependencies: jsonschema "^1.4.0" semver "^7.3.2" -"@aws-cdk/cloudformation-diff@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.61.0.tgz#8acb549fd1dd819aa61dfed47e011b44827045a8" - integrity sha512-TrrmywhYkXxGNTmDd1k2biJMVtEvb0QcbZ/IGM6biMXIJ+wsjw/n5snvwciQ8/PHZmsUYk67qulGdso1rpy06Q== +"@aws-cdk/cloudformation-diff@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.74.0.tgz#d86199db530f9df641cff7f3996939c47645d59f" + integrity sha512-aYAg85fkpX39euUo5HjsGtqOpyD5fAz1+jZ/F/5erA8Y/+rB4ifCVJH0cLYHVdYwo8oc3poB6jW4tVMxNYxbrg== dependencies: - "@aws-cdk/cfnspec" "1.61.0" + "@aws-cdk/cfnspec" "1.74.0" colors "^1.4.0" - diff "^4.0.2" + diff "^5.0.0" fast-deep-equal "^3.1.3" string-width "^4.2.0" - table "^5.4.6" - -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - fs-extra "^9.0.1" - minimatch "^3.0.4" + table "^6.0.3" -"@aws-cdk/core@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.73.0.tgz#15ef8230da5bb9d92b5e1c5f3cff0ade01a2b093" - integrity sha512-CTmUXo0hAH78/uvzfmgW4gQKLnusMxULIEUjd0wnfs/6/zoB6n2DP+lmkr/7Vp4aIG9nNNirThdHesidlx79eA== +"@aws-cdk/core@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.74.0.tgz#132d31c0ab9d39394827431ccd804cf10de34273" + integrity sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.73.0" - "@aws-cdk/cx-api" "1.73.0" - "@aws-cdk/region-info" "1.73.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" "@balena/dockerignore" "^1.0.2" constructs "^3.2.0" fs-extra "^9.0.1" ignore "^5.1.8" minimatch "^3.0.4" -"@aws-cdk/custom-resources@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.61.0.tgz#03749f4122e46504fd1b3b3b9a11aa3578f269bf" - integrity sha512-etnHE7A0+J5w1L/m+KxEbPQ7LgtVYvEUV6naqRp5uIsTBaJ9sCQ+q43Y3Fj+g3NMigm8C2fKg5FmiFE6kiymDQ== - dependencies: - "@aws-cdk/aws-cloudformation" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" - -"@aws-cdk/cx-api@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.73.0.tgz#328562689a55fba184324ec2b83b3c72b88a1a3f" - integrity sha512-HlBpbIGu71xXdfJ1De1/HOMK5LWzKK9J7REho0oncpAO9KDxAbk+1aOFUZJVEgTsJSUUzLMSIUtDIo+ev70HGA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.73.0" +"@aws-cdk/custom-resources@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.74.0.tgz#19329e8a9b9bc0ca66e00c791b008c416a67265f" + integrity sha512-KDXgyRCeCMIj42nQcd2RXc4GYQpd7SWtx2iw0G4Wvs/wG4i3nR1qdlvEJvAlNgsYeqM4pp3mIp3PgdX341HsCg== + dependencies: + "@aws-cdk/aws-cloudformation" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-sns" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/cx-api@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz#922c11389d723eadef2bc12666ced4980fe9e4cc" + integrity sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.74.0" semver "^7.3.2" -"@aws-cdk/region-info@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" - integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== +"@aws-cdk/region-info@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.74.0.tgz#e53eabe2d8980c360e63ea956615253551005182" + integrity sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA== -"@aws-cdk/region-info@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.73.0.tgz#9f4444c57fa1d366205409a0a9e6b09f27b428cb" - integrity sha512-jWfx5mY3BaCVeFnbdUxrDTczVTuwShdtu3WkV2vL+W3VnUMzLPKbCPiGY8GutSBlWvoFpubsbVqx8Kw61pRgdQ== +"@aws-cdk/yaml-cfn@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/yaml-cfn/-/yaml-cfn-1.74.0.tgz#ea66da39391acf4d2f385845bb1c3466779bb90c" + integrity sha512-fJyS9apCC6lk3MHramd8Kjz4UwGWqM5gDRBci68Vs/nfXcpXY2ekHGjUMUfcel7VPobNKWszxWAMxXttAHa1zg== + dependencies: + yaml "1.10.0" "@babel/cli@^7.10.5": version "7.10.5" @@ -2529,6 +2325,11 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.9" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d" @@ -2784,13 +2585,20 @@ acorn@^7.1.1, acorn@^7.3.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== -agent-base@4, agent-base@^4.2.0, agent-base@^4.3.0: +agent-base@4, agent-base@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== dependencies: es6-promisify "^5.0.0" +agent-base@6, agent-base@^6.0.0: + 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" + agent-base@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" @@ -2823,6 +2631,16 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -2922,18 +2740,18 @@ archiver-utils@^2.1.0: normalize-path "^3.0.0" readable-stream "^2.0.0" -archiver@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-4.0.2.tgz#43c72865eadb4ddaaa2fb74852527b6a450d927c" - integrity sha512-B9IZjlGwaxF33UN4oPbfBkyA4V1SxNLeIhR1qY8sRXSsbdUkEHrrOvwlYFPx+8uQeCe9M+FG6KgO+imDmQ79CQ== +archiver@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.1.0.tgz#05b0f6f7836f3e6356a0532763d2bb91017a7e37" + integrity sha512-iKuQUP1nuKzBC2PFlGet5twENzCfyODmvkxwDV0cEFXavwcLrIW5ssTuHi9dyTPvpWr6Faweo2eQaQiLIwyXTA== dependencies: archiver-utils "^2.1.0" async "^3.2.0" buffer-crc32 "^0.2.1" - glob "^7.1.6" readable-stream "^3.6.0" - tar-stream "^2.1.2" - zip-stream "^3.0.1" + readdir-glob "^1.0.0" + tar-stream "^2.1.4" + zip-stream "^4.0.4" are-we-there-yet@~1.1.2: version "1.1.5" @@ -3024,10 +2842,12 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -ast-types@0.x.x: - version "0.13.3" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.3.tgz#50da3f28d17bdbc7969a3a2d83a0e4a72ae755a7" - integrity sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA== +ast-types@^0.13.2: + version "0.13.4" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" + integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== + dependencies: + tslib "^2.0.1" astral-regex@^1.0.0: version "1.0.0" @@ -3069,39 +2889,39 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -aws-cdk@1.61.0: - version "1.61.0" - resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-1.61.0.tgz#b1e1a55c64dff5825b3961b56c2b5fcb7ac472e9" - integrity sha512-deLtRq3DkiUB/5EN8ZCWLdXY0Uhm+fUvA1WSO8lzEhl71SmD7dyEHqvl7k96WPrIhUkS0nbiz6a+WC0QadIthg== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cloudformation-diff" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - archiver "^4.0.2" - aws-sdk "^2.739.0" - camelcase "^6.0.0" - cdk-assets "1.61.0" +aws-cdk@1.74.0: + version "1.74.0" + resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-1.74.0.tgz#d049631ea578a8b75244b13a3028134ebb56add2" + integrity sha512-D4LKNlmvLHv+CWI/35Esaoij4v5VSqKyc+Gvnjhj1K3I4lG/AAxEy1CmRBhN/w1LJt70U9jnBpIsb6hGUlrV8A== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/cloudformation-diff" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + "@aws-cdk/yaml-cfn" "1.74.0" + archiver "^5.0.2" + aws-sdk "^2.792.0" + camelcase "^6.2.0" + cdk-assets "1.74.0" colors "^1.4.0" decamelize "^4.0.0" fs-extra "^9.0.1" glob "^7.1.6" json-diff "^0.5.4" minimatch ">=3.0" - promptly "^3.0.3" - proxy-agent "^3.1.1" - semver "^7.2.2" + promptly "^3.2.0" + proxy-agent "^4.0.0" + semver "^7.3.2" source-map-support "^0.5.19" - table "^5.4.6" - uuid "^8.3.0" + table "^6.0.3" + uuid "^8.3.1" wrap-ansi "^7.0.0" - yaml "^1.10.0" - yargs "^15.4.1" + yargs "^16.1.1" -aws-sdk@^2.739.0: - version "2.743.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.743.0.tgz#c72a471c80cf88d78d854c780de861fb8475ae34" - integrity sha512-xujZGeA5gnbPBIlq6w/b+WYDKLXYiPWeVHvR0LKcvLLAr8IgzYYInmLx+7CU6ynXuBwVQtqGl2lZ2JSZbnMydg== +aws-sdk@^2.761.0: + version "2.761.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.761.0.tgz#a677e3755fe84550de780e9be61190e8898cc032" + integrity sha512-mSzdiqlnruFlJYrQVWPMyPQ8ynJe9P5QVD+edv8HFlYDQNOwpPCjlqI9kE1VE3cVcxkh0j2Q2kfLQa/pAY2w7Q== dependencies: buffer "4.9.2" events "1.1.1" @@ -3113,10 +2933,10 @@ aws-sdk@^2.739.0: uuid "3.3.2" xml2js "0.4.19" -aws-sdk@^2.761.0: - version "2.761.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.761.0.tgz#a677e3755fe84550de780e9be61190e8898cc032" - integrity sha512-mSzdiqlnruFlJYrQVWPMyPQ8ynJe9P5QVD+edv8HFlYDQNOwpPCjlqI9kE1VE3cVcxkh0j2Q2kfLQa/pAY2w7Q== +aws-sdk@^2.792.0: + version "2.798.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.798.0.tgz#fd108e0569d7210816003fc8cc0c995b39854ad6" + integrity sha512-7BMCH90yFpMmCF5uxZiiKMMzIAFibZz8b6CLGw/92FgMd86ZedpNqDyaikcGv1yOVtOlNCCnXN6OglC8/vwm4Q== dependencies: buffer "4.9.2" events "1.1.1" @@ -3252,10 +3072,10 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bl@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a" - integrity sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ== +bl@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" + integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== dependencies: buffer "^5.5.0" inherits "^2.0.4" @@ -3350,7 +3170,7 @@ buffer@4.9.2: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.1.0, buffer@^5.5.0: +buffer@^5.5.0: version "5.6.0" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== @@ -3489,6 +3309,11 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== +camelcase@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + caniuse-lite@^1.0.30001111: version "1.0.30001116" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001116.tgz#f3a3dea347f9294a3bdc4292309039cc84117fb8" @@ -3506,17 +3331,17 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -cdk-assets@1.61.0: - version "1.61.0" - resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.61.0.tgz#677d85bb23ae7aa104a1b0d5892e3cfd36580a08" - integrity sha512-nZJNQq6vktb5j8xl+IYLWbN82E6EVANJQIZvOM1H/SLuYsjyuoAlIxBp6e50XqYRApnLYJ7BpDdAnLWOmfY8MQ== +cdk-assets@1.74.0: + version "1.74.0" + resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.74.0.tgz#d70d5d5351181d91d9ee91791a858c2eb5d5e723" + integrity sha512-YF3nE1zAJU4dlWVnY30a4ALNzHhSTMMoAMv4bYkwXTLqzu+QB2v3MQdPpCLdGTGUYDaeRZy/Z/4R4MqM+/KPAA== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - archiver "^4.0.2" - aws-sdk "^2.739.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + archiver "^5.0.2" + aws-sdk "^2.792.0" glob "^7.1.6" - yargs "^15.4.1" + yargs "^16.1.1" chalk@^2.0.0, chalk@^2.3.1, chalk@^2.4.2: version "2.4.2" @@ -3654,6 +3479,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +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-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -3763,15 +3597,15 @@ component-emitter@^1.2.1: resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== -compress-commons@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-3.0.0.tgz#833944d84596e537224dd91cf92f5246823d4f1d" - integrity sha512-FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg== +compress-commons@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.0.2.tgz#d6896be386e52f37610cef9e6fa5defc58c31bd7" + integrity sha512-qhd32a9xgzmpfoga1VQEiLEwdKZ6Plnpx5UCgIsf89FSolyJ7WnifY4Gtjgv5WR6hWAyRaHxC5MiEhU/38U70A== dependencies: buffer-crc32 "^0.2.13" - crc32-stream "^3.0.1" + crc32-stream "^4.0.1" normalize-path "^3.0.0" - readable-stream "^2.3.7" + readable-stream "^3.6.0" concat-map@0.0.1: version "0.0.1" @@ -3811,11 +3645,6 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== - constructs@^3.2.0: version "3.2.38" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.38.tgz#40168c33ddf56948ece101775223e5c0f2cb3388" @@ -3967,20 +3796,21 @@ cosmiconfig@^6.0.0: path-type "^4.0.0" yaml "^1.7.2" -crc32-stream@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85" - integrity sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w== +crc-32@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" + integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== dependencies: - crc "^3.4.4" - readable-stream "^3.4.0" + exit-on-epipe "~1.0.1" + printj "~1.1.0" -crc@^3.4.4: - version "3.8.0" - resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" - integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== +crc32-stream@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.1.tgz#0f047d74041737f8a55e86837a1b826bd8ab0067" + integrity sha512-FN5V+weeO/8JaXsamelVYO1PHyeCsuL3HcG4cqsj0ceARcocxalaShCsohZMSAF+db7UYFwBy1rARK/0oFItUw== dependencies: - buffer "^5.1.0" + crc-32 "^1.2.0" + readable-stream "^3.4.0" cross-spawn@^6.0.0: version "6.0.5" @@ -4050,10 +3880,10 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-uri-to-buffer@1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" - integrity sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ== +data-uri-to-buffer@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" + integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== data-urls@^2.0.0: version "2.0.0" @@ -4069,13 +3899,6 @@ dateformat@^3.0.0: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@2, debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - debug@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" @@ -4090,6 +3913,13 @@ debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" +debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + debug@^3.1.0: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -4181,14 +4011,14 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -degenerator@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" - integrity sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU= +degenerator@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-2.2.0.tgz#49e98c11fa0293c5b26edfbb52f15729afcdb254" + integrity sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg== dependencies: - ast-types "0.x.x" - escodegen "1.x.x" - esprima "3.x.x" + ast-types "^0.13.2" + escodegen "^1.8.1" + esprima "^4.0.0" delayed-stream@~1.0.0: version "1.0.0" @@ -4238,10 +4068,10 @@ diff-sequences@^26.3.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.3.0.tgz#62a59b1b29ab7fd27cef2a33ae52abe73042d0a2" integrity sha512-5j5vdRcw3CNctePNYN0Wy2e/JbWT6cAYnXv5OuqPhDpyCGc0uLu2TK0zOCJWNB9kOIfYMSpIulRaDgIi4HJ6Ig== -diff@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +diff@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== difflib@~0.2.1: version "0.2.4" @@ -4426,6 +4256,11 @@ escalade@^3.0.2: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== +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.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -4436,7 +4271,7 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@1.x.x, escodegen@^1.14.1: +escodegen@^1.14.1, escodegen@^1.8.1: version "1.14.3" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== @@ -4524,11 +4359,6 @@ espree@^7.2.0: acorn-jsx "^5.2.0" eslint-visitor-keys "^1.3.0" -esprima@3.x.x: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -4606,6 +4436,11 @@ execa@^4.0.0, execa@^4.0.1: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +exit-on-epipe@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" + integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -4749,11 +4584,16 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" -file-uri-to-path@1, file-uri-to-path@1.0.0: +file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +file-uri-to-path@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba" + integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg== + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -4928,7 +4768,7 @@ fsevents@^2.1.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== -ftp@~0.3.10: +ftp@^0.3.10: version "0.3.10" resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0= @@ -4970,7 +4810,7 @@ gensync@^1.0.0-beta.1: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, 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== @@ -5020,17 +4860,17 @@ get-stream@^5.0.0: dependencies: pump "^3.0.0" -get-uri@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.4.tgz#d4937ab819e218d4cb5ae18e4f5962bef169cc6a" - integrity sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q== +get-uri@3: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c" + integrity sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg== dependencies: - data-uri-to-buffer "1" - debug "2" - extend "~3.0.2" - file-uri-to-path "1" - ftp "~0.3.10" - readable-stream "2" + "@tootallnate/once" "1" + data-uri-to-buffer "3" + debug "4" + file-uri-to-path "2" + fs-extra "^8.1.0" + ftp "^0.3.10" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" @@ -5295,6 +5135,15 @@ http-proxy-agent@^2.1.0: agent-base "4" debug "3.1.0" +http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -5304,6 +5153,14 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +https-proxy-agent@5, https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + https-proxy-agent@^2.2.3: version "2.2.4" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" @@ -5312,14 +5169,6 @@ https-proxy-agent@^2.2.3: agent-base "^4.3.0" debug "^3.1.0" -https-proxy-agent@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81" - integrity sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg== - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -6358,11 +6207,6 @@ jsonparse@^1.2.0: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== - jsonschema@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" @@ -6641,7 +6485,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.2.1: +lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.2.1: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== @@ -7495,30 +7339,29 @@ p-waterfall@^1.0.0: dependencies: p-reduce "^1.0.0" -pac-proxy-agent@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz#115b1e58f92576cac2eba718593ca7b0e37de2ad" - integrity sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ== +pac-proxy-agent@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz#66883eeabadc915fc5e95457324cb0f0ac78defb" + integrity sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q== dependencies: - agent-base "^4.2.0" - debug "^4.1.1" - get-uri "^2.0.0" - http-proxy-agent "^2.1.0" - https-proxy-agent "^3.0.0" - pac-resolver "^3.0.0" + "@tootallnate/once" "1" + agent-base "6" + debug "4" + get-uri "3" + http-proxy-agent "^4.0.1" + https-proxy-agent "5" + pac-resolver "^4.1.0" raw-body "^2.2.0" - socks-proxy-agent "^4.0.1" + socks-proxy-agent "5" -pac-resolver@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26" - integrity sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA== +pac-resolver@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-4.1.0.tgz#4b12e7d096b255a3b84e53f6831f32e9c7e5fe95" + integrity sha512-d6lf2IrZJJ7ooVHr7BfwSjRO1yKSJMaiiWYSHcrxSIUtZrCa4KKGwcztdkZ/E9LFleJfjoi1yl+XLR7AX24nbQ== dependencies: - co "^4.6.0" - degenerator "^1.0.4" + degenerator "^2.2.0" ip "^1.1.5" netmask "^1.0.6" - thunkify "^2.1.2" parallel-transform@^1.1.0: version "1.2.0" @@ -7762,6 +7605,11 @@ pretty-format@^26.4.0: ansi-styles "^4.0.0" react-is "^16.12.0" +printj@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" + integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== + 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" @@ -7785,12 +7633,11 @@ promise-retry@^1.1.1: err-code "^1.0.0" retry "^0.10.0" -promptly@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/promptly/-/promptly-3.0.3.tgz#e178f722e73d82c60d019462044bccfdd9872f42" - integrity sha512-EWnzOsxVKUjqKeE6SStH1/cO4+DE44QolaoJ4ojGd9z6pcNkpgfJKr1ncwxrOFHSTIzoudo7jG8y0re30/LO1g== +promptly@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/promptly/-/promptly-3.2.0.tgz#a5517fbbf59bd31c1751d4e1d9bef1714f42b9d8" + integrity sha512-WnR9obtgW+rG4oUV3hSnNGl1pHm3V1H/qD9iJBumGSmVsSC5HpZOLuu8qdMb6yCItGfT7dcRszejr/5P3i9Pug== dependencies: - pify "^3.0.0" read "^1.0.4" prompts@^2.0.1: @@ -7825,19 +7672,19 @@ protoduck@^5.0.1: dependencies: genfun "^5.0.0" -proxy-agent@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.1.1.tgz#7e04e06bf36afa624a1540be247b47c970bd3014" - integrity sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw== +proxy-agent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-4.0.0.tgz#a92976af3fbc7d846f2e850e2ac5ac6ca3fb74c7" + integrity sha512-8P0Y2SkwvKjiGU1IkEfYuTteioMIDFxPL4/j49zzt5Mz3pG1KO+mIrDG1qH0PQUHTTczjwGcYl+EzfXiFj5vUQ== dependencies: - agent-base "^4.2.0" + agent-base "^6.0.0" debug "4" - http-proxy-agent "^2.1.0" - https-proxy-agent "^3.0.0" + http-proxy-agent "^4.0.0" + https-proxy-agent "^5.0.0" lru-cache "^5.1.1" - pac-proxy-agent "^3.0.1" + pac-proxy-agent "^4.1.0" proxy-from-env "^1.0.0" - socks-proxy-agent "^4.0.1" + socks-proxy-agent "^5.0.0" proxy-from-env@^1.0.0: version "1.1.0" @@ -8012,7 +7859,7 @@ read@1, read@^1.0.4, read@~1.0.1: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@^2.3.7, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, 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== @@ -8044,6 +7891,13 @@ readable-stream@1.1.x: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdir-glob@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4" + integrity sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA== + dependencies: + minimatch "^3.0.4" + readdir-scoped-modules@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" @@ -8417,7 +8271,7 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@7.x, semver@^7.2.1, semver@^7.2.2, semver@^7.3.2: +semver@7.x, semver@^7.2.1, semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== @@ -8570,7 +8424,16 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -socks-proxy-agent@^4.0.0, socks-proxy-agent@^4.0.1: +socks-proxy-agent@5, socks-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" + integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== + dependencies: + agent-base "6" + debug "4" + socks "^2.3.3" + +socks-proxy-agent@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== @@ -8578,6 +8441,14 @@ socks-proxy-agent@^4.0.0, socks-proxy-agent@^4.0.1: agent-base "~4.2.1" socks "~2.3.2" +socks@^2.3.3: + version "2.5.0" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.5.0.tgz#3a7c286db114f67864a4bd8b4207a91d1db3d6db" + integrity sha512-00OqQHp5SCbwm9ecOMJj9aQtMSjwi1uVuGQoxnpKCS50VKZcOZ8z11CTKypmR8sEy7nZimy/qXY7rYJYbRlXmA== + dependencies: + ip "^1.1.5" + smart-buffer "^4.1.0" + socks@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" @@ -8706,34 +8577,34 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -sst-cdk@1.61.0-rc.25: - version "1.61.0-rc.25" - resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.61.0-rc.25.tgz#f9066a46ebec56f32165890eba99eaf558cf61d8" - integrity sha512-Vc9pRpTIV0xUBZHK6Qj3Xrb/LCPiXw2nVJaWZPiSiUc2mi566KsxpmWFvjqrYXKFesRSwUoIVgfEwop12CiLzw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cloudformation-diff" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - archiver "^4.0.2" - aws-sdk "^2.739.0" - camelcase "^6.0.0" - cdk-assets "1.61.0" +sst-cdk@1.74.0-rc.1: + version "1.74.0-rc.1" + resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.74.0-rc.1.tgz#3ce6f1bb32da7ae2a79c4fe40ed99e4937eefb65" + integrity sha512-ZHHlzqJv7rFS2gyiN5YyLitJ3pRg2BEjmZDpmkmr3GRTyaZnrs6Z//ntiipSRE/5B3Jd89xHkCQViusVp/ZhRw== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/cloudformation-diff" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + "@aws-cdk/yaml-cfn" "1.74.0" + archiver "^5.0.2" + aws-sdk "^2.792.0" + camelcase "^6.2.0" + cdk-assets "1.74.0" colors "^1.4.0" decamelize "^4.0.0" fs-extra "^9.0.1" glob "^7.1.6" json-diff "^0.5.4" minimatch ">=3.0" - promptly "^3.0.3" - proxy-agent "^3.1.1" - semver "^7.2.2" + promptly "^3.2.0" + proxy-agent "^4.0.0" + semver "^7.3.2" source-map-support "^0.5.19" - table "^5.4.6" - uuid "^8.3.0" + table "^6.0.3" + uuid "^8.3.1" wrap-ansi "^7.0.0" - yaml "^1.10.0" - yargs "^15.4.1" + yargs "^16.1.1" stack-utils@^2.0.2: version "2.0.2" @@ -8980,7 +8851,7 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^5.2.3, table@^5.4.6: +table@^5.2.3: version "5.4.6" resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== @@ -8990,12 +8861,22 @@ table@^5.2.3, table@^5.4.6: slice-ansi "^2.1.0" string-width "^3.0.0" -tar-stream@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.3.tgz#1e2022559221b7866161660f118255e20fa79e41" - integrity sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA== +table@^6.0.3: + version "6.0.4" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.4.tgz#c523dd182177e926c723eb20e1b341238188aa0d" + integrity sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw== + dependencies: + ajv "^6.12.4" + lodash "^4.17.20" + slice-ansi "^4.0.0" + string-width "^4.2.0" + +tar-stream@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.4.tgz#c4fb1a11eb0da29b893a5b25476397ba2d053bfa" + integrity sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw== dependencies: - bl "^4.0.1" + bl "^4.0.3" end-of-stream "^1.4.1" fs-constants "^1.0.0" inherits "^2.0.3" @@ -9098,11 +8979,6 @@ through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -thunkify@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" - integrity sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0= - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -9230,6 +9106,11 @@ tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== +tslib@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" + integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== + tsutils@^3.17.1: version "3.17.1" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" @@ -9459,11 +9340,16 @@ uuid@^3.0.1, uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.2.0, uuid@^8.3.0: +uuid@^8.2.0: version "8.3.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== +uuid@^8.3.1: + version "8.3.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" + integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== + v8-compile-cache@^2.0.3: version "2.1.1" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" @@ -9761,12 +9647,17 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== +y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yaml@^1.10.0, yaml@^1.7.2: +yaml@1.10.0, yaml@^1.7.2: version "1.10.0" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== @@ -9787,6 +9678,11 @@ yargs-parser@^15.0.1: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^20.2.2: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + yargs@^14.2.2: version "14.2.3" resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" @@ -9821,11 +9717,24 @@ yargs@^15.3.1, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -zip-stream@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-3.0.1.tgz#cb8db9d324a76c09f9b76b31a12a48638b0b9708" - integrity sha512-r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ== +yargs@^16.1.1: + version "16.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.1.1.tgz#5a4a095bd1ca806b0a50d0c03611d38034d219a1" + integrity sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w== + 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" + +zip-stream@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.0.4.tgz#3a8f100b73afaa7d1ae9338d910b321dec77ff3a" + integrity sha512-a65wQ3h5gcQ/nQGWV1mSZCEzCML6EK/vyVPcrPNynySP1j3VBbQKh3nhC8CbORb+jfl2vXvh56Ul5odP1bAHqw== dependencies: archiver-utils "^2.1.0" - compress-commons "^3.0.0" + compress-commons "^4.0.2" readable-stream "^3.6.0" From 3afbd34236aaa573cd197919edf1b1cbd3ed43dc Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 24 Nov 2020 21:23:14 -0500 Subject: [PATCH 133/481] Implement `sst start` --- packages/cli/scripts/config/cdkHelpers.js | 13 + packages/cli/scripts/debug/bin/index.js | 10 +- .../cli/scripts/debug/lambda/wsDefault.js | 140 ++-- packages/cli/scripts/debug/lib/debug-stack.js | 21 +- packages/cli/scripts/start.js | 337 ++++++--- packages/cli/scripts/wrapper/bootstrap.js | 8 +- .../cli/scripts/wrapper/serializeError.js | 67 ++ packages/cli/test/start/lib/index.js | 26 +- packages/cli/test/start/package.json | 2 + packages/cli/test/start/src/hello.js | 32 +- packages/cli/test/start/src/sns.js | 4 + packages/cli/test/start/yarn.lock | 704 +++++++----------- packages/core/index.js | 10 +- packages/core/package.json | 2 +- packages/resources/lambda/stub/index.js | 169 ++++- packages/resources/src/Function.ts | 1 + packages/resources/src/NodejsFunction.ts | 1 + yarn.lock | 8 +- 18 files changed, 888 insertions(+), 667 deletions(-) create mode 100644 packages/cli/scripts/wrapper/serializeError.js create mode 100644 packages/cli/test/start/src/sns.js diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/config/cdkHelpers.js index 0feec640ca..05ffc4005f 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/config/cdkHelpers.js @@ -303,6 +303,18 @@ async function synth(options) { return results; } +async function deploy(options) { + let results; + + try { + results = await sstCore.deploy(options); + } catch (e) { + handleCdkErrors(e); + } + + return results; +} + async function parallelDeploy(options, stackStates) { let results; @@ -329,6 +341,7 @@ async function parallelDestroy(options, stackStates) { module.exports = { synth, + deploy, prepareCdk, applyConfig, parallelDeploy, diff --git a/packages/cli/scripts/debug/bin/index.js b/packages/cli/scripts/debug/bin/index.js index 6064a1de6d..31b23248e5 100644 --- a/packages/cli/scripts/debug/bin/index.js +++ b/packages/cli/scripts/debug/bin/index.js @@ -3,10 +3,10 @@ const cdk = require("@aws-cdk/core"); const { DebugStack } = require("../lib/debug-stack"); -const app = new cdk.App(); +const stage = process.env.SST_DEBUG_STAGE; +const region = process.env.SST_DEBUG_REGION; +const stackName = process.env.SST_DEBUG_STACK; -const stage = "local"; -const name = "debug-stack"; -const region = "us-east-1"; +const app = new cdk.App(); -new DebugStack(app, `${stage}-${name}`, { stage, name, region }); +new DebugStack(app, stackName, { stage, stackName, region }); diff --git a/packages/cli/scripts/debug/lambda/wsDefault.js b/packages/cli/scripts/debug/lambda/wsDefault.js index 91b34a6eae..3438bd99b8 100644 --- a/packages/cli/scripts/debug/lambda/wsDefault.js +++ b/packages/cli/scripts/debug/lambda/wsDefault.js @@ -2,75 +2,119 @@ const AWS = require("aws-sdk"); AWS.config.logger = console; const ddb = new AWS.DynamoDB.DocumentClient({ region: process.env.AWS_REGION }); -// TODO -// - handle re-use websocket connection -// - handle client/channel's connectionId not connected -// - handle connection closed -// - get stub connection id needs to be strong consistent read exports.main = async function (event) { console.log(event); const eventData = JSON.parse(event.body); - console.log(eventData); - if (eventData.action === "registerClient") { + if (eventData.action === "connectClient") { // register client - await ddb - .put({ - TableName: process.env.TABLE_NAME, - Item: { - channel: "client", - connectionId: event.requestContext.connectionId, - }, - }) - .promise(); + const clientConnectionId = event.requestContext.connectionId; + const oldConnectionId = await setClientConnectionId(clientConnectionId); + await postToConnection( + JSON.stringify({ + action: "clientConnected", + clientConnectionId, + }), + clientConnectionId + ); + + // notify old client is replaced by the newer client + if (oldConnectionId) { + try { + await postToConnection( + JSON.stringify({ action: "clientDisconnectedDueToNewClient" }), + oldConnectionId + ); + } catch (e) { + console.log(e); + } + } } else if (eventData.action === "newRequest") { // send request to client + const stubConnectionId = event.requestContext.connectionId; + const clientConnectionId = await getClientConnectionId(); + if (clientConnectionId) { + try { + await postToConnection( + JSON.stringify({ ...eventData, stubConnectionId }), + clientConnectionId + ); + } catch (e) { + // handle failed to send + console.log(e); + const action = + e.statusCode === 410 + ? "failedToSendRequestDueToClientNotConnected" + : "failedToSendRequestDueToUnknown"; + await postToConnection(JSON.stringify({ action }), stubConnectionId); + } + } else { + // handle client connection not exist + await postToConnection( + JSON.stringify({ + action: "failedToSendRequestDueToClientNotConnected", + }), + stubConnectionId + ); + } + } else if (eventData.action === "newResponse") { + try { + await postToConnection(event.body, eventData.stubConnectionId); + } catch (e) { + const clientConnectionId = event.requestContext.connectionId; + const action = + e.statusCode === 410 + ? "failedToSendResponseDueToStubDisconnected" + : "failedToSendResponseDueToUnknown"; + await postToConnection( + JSON.stringify({ + action, + debugRequestId: eventData.debugRequestId, + }), + clientConnectionId + ); + } + } + + async function getClientConnectionId() { const ret = await ddb .get({ TableName: process.env.TABLE_NAME, - Key: { channel: "client" }, + Key: { pk: "client" }, + ConsistentRead: true, }) .promise(); - const connectionId = ret.Item.connectionId; - await postToConnection( - JSON.stringify({ - ...eventData, - stubConnectionId: event.requestContext.connectionId, - }), - connectionId - ); - } else if (eventData.action === "newResponse") { - await postToConnection(event.body, eventData.stubConnectionId); + return ret.Item && ret.Item.connectionId; + } + + async function setClientConnectionId(connectionId) { + const ret = await ddb + .update({ + TableName: process.env.TABLE_NAME, + Key: { pk: "client" }, + UpdateExpression: "SET connectionId = :connectionId", + ExpressionAttributeValues: { + ":connectionId": connectionId, + }, + ReturnValues: "UPDATED_OLD", + }) + .promise(); + return ret.Attributes && ret.Attributes.connectionId; } async function postToConnection(data, connectionId) { - // Post to connections const apigwManagementApi = new AWS.ApiGatewayManagementApi({ apiVersion: "2018-11-29", endpoint: event.requestContext.domainName + "/" + event.requestContext.stage, }); - try { - await apigwManagementApi - .postToConnection({ - ConnectionId: connectionId, - Data: data, - }) - .promise(); - } catch (e) { - if (e.statusCode === 410) { - console.log(`Found stale connection, deleting ${connectionId}`); - await ddb - .delete({ - TableName: process.env.TABLE_NAME, - Key: { connectionId }, - }) - .promise(); - } else { - throw e; - } - } + await apigwManagementApi + .postToConnection({ + ConnectionId: connectionId, + Data: data, + }) + .promise(); } return { statusCode: 200, body: "Data sent." }; diff --git a/packages/cli/scripts/debug/lib/debug-stack.js b/packages/cli/scripts/debug/lib/debug-stack.js index 72e0fdee85..2cc70367aa 100644 --- a/packages/cli/scripts/debug/lib/debug-stack.js +++ b/packages/cli/scripts/debug/lib/debug-stack.js @@ -1,4 +1,3 @@ -const fs = require("fs"); const cdk = require("@aws-cdk/core"); const apig = require("@aws-cdk/aws-apigatewayv2"); const lambda = require("@aws-cdk/aws-lambda"); @@ -9,20 +8,20 @@ class DebugStack extends cdk.Stack { constructor(scope, id, props) { super(scope, id, props); - const { stage, name, region } = props; + const { stage, region, stackName } = props; const _this = this; // Create connection table const table = new dynamodb.Table(this, "Table", { - partitionKey: { name: "channel", type: dynamodb.AttributeType.STRING }, + partitionKey: { name: "pk", type: dynamodb.AttributeType.STRING }, billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, removalPolicy: cdk.RemovalPolicy.DESTROY, }); // Create API const api = new apig.CfnApi(this, "Api", { - name: `${stage}-${name}-api`, + name: `${stackName}-api`, protocolType: "WEBSOCKET", routeSelectionExpression: "$request.body.action", }); @@ -39,24 +38,24 @@ class DebugStack extends cdk.Stack { addApiRoute({ id: "Connect", routeKey: "$connect", - codePath: "lambda/wsConnect.js", + handler: "wsConnect.main", }); addApiRoute({ id: "Disconnect", routeKey: "$disconnect", - codePath: "lambda/wsDisconnect.js", + handler: "wsDisconnect.main", }); addApiRoute({ id: "Default", routeKey: "$default", - codePath: "lambda/wsDefault.js", + handler: "wsDefault.main", }); new cdk.CfnOutput(this, "Endpoint", { value: `${api.attrApiEndpoint}/${stage}`, }); - function addApiRoute({ id, routeKey, codePath }) { + function addApiRoute({ id, routeKey, handler }) { // Create execution policy const policyStatement = new iam.PolicyStatement(); policyStatement.addAllResources(); @@ -68,10 +67,8 @@ class DebugStack extends cdk.Stack { // Create Lambda const lambdaFunc = new lambda.Function(_this, id, { - code: new lambda.InlineCode( - fs.readFileSync(codePath, { encoding: "utf-8" }) - ), - handler: "index.main", + code: lambda.Code.fromAsset("lambda"), + handler, timeout: cdk.Duration.seconds(10), runtime: lambda.Runtime.NODEJS_12_X, memorySize: 256, diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 1bd052c49a..a0c6024b87 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -1,176 +1,265 @@ "use strict"; -const AWS = require("aws-sdk"); const WebSocket = require("ws"); const spawn = require("cross-spawn"); -const { execSync } = require("child_process"); +const chalk = require("chalk"); -const deploy = require("./deploy"); +const sstDeploy = require("./deploy"); const paths = require("./config/paths"); -const { prepareCdk, applyConfig } = require("./config/cdkHelpers"); +const { + prepareCdk, + applyConfig, + deploy: cdkDeploy, +} = require("./config/cdkHelpers"); +const logger = require("./util/logger"); + +const WEBSOCKET_CLOSE_CODE = { + NEW_CLIENT_CONNECTED: 4901, +}; + +let ws; function setTimer(lambda, handleResponse, timeoutInMs) { return setTimeout(function () { - handleResponse({ - type: "failure", - data: { - stack: null, - errorType: "timeout", - errorMessage: "Lambda timed out", - }, - }); + handleResponse({ type: "timeout" }); try { process.kill(lambda.pid, "SIGKILL"); } catch (e) { - console.log(e); - console.log("Cannot kill timed out Lambda"); + logger.log(e); + logger.log("Cannot kill timed out Lambda"); } }, timeoutInMs); } function startClient(debugEndpoint) { - console.log("Starting up sst debugger..."); - - const ws = new WebSocket(debugEndpoint); + ws = new WebSocket(debugEndpoint); ws.on("open", () => { - ws.send( - JSON.stringify({ - action: "registerClient", - }) - ); - console.log("Debug session started. Listening for requests..."); + ws.send(JSON.stringify({ action: "connectClient" })); + logger.debug("websocket opened"); }); ws.on("close", (code, reason) => { - console.log("Debug session closed.", { code, reason }); + logger.debug("websocket closed"); + logger.log("Debug session closed.", { code, reason }); + + // Case: disconnected due to new client connected => do not reconnect + // Case: disconnected due to 10min idle or 2hr websocket connection limit => reconnect + if (code !== WEBSOCKET_CLOSE_CODE.NEW_CLIENT_CONNECTED) { + logger.log("Debug session reconnecting..."); + startClient(debugEndpoint); + } }); ws.on("error", (e) => { - console.log("Debug session error.", e); + logger.debug(`websocket error: ${e}`); + logger.log(`Debug session error: ${e}`); }); - ws.on("message", (data) => { - console.debug(data); - const { - action, - stubConnectionId, - debugRequestId, - debugRequestExpireAt, - debugRequestTimeoutInMs, + ws.on("message", onMessage); +} + +function onMessage(message) { + logger.debug(`message received: ${message}`); + + const data = JSON.parse(message); + + // Handle actions + if (data.action === "clientConnected") { + logger.log("Debug session started. Listening for requests..."); + logger.debug(`client connection id: ${data.clientConnectionId}`); + return; + } + if (data.action === "clientDisconnectedDueToNewClient") { + logger.log( + "A new debug session has been started. This session will be closed..." + ); + ws.close(WEBSOCKET_CLOSE_CODE.NEW_CLIENT_CONNECTED); + return; + } + if (data.action === "failedToSendResponseDueToStubDisconnected") { + logger.log( + chalk.grey( + `${debugRequestId} ${chalk.red( + "ERROR" + )} Failed to send response because the Lambda function is not disconnected.` + ) + ); + return; + } + if (data.action === "failedToSendResponseDueToUnknown") { + logger.log( + chalk.grey( + `${debugRequestId} ${chalk.red( + "ERROR" + )} Failed to send response to the Lambda function.` + ) + ); + return; + } + if (data.action !== "newRequest") { + return; + } + + const { + stubConnectionId, + event, + context, + env, + debugRequestId, + debugRequestExpireAt, + debugRequestTimeoutInMs, + debugSrcPath, + debugSrcHandler, + } = data; + + logger.log( + chalk.grey(`${debugRequestId} REQUEST ${JSON.stringify(event, null, 4)}`) + ); + + // Validate request did not expire + if (debugRequestExpireAt < Date.now()) { + logger.log(chalk.grey(`${debugRequestId} DISCARDED ${debugRequestId}`)); + return; + } + + // From Lambda /var/runtime/bootstrap + // https://link.medium.com/7ir11kKjwbb + const newSpace = Math.floor(context.memoryLimitInMB / 10); + const semiSpace = Math.floor(newSpace / 2); + const oldSpace = context.memoryLimitInMB - newSpace; + + let lambdaResponse; + const lambda = spawn( + "node", + [ + `--max-old-space-size=${oldSpace}`, + `--max-semi-space-size=${semiSpace}`, + "--max-http-header-size=81920", // HTTP header limit of 8KB + require.resolve("../scripts/wrapper/bootstrap.js"), + JSON.stringify(event), + JSON.stringify(context), + //"./src", // Local path to the Lambda functions + //"hello.handler", debugSrcPath, debugSrcHandler, - event, - context, - } = JSON.parse(data); - console.log("INFO", debugRequestId, "REQUEST", JSON.stringify(event)); - if (action !== "newRequest" || debugRequestExpireAt < Date.now()) { - console.log("INFO", debugRequestId, "DISCARDED"); - return; + ], + { + stdio: ["inherit", "inherit", "inherit", "ipc"], + cwd: paths.appPath, + env: { ...process.env, ...env }, } - //delete require.cache[require.resolve('./lambda/handler')]; - //const handler = require('./lambda/handler'); - //const response = handler.main(); - //const srcEntry = props && props.entry - // || path.basename(__filename).split('.').splice(-1, 0,'id').join('.'); - //const srcHandler = props && props.handler || 'handler'; - - // From Lambda /var/runtime/bootstrap - // https://link.medium.com/7ir11kKjwbb - const newSpace = Math.floor(context.memoryLimitInMB / 10); - const semiSpace = Math.floor(newSpace / 2); - const oldSpace = context.memoryLimitInMB - newSpace; - - let lambdaResponse; - const lambda = spawn( - "node", - [ - `--max-old-space-size=${oldSpace}`, - `--max-semi-space-size=${semiSpace}`, - "--max-http-header-size=81920", // HTTP header limit of 8KB - require.resolve("../scripts/wrapper/bootstrap.js"), - JSON.stringify(event), - JSON.stringify(context), - //"./src", // Local path to the Lambda functions - //"hello.handler", - debugSrcPath, - debugSrcHandler, - ], - { stdio: ["inherit", "inherit", "inherit", "ipc"], cwd: paths.appPath } - ); - const timer = setTimer(lambda, handleResponse, debugRequestTimeoutInMs); - - function handleResponse(response) { - switch (response.type) { - case "success": - case "failure": - lambdaResponse = response; - break; - default: - } + ); + const timer = setTimer(lambda, handleResponse, debugRequestTimeoutInMs); + + function handleResponse(response) { + console.log(response); + switch (response.type) { + case "success": + case "failure": + case "timeout": + lambdaResponse = response; + break; + default: } + } - function returnLambdaResponse() { - console.log( - "INFO", - debugRequestId, - "RESPONSE", - JSON.stringify(lambdaResponse) + function returnLambdaResponse() { + // Handle timeout: do not send a response, let stub timeout + if (lambdaResponse.type === "timeout") { + logger.log( + chalk.grey(`${debugRequestId} ${chalk.red("ERROR")} Lambda timed out.`) ); - ws.send( - JSON.stringify({ - action: "newResponse", - debugRequestId, - stubConnectionId, - response: lambdaResponse.data, - }) + return; + } + + // handle success/failure + if (lambdaResponse.type === "success") { + logger.log( + chalk.grey( + `${debugRequestId} RESPONSE ${JSON.stringify( + lambdaResponse.data, + null, + 4 + )}` + ) ); + } else if (lambdaResponse.type === "failure") { + logger.log(chalk.grey(`${debugRequestId} ${chalk.red("ERROR")}`)); + console.log(lambdaResponse.error); } + ws.send( + JSON.stringify({ + action: "newResponse", + debugRequestId, + stubConnectionId, + responseData: lambdaResponse.data, + responseError: lambdaResponse.error, + }) + ); + } - lambda.on("message", handleResponse); - lambda.on("exit", function () { - returnLambdaResponse(); - clearTimeout(timer); - }); + lambda.on("message", handleResponse); + lambda.on("exit", function () { + returnLambdaResponse(); + clearTimeout(timer); }); } module.exports = async function (argv, cliInfo) { const config = applyConfig(argv); - // - // console.log(argv, config, cliInfo); - // - // const stage = config.stage; - // const region = config.region; - // - // return; - - const region = "us-east-1"; - const stage = "local"; - const stack = `${stage}-debug-stack`; + const stackName = `${config.stage}-debug-stack`; // Deploy debug stack - execSync("npx cdk deploy --require-approval never", { - stdio: ["inherit", "inherit", "inherit"], - cwd: `${paths.ownPath}/scripts/debug`, + logger.log(""); + logger.log("======================="); + logger.log(" Deploying debug stack"); + logger.log("======================="); + logger.log(""); + const debugAppEnvs = [ + `SST_DEBUG_STACK=${stackName}`, + `SST_DEBUG_STAGE=${config.stage}`, + `SST_DEBUG_REGION=${config.region}`, + ]; + // Note: When deploying the debug stack, the current working directory is user's app. + // Setting the current working directory to debug stack cdk app directory to allow + // Lambda Function construct be able to reference code with relative path. + process.chdir(`${paths.ownPath}/scripts/debug`); + const debugStackRet = await cdkDeploy({ + ...cliInfo.cdkOptions, + app: `${debugAppEnvs.join(" ")} node bin/index.js`, + output: "cdk.out", }); // Get websocket endpoint - const cf = new AWS.CloudFormation({ region }); - const cfRet = await cf.describeStacks({ StackName: stack }).promise(); - const debugEndpoint = cfRet.Stacks[0].Outputs.find( - (output) => output.OutputKey === "Endpoint" - ).OutputValue; - //process.env.SST_DEBUG_ENDPOINT = debugEndpoint; - - config.debugEndpoint = debugEndpoint; - - prepareCdk(argv, cliInfo, config); + if ( + !debugStackRet || + !debugStackRet.outputs || + !debugStackRet.outputs.Endpoint + ) { + throw new Error( + `Failed to get the endpoint from the deployed debug stack ${stackName}` + ); + } + config.debugEndpoint = debugStackRet.outputs.Endpoint; // Deploy app - await deploy(argv, config, cliInfo); + logger.log(""); + logger.log("==============="); + logger.log(" Deploying app"); + logger.log("==============="); + logger.log(""); + // Note: Restore working directory + process.chdir(paths.appPath); + prepareCdk(argv, cliInfo, config); + await sstDeploy(argv, config, cliInfo); // Start client - startClient(debugEndpoint); + logger.log(""); + logger.log("==================="); + logger.log(" Starting debugger"); + logger.log("==================="); + logger.log(""); + startClient(config.debugEndpoint); }; diff --git a/packages/cli/scripts/wrapper/bootstrap.js b/packages/cli/scripts/wrapper/bootstrap.js index 2476da8d4c..37f6bed482 100644 --- a/packages/cli/scripts/wrapper/bootstrap.js +++ b/packages/cli/scripts/wrapper/bootstrap.js @@ -8,6 +8,7 @@ process.on("unhandledRejection", (err) => { }); const path = require("path"); +const { serializeError } = require("./serializeError"); const CALLBACK_USED = Symbol("CALLBACK_USED"); @@ -100,13 +101,8 @@ function invokeResponse(result) { } function invokeError(err) { - const { name, message, stack } = err; process.send({ type: "failure", - data: { - errorType: name || typeof err, - errorMessage: message || "" + err, - stackTrace: (stack || "").split("\n").slice(1), - }, + error: serializeError(err), }); } diff --git a/packages/cli/scripts/wrapper/serializeError.js b/packages/cli/scripts/wrapper/serializeError.js new file mode 100644 index 0000000000..ee59bb93f9 --- /dev/null +++ b/packages/cli/scripts/wrapper/serializeError.js @@ -0,0 +1,67 @@ +// Serialize error +// https://github.com/sindresorhus/serialize-error/blob/master/index.js +const commonProperties = [ + { property: "name", enumerable: false }, + { property: "message", enumerable: false }, + { property: "stack", enumerable: false }, + { property: "code", enumerable: true }, +]; + +const destroyCircular = ({ from, seen, to_, forceEnumerable }) => { + const to = to_ || (Array.isArray(from) ? [] : {}); + + seen.push(from); + + for (const [key, value] of Object.entries(from)) { + if (typeof value === "function") { + continue; + } + + if (!value || typeof value !== "object") { + to[key] = value; + continue; + } + + if (!seen.includes(from[key])) { + to[key] = destroyCircular({ + from: from[key], + seen: seen.slice(), + forceEnumerable, + }); + continue; + } + + to[key] = "[Circular]"; + } + + for (const { property, enumerable } of commonProperties) { + if (typeof from[property] === "string") { + Object.defineProperty(to, property, { + value: from[property], + enumerable: forceEnumerable ? true : enumerable, + configurable: true, + writable: true, + }); + } + } + + return to; +}; + +const serializeError = (value) => { + if (typeof value === "object" && value !== null) { + return destroyCircular({ from: value, seen: [], forceEnumerable: true }); + } + + // People sometimes throw things besides Error objects… + if (typeof value === "function") { + // `JSON.stringify()` discards functions. We do too, unless a function is thrown directly. + return `[Function: ${value.name || "anonymous"}]`; + } + + return value; +}; + +module.exports = { + serializeError, +}; diff --git a/packages/cli/test/start/lib/index.js b/packages/cli/test/start/lib/index.js index f306a4400e..722a71c965 100644 --- a/packages/cli/test/start/lib/index.js +++ b/packages/cli/test/start/lib/index.js @@ -1,6 +1,8 @@ import * as sst from "@serverless-stack/resources"; import * as cdk from "@aws-cdk/core"; import * as lambda from "@aws-cdk/aws-lambda"; +import * as sns from "@aws-cdk/aws-sns"; +import * as subscriptions from "@aws-cdk/aws-sns-subscriptions"; import * as apig from "@aws-cdk/aws-apigatewayv2"; import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; @@ -10,18 +12,34 @@ class MySampleStack extends sst.Stack { const { stage, name } = this.node.root; - const func = new sst.Function(this, "MyLambda", { + const topic = new sns.Topic(this, "MyTopic", { + displayName: "Customer subscription topic", + }); + const snsFunc = new sst.Function(this, "MySnsLambda", { code: lambda.Code.fromAsset("src"), - handler: "hello.handler", - timeout: cdk.Duration.seconds(6), + handler: "sns.handler", + timeout: cdk.Duration.seconds(600), runtime: lambda.Runtime.NODEJS_12_X, memorySize: 1024, }); + topic.addSubscription(new subscriptions.LambdaSubscription(snsFunc)); + const apiFunc = new sst.Function(this, "MyApiLambda", { + code: lambda.Code.fromAsset("src"), + handler: "hello.handler", + timeout: cdk.Duration.seconds(600), + runtime: lambda.Runtime.NODEJS_12_X, + memorySize: 1024, + environment: { + DRINK: "COFFEE", + TOPIC_ARN: topic.topicArn, + }, + }); + topic.grantPublish(apiFunc); const api = new apig.HttpApi(this, "Api"); api.addRoutes({ integration: new apigIntegrations.LambdaProxyIntegration({ - handler: func, + handler: apiFunc, }), methods: [apig.HttpMethod.GET], path: "/", diff --git a/packages/cli/test/start/package.json b/packages/cli/test/start/package.json index 0a8bb693c6..1c5e2700c1 100644 --- a/packages/cli/test/start/package.json +++ b/packages/cli/test/start/package.json @@ -14,6 +14,8 @@ "@aws-cdk/aws-apigatewayv2": "1.74.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.74.0", "@aws-cdk/aws-lambda": "1.74.0", + "@aws-cdk/aws-sns": "1.74.0", + "@aws-cdk/aws-sns-subscriptions": "1.74.0", "@aws-cdk/core": "1.74.0", "@serverless-stack/resources": "../../../resources" }, diff --git a/packages/cli/test/start/src/hello.js b/packages/cli/test/start/src/hello.js index 432a997591..9b9f6fa96f 100644 --- a/packages/cli/test/start/src/hello.js +++ b/packages/cli/test/start/src/hello.js @@ -1,13 +1,27 @@ setTimeout(() => console.log("still here"), 3000); -exports.handler = function (event, context, callback) { +const AWS = require("aws-sdk"); +AWS.config.logger = console; +const sns = new AWS.SNS(); + +exports.handler = async function (event, context, callback) { context.callbackWaitsForEmptyEventLoop = false; - console.log("Calling from inside the function"); - //setTimeout(() => { - callback(null, { - statusCode: 200, - headers: { "Content-Type": "text/plain" }, - body: "New World with event: " + JSON.stringify(event), - }); - //}, 2000); + + console.log("Calling from inside the api function"); + + await sns + .publish({ + TopicArn: process.env.TOPIC_ARN, + Message: JSON.stringify({ abc: 123 }), + MessageStructure: "string", + }) + .promise(); + + setTimeout(() => { + callback(null, { + statusCode: 200, + headers: { "Content-Type": "text/plain" }, + body: "New World with event: " + JSON.stringify(event), + }); + }, 2000); }; diff --git a/packages/cli/test/start/src/sns.js b/packages/cli/test/start/src/sns.js new file mode 100644 index 0000000000..ac3be2a757 --- /dev/null +++ b/packages/cli/test/start/src/sns.js @@ -0,0 +1,4 @@ +exports.handler = function (event, context, callback) { + console.log("Calling from inside the sns function"); + callback(null, { status: "real" }); +}; diff --git a/packages/cli/test/start/yarn.lock b/packages/cli/test/start/yarn.lock index 21982f0d16..52a0569747 100644 --- a/packages/cli/test/start/yarn.lock +++ b/packages/cli/test/start/yarn.lock @@ -2,518 +2,332 @@ # yarn lockfile v1 -"@aws-cdk/assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.61.0.tgz#9702ba8ef5b3c45ec47e0530006d63dc0685a5ff" - integrity sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA== - dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/assets@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.73.0.tgz#dcca310ac82f2e2370cb7307b227dd59e319606e" - integrity sha512-fAdRAWn/IWbalMZva86Q4BimYrwipSoqPzyC5d6fwxNmJU/QiFLMpILanS1T9a0a+yjqAqk+8pAXn44lZIOlPQ== - dependencies: - "@aws-cdk/core" "1.73.0" - "@aws-cdk/cx-api" "1.73.0" - constructs "^3.2.0" - -"@aws-cdk/aws-apigatewayv2-integrations@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2-integrations/-/aws-apigatewayv2-integrations-1.73.0.tgz#6b225f21231f3892368f9be2c327f2edbab7e8f9" - integrity sha512-yQdJI/8CrBvw4s8H/9rsw6XAJXhQMScf95lsj52uwNmHi/Xz1PYVVlisbEa5Fg8CUCFWO0lRG81QLNZpgfLzow== - dependencies: - "@aws-cdk/aws-apigatewayv2" "1.73.0" - "@aws-cdk/aws-ec2" "1.73.0" - "@aws-cdk/aws-elasticloadbalancingv2" "1.73.0" - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/aws-lambda" "1.73.0" - "@aws-cdk/aws-servicediscovery" "1.73.0" - "@aws-cdk/core" "1.73.0" - constructs "^3.2.0" - -"@aws-cdk/aws-apigatewayv2@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.73.0.tgz#c305288d049d9a1905642a60eedeabcfb8737df2" - integrity sha512-+++K1KADMSFGgvOaj3OwiVcNEYWUR878rqH50EDEf/UxaYky3eD0Sg255sGQWrjbi3bb60lYdzVFDjADHHnEtw== +"@aws-cdk/assets@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.74.0.tgz#8aea948a32afcf7c60449346a087c4b5aecff251" + integrity sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ== dependencies: - "@aws-cdk/aws-certificatemanager" "1.73.0" - "@aws-cdk/aws-cloudwatch" "1.73.0" - "@aws-cdk/aws-ec2" "1.73.0" - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/core" "1.73.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-applicationautoscaling@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz#8129984ba0185bbb525fd8ef6328c5c84e51e4e5" - integrity sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-applicationautoscaling@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.73.0.tgz#2de1f609d25bd9a69c458ec06ae59820f75865f4" - integrity sha512-ROJPuj+PyrYa7/P6JoTrsFs8WMxKra1yuXZJ3r0iTrnAgCDAVCVpzmiF3Uwqw6rip1o63ZLT3fxxMeJBb2wL7Q== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.73.0" - "@aws-cdk/aws-cloudwatch" "1.73.0" - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/core" "1.73.0" +"@aws-cdk/aws-apigatewayv2-integrations@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2-integrations/-/aws-apigatewayv2-integrations-1.74.0.tgz#a242aaa74e0f294da9b3beefd46a28fb53de5355" + integrity sha512-DkhmqK5VrYPOdCu75fzUCFX1ZXS+JcMq28MSW6chre23aDWDpLmFR3yoJ5+AxqgqxCmM2O5kqyIkjh5YaKC1Xg== + dependencies: + "@aws-cdk/aws-apigatewayv2" "1.74.0" + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-servicediscovery" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-autoscaling-common@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz#9e7f6a8669b36001b846d90fa8cb65d8b4edb27b" - integrity sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ== +"@aws-cdk/aws-apigatewayv2@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.74.0.tgz#c65c94e25b70fcee53a3e15e211f74819eff4d77" + integrity sha512-Z8GRXYZX6MHZeyKQpiiCUvtxIKh6y9UGRM9f6+xfjMa75WwjoM8cFm9h41720LwKcUXYj0TlKiqEyeL12UIAYA== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-autoscaling-common@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.73.0.tgz#087cc95ed07cdc2e13acb770db40029e786c4c33" - integrity sha512-AJf9F9X/ktSMLj/NaX0ccPXr7VlDR6CTycpEgJZU4qbXqIW/LhIDkAhH15CNV38WYQnVDkVSQgDNfCtGaeHTqA== - dependencies: - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/core" "1.73.0" + "@aws-cdk/aws-certificatemanager" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-certificatemanager@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.73.0.tgz#c21eb5c015985d65473429e6d1fc4184da1ac1bc" - integrity sha512-r5talegg1Z79Fo289JRgm1u6SV16I7nO4AZEmmbceDByDnXiRcnroi0o9fZTVWNUYuIwrpY4ZWR2UTKY71xYTg== +"@aws-cdk/aws-applicationautoscaling@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz#ad5e946e68bd4094c3236e983d36f67d66135dfc" + integrity sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw== dependencies: - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/aws-lambda" "1.73.0" - "@aws-cdk/aws-route53" "1.73.0" - "@aws-cdk/core" "1.73.0" + "@aws-cdk/aws-autoscaling-common" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-cloudwatch@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz#3c0171ca76d086da424c1b4148a53c4d68dd885a" - integrity sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug== +"@aws-cdk/aws-autoscaling-common@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz#f6bcbb987830f299b6e2ef454944afdde9a8a82e" + integrity sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" -"@aws-cdk/aws-cloudwatch@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.73.0.tgz#322638c3ab86bb9a9df24ab73de532fd4c9b98ed" - integrity sha512-H6MQVtJfKAJyE6DRHe71ivFu9OjhH32VtsJUZ1xuQ/pyeoQlOQ6fj0FIjz4ObG3qDBq72SBfrbPAQ3q+2g3HfA== +"@aws-cdk/aws-certificatemanager@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.74.0.tgz#35b07c4b396a3db96da5d431e549460d1edc2251" + integrity sha512-Ve1SYM6qpUysHLD5bzHiE4kXBeo7VAEQlUti0cjkkjkuPh+dKHti/TqYhA0tkfUIMjZylnvkogBzMYdIUBTNxg== dependencies: - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/core" "1.73.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-route53" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-codeguruprofiler@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz#1ace4c61a4a7b916f4dbe28070b5b914949e6f06" - integrity sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w== +"@aws-cdk/aws-cloudwatch@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz#94a29d2998a5c08412084b346d404b3a8b90f8a8" + integrity sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" -"@aws-cdk/aws-codeguruprofiler@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.73.0.tgz#9dd6c9ff00aee0f05f6b9602521a44893aef5ecd" - integrity sha512-WcJjCT+4zd3v4E1nWUagpHKWVIafM4vMe+4DAcBXZbhqXww1yyXUxf1A08uc7zQGko3hvIoHp41maAiT5G6/nw== +"@aws-cdk/aws-codeguruprofiler@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz#d749688e9edb252ce6fc68efa4f9977f7ba02cb6" + integrity sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg== dependencies: - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/core" "1.73.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-ec2@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz#d39b1f5356c57089b963bbe4644adc02fd12a4bf" - integrity sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-ssm" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ec2@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.73.0.tgz#8c1fd13ff399d4acb7ab7a18e431bf72b0f8dea2" - integrity sha512-XjGcHaVlaJNorXv8qrRt7k8rPLE8yV1SAJWHY/SIf7NzIg9Y6lFV0eVkBU5RINfuD9GIW8YbgtLGE5ZpfZ5YkA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.73.0" - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/aws-kms" "1.73.0" - "@aws-cdk/aws-logs" "1.73.0" - "@aws-cdk/aws-s3" "1.73.0" - "@aws-cdk/aws-s3-assets" "1.73.0" - "@aws-cdk/aws-ssm" "1.73.0" - "@aws-cdk/cloud-assembly-schema" "1.73.0" - "@aws-cdk/core" "1.73.0" - "@aws-cdk/cx-api" "1.73.0" - "@aws-cdk/region-info" "1.73.0" +"@aws-cdk/aws-ec2@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz#eae31df9045ca9374daf6b1562674e31d8053aff" + integrity sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/aws-ssm" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-efs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz#c4d66d0d928c01c8018c1c8bc75a1c5097d649ce" - integrity sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg== - dependencies: - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-efs@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.73.0.tgz#48d87d8f2135f6d138a81fa8ff4f26715c672913" - integrity sha512-sWUU+nhJ78T5tElLy7BqUrlXj4kGv43nrkWE5+jbTaLRFEpJPM6fMuWfzcJGfkqpbppjc/aySyCPbvEcWb7bDQ== - dependencies: - "@aws-cdk/aws-ec2" "1.73.0" - "@aws-cdk/aws-kms" "1.73.0" - "@aws-cdk/cloud-assembly-schema" "1.73.0" - "@aws-cdk/core" "1.73.0" - "@aws-cdk/cx-api" "1.73.0" +"@aws-cdk/aws-efs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz#367b89f14ccd090f98227dbc975076571b31faac" + integrity sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA== + dependencies: + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-elasticloadbalancingv2@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.73.0.tgz#b2159f142b14f90b6cf059402d40159ea326bad5" - integrity sha512-NqsPFxyCm6RSeaXQigQJh3CSUeKiAhOB4B1cyU4t/lHVG2EUd4ObDmOYLRREfXEax+nqDg+ZhLzDR03I+sXhIg== - dependencies: - "@aws-cdk/aws-certificatemanager" "1.73.0" - "@aws-cdk/aws-cloudwatch" "1.73.0" - "@aws-cdk/aws-ec2" "1.73.0" - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/aws-lambda" "1.73.0" - "@aws-cdk/aws-s3" "1.73.0" - "@aws-cdk/cloud-assembly-schema" "1.73.0" - "@aws-cdk/core" "1.73.0" - "@aws-cdk/cx-api" "1.73.0" - "@aws-cdk/region-info" "1.73.0" +"@aws-cdk/aws-elasticloadbalancingv2@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.74.0.tgz#794ee49baac329e43884748ecda3e66348fd5088" + integrity sha512-+Zx6/7CqZcsubSwxFC6rTq+uyzzQjIOGOh8RN/q93EZ9+snSJM/mRdZ/1DyNIjfSFbwyYQ1usE9rbYi1XWDPVA== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-events@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" - integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== +"@aws-cdk/aws-events@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz#2ed5a4cdd737ce4c8950506df496d0b43ac6aa12" + integrity sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" -"@aws-cdk/aws-events@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.73.0.tgz#178a5e2ff0f11f20d79a722785b05491f16c95bc" - integrity sha512-CvOAIAt00xCWKC2U96NAgA8xIkzrNkwalCXk3RIRjz9xEVge5w3lQ7Hy6lSSbhyTfxQV01bppZO2ExaeAKOjOg== +"@aws-cdk/aws-iam@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz#c255c9676fb6048ab27c00d111ed5e7d8b46877c" + integrity sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA== dependencies: - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/core" "1.73.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/region-info" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-iam@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" - integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== +"@aws-cdk/aws-kms@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz#73531f7b5d2542eb5e3f7bb54604944921e34995" + integrity sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg== dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" -"@aws-cdk/aws-iam@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.73.0.tgz#a53f3bbaa99b67b56e38fe167a5c867fe339c01f" - integrity sha512-o2pdkEEdwluZegLqlbhfK0zgIbezvKDf5UfwBKloeFSDcGOZAaqF25OPfrTowXkIakHbw2wMswbUlmUgYdmNFg== +"@aws-cdk/aws-lambda-nodejs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.74.0.tgz#aa818270e4dcd74be51d402cdb114da311b3c966" + integrity sha512-1mc8I+Yz43El8O8SjsfkABsI31tcpO5e3fAz7/40DKuFgM9jkL6vyiL55MLIckAqmE2N9mRYU0xF4RC7uRZdmQ== dependencies: - "@aws-cdk/core" "1.73.0" - "@aws-cdk/region-info" "1.73.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-kms@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" - integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" +"@aws-cdk/aws-lambda@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz#52175fbc9e679ca5c0f4d15e0666c99fc4a953d0" + integrity sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-codeguruprofiler" "1.74.0" + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-efs" "1.74.0" + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/aws-sqs" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" -"@aws-cdk/aws-kms@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.73.0.tgz#76127abeaebaea93adf00aef85ff294494218c0e" - integrity sha512-4aQRGBktM1IYqM0Qa/yio1/sjNuokMdLQNrjTVxyX+AZE2/zPqARe+Gm6sFpPJ9Is8oy0YzecP80QZSCnWpCnQ== +"@aws-cdk/aws-logs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz#cd40afe70ffeb5250ecea1db0ee0a2f68fb2084a" + integrity sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA== dependencies: - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/core" "1.73.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-lambda-nodejs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.61.0.tgz#1c1b34fdf34ab585ea1ff5c0687e0d69a6a0d310" - integrity sha512-a6fiCqk4IjNjVGG8K+AjQviavno1SQwHcdf5JBYhXez7aJ8f2oTZHf5HC2UPTk3Ohu6HsIHds8KXbz4uqLp2Sw== - dependencies: - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-lambda@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz#65b2fb456f6c2d0566401bd3d265f5bae47d6346" - integrity sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-codeguruprofiler" "1.61.0" - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-efs" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-lambda@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.73.0.tgz#2561d19ff9435ec0ef94d5050b92e914bf3c6aec" - integrity sha512-ffw/hK1DbbSXklry4sDmJ+c+dX3Zl+I9DsYNjf0h2aonEKZo+g7ItAhVzr5s1kDnKatlEJTNOw1Kdpn20vFZHg== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.73.0" - "@aws-cdk/aws-cloudwatch" "1.73.0" - "@aws-cdk/aws-codeguruprofiler" "1.73.0" - "@aws-cdk/aws-ec2" "1.73.0" - "@aws-cdk/aws-efs" "1.73.0" - "@aws-cdk/aws-events" "1.73.0" - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/aws-logs" "1.73.0" - "@aws-cdk/aws-s3" "1.73.0" - "@aws-cdk/aws-s3-assets" "1.73.0" - "@aws-cdk/aws-sqs" "1.73.0" - "@aws-cdk/core" "1.73.0" - "@aws-cdk/cx-api" "1.73.0" +"@aws-cdk/aws-route53@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.74.0.tgz#f9b3c770cf613227bba31c4a7499c8f19966f3e4" + integrity sha512-TYnAByXLc6B/uAG03bYLV0kPi1TU8G95kW6wNhfiqvPCSwfizbsg5rztbUoydJpBocbOs9qbtCM7v6gbDsB2bQ== + dependencies: + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-logs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz#430bb5fc87ec606416ffb0869f04754185092a21" - integrity sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-logs@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.73.0.tgz#dbb01b6dfe144ab74bf37cce55cc39239bb2390a" - integrity sha512-pn/JUpz49nmP81rOW66S36HbBF+RCKDWyN+rQ671zr62T9EPJuRLWxbdahcnAN1eqyCsZEs9PpCvTnacj9ue7w== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.73.0" - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/aws-s3-assets" "1.73.0" - "@aws-cdk/core" "1.73.0" +"@aws-cdk/aws-s3-assets@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz#7f1988f3931e95d88a8c1357f98c47f7f9b73dee" + integrity sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg== + dependencies: + "@aws-cdk/assets" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-route53@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.73.0.tgz#c804c9ee74ec0f607b940774994a80afa96b2f5a" - integrity sha512-M3298IkyLELVTlA+2g0EdEV+bYTkC3xzTiHwoqcJeCd8T7IY8E89f73bsweX8k49cu1soPAUvXVJuUfxb6WYEg== +"@aws-cdk/aws-s3@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz#5b53839c3af0f67bfb1e96061f6a1ea5be445fe9" + integrity sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q== dependencies: - "@aws-cdk/aws-ec2" "1.73.0" - "@aws-cdk/aws-logs" "1.73.0" - "@aws-cdk/cloud-assembly-schema" "1.73.0" - "@aws-cdk/core" "1.73.0" - constructs "^3.2.0" - -"@aws-cdk/aws-s3-assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz#8512ac0e16818bc78eff010d15d6cc99a7d8fccf" - integrity sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA== - dependencies: - "@aws-cdk/assets" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3-assets@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.73.0.tgz#fdfae26ef5356368809e0d93f908650c6abb10b5" - integrity sha512-CvxEIBOOj7tYMrMimPSsbtQ4OOurhUIiNIhM38gisTXYgSchKTeDzKJAbalfYOZSNJNEx1wMNL/+oKV/gDtrHQ== - dependencies: - "@aws-cdk/assets" "1.73.0" - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/aws-kms" "1.73.0" - "@aws-cdk/aws-s3" "1.73.0" - "@aws-cdk/core" "1.73.0" - "@aws-cdk/cx-api" "1.73.0" + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-s3@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" - integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== - dependencies: - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.73.0.tgz#bb31d0eb2b2f204420c388015f26998fc702d67c" - integrity sha512-n0PuTBhqFxRfvGHhWk54R2hfS24b5DFkqP2PvTIwRFCBqmSUnRLF8I+GZ4c6RNxfVfDSzQBcGvfuCuNTL1KZLQ== - dependencies: - "@aws-cdk/aws-events" "1.73.0" - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/aws-kms" "1.73.0" - "@aws-cdk/core" "1.73.0" +"@aws-cdk/aws-servicediscovery@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.74.0.tgz#6e1145a4b85371431e8f6b21ce6ca7c9d855680c" + integrity sha512-5pABov1sNs0bgOb4UZKT+5H+OR3+0/8oxefFCiGxcGG4Kxsq4d4XJbmwx1oDUjCJclxlzOTuuCyay5NnoZ+6fg== + dependencies: + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.74.0" + "@aws-cdk/aws-route53" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-servicediscovery@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.73.0.tgz#3faec4889f6e89b4b4390bdce359b1661becaef6" - integrity sha512-3IV6+b6QUgQtOAqj1la6dagWufq6FcDIiDkhKLrzr3ppuT2wlkUsq+rjjQ6+4HHVoDEIy15E9/Dhxqm+nINCxQ== +"@aws-cdk/aws-sns-subscriptions@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.74.0.tgz#6cdad4a409359122e8a410543e33da59d21b54cc" + integrity sha512-MOuArbCx1nxL5B40RMQzHNnU0SZWkaQfRDTURTQbX4e0OHyq5DnQrtXTu/XyI/MYPBU+ZnC/FXP+hynCatn+nw== dependencies: - "@aws-cdk/aws-ec2" "1.73.0" - "@aws-cdk/aws-elasticloadbalancingv2" "1.73.0" - "@aws-cdk/aws-route53" "1.73.0" - "@aws-cdk/core" "1.73.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-sns" "1.74.0" + "@aws-cdk/aws-sqs" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-sqs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz#b2d1d7a5d27d36d1580a3cb500daf417037da492" - integrity sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sqs@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.73.0.tgz#a6108c57d6d22f91c9b11ecc0bb8072bc3d4cef1" - integrity sha512-15stNsRYY165Vvx/io6TnTSMHar10diLa2k2BTiL+PNzl18SfEIOoTy97PCvJp9AK2Ob9dyQwwjsiutTU56IbA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.73.0" - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/aws-kms" "1.73.0" - "@aws-cdk/core" "1.73.0" +"@aws-cdk/aws-sns@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.74.0.tgz#c9289b34cb2512010a0b6813f684c93398502bdd" + integrity sha512-O0HDGvl1WjCTU53auNJKCW5/6vpbVYlj0RwLgGaOOlTeKnfuq53kGvL/t3QdZQlJWxSvkbN61O+rZB7GacXV0g== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-sqs" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/aws-ssm@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz#229308cfce757f8b3f75d12bf276ce4f8042076f" - integrity sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ssm@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.73.0.tgz#29e5e0126f00b6bd91b58a6757ede3c579d9b9ea" - integrity sha512-6fobpaL7hh0My/aypd7DHQ+sLuPcb7Taj8ngjmoh8H0muiAkfj4O0CjN3cd+kCYRr8T4zRh546ypvFfsc9WEHQ== - dependencies: - "@aws-cdk/aws-iam" "1.73.0" - "@aws-cdk/aws-kms" "1.73.0" - "@aws-cdk/cloud-assembly-schema" "1.73.0" - "@aws-cdk/core" "1.73.0" +"@aws-cdk/aws-sqs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz#998da5838d4310805432f0cf55fcc7c8f34657e2" + integrity sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/core" "1.74.0" constructs "^3.2.0" -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== +"@aws-cdk/aws-ssm@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz#426dd65c0b933618d5c196cb38386c1035b0fdc4" + integrity sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg== dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" -"@aws-cdk/cloud-assembly-schema@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.73.0.tgz#75e27dddda8f65708a5f649760e92031c296416f" - integrity sha512-3m5nJDLSApAuUMra2WrQF7GHt6xgxqFET91WShtKtj48brZk4MBJ3dLre2LjDVsmMMOVdd6FpjY7tE5C1v9Hyw== +"@aws-cdk/cloud-assembly-schema@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz#f1bbd8411ec320dd9e14ef2dce626a05019c42bc" + integrity sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw== dependencies: jsonschema "^1.4.0" semver "^7.3.2" -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== +"@aws-cdk/core@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.74.0.tgz#132d31c0ab9d39394827431ccd804cf10de34273" + integrity sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - fs-extra "^9.0.1" - minimatch "^3.0.4" - -"@aws-cdk/core@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.73.0.tgz#15ef8230da5bb9d92b5e1c5f3cff0ade01a2b093" - integrity sha512-CTmUXo0hAH78/uvzfmgW4gQKLnusMxULIEUjd0wnfs/6/zoB6n2DP+lmkr/7Vp4aIG9nNNirThdHesidlx79eA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.73.0" - "@aws-cdk/cx-api" "1.73.0" - "@aws-cdk/region-info" "1.73.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" "@balena/dockerignore" "^1.0.2" constructs "^3.2.0" fs-extra "^9.0.1" ignore "^5.1.8" minimatch "^3.0.4" -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== +"@aws-cdk/cx-api@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz#922c11389d723eadef2bc12666ced4980fe9e4cc" + integrity sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" - -"@aws-cdk/cx-api@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.73.0.tgz#328562689a55fba184324ec2b83b3c72b88a1a3f" - integrity sha512-HlBpbIGu71xXdfJ1De1/HOMK5LWzKK9J7REho0oncpAO9KDxAbk+1aOFUZJVEgTsJSUUzLMSIUtDIo+ev70HGA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.73.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" semver "^7.3.2" -"@aws-cdk/region-info@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" - integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== - -"@aws-cdk/region-info@1.73.0": - version "1.73.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.73.0.tgz#9f4444c57fa1d366205409a0a9e6b09f27b428cb" - integrity sha512-jWfx5mY3BaCVeFnbdUxrDTczVTuwShdtu3WkV2vL+W3VnUMzLPKbCPiGY8GutSBlWvoFpubsbVqx8Kw61pRgdQ== +"@aws-cdk/region-info@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.74.0.tgz#e53eabe2d8980c360e63ea956615253551005182" + integrity sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA== "@balena/dockerignore@^1.0.2": version "1.0.2" @@ -523,9 +337,9 @@ "@serverless-stack/resources@../../../resources": version "0.4.3" dependencies: - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-lambda-nodejs" "1.61.0" - "@aws-cdk/core" "1.61.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-lambda-nodejs" "1.74.0" + "@aws-cdk/core" "1.74.0" at-least-node@^1.0.0: version "1.0.0" @@ -550,7 +364,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.4, constructs@^3.2.0: +constructs@^3.2.0: version "3.2.37" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.37.tgz#ebced4a0fbfa81be8db730cbe7a82d18410bebcb" integrity sha512-Z2dVwVaaw8cDIOeWT5smfgC4BLhkXK7JAfUUDtoB5WhUIIUZpRX+Pd5ZE6UrEuXSQkaJHUT6MVGxgBFZR3DpxQ== @@ -584,7 +398,7 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonschema@^1.2.5, jsonschema@^1.4.0: +jsonschema@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== @@ -596,7 +410,7 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -semver@^7.2.2, semver@^7.3.2: +semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== diff --git a/packages/core/index.js b/packages/core/index.js index 6043dda14c..f309f71f9c 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -16,6 +16,10 @@ async function synth(cdkOptions) { return await cdk.synth(cdkOptions); } +async function deploy(cdkOptions) { + return await cdk.deploy(cdkOptions); +} + async function parallelDeploy(cdkOptions, stackStates) { const STACK_DEPLOY_STATUS_PENDING = "pending"; const STACK_DEPLOY_STATUS_DEPLOYING = "deploying"; @@ -55,7 +59,10 @@ async function parallelDeploy(cdkOptions, stackStates) { region, outputs, exports, - } = await cdk.deploy({ ...cdkOptions, stackName: stackState.name }); + } = await cdk.deployAsync({ + ...cdkOptions, + stackName: stackState.name, + }); stackState.startedAt = Date.now(); stackState.account = account; stackState.region = region; @@ -793,6 +800,7 @@ async function parallelDestroy(cdkOptions, stackStates) { module.exports = { synth, + deploy, getCdkVersion, parallelDeploy, parallelDestroy, diff --git a/packages/core/package.json b/packages/core/package.json index b383af5cc2..8f820c1842 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -20,6 +20,6 @@ "dependencies": { "aws-sdk": "^2.761.0", "chalk": "^4.1.0", - "sst-cdk": "1.74.0-rc.1" + "sst-cdk": "1.74.0-rc.3" } } diff --git a/packages/resources/lambda/stub/index.js b/packages/resources/lambda/stub/index.js index e4882457b4..1bcda83df7 100644 --- a/packages/resources/lambda/stub/index.js +++ b/packages/resources/lambda/stub/index.js @@ -2,9 +2,6 @@ const WebSocket = require("ws"); let ws; let wsCallbackRef = {}; -// TODO -// - handle stub is idle for 10min and connection closes, need to check if closed event is received - exports.main = function (event, context, callback) { context.callbackWaitsForEmptyEventLoop = false; @@ -23,18 +20,31 @@ exports.main = function (event, context, callback) { wsCallbackRef.debugRequestId = debugRequestId; wsCallbackRef.callback = callback; + // Connection closed cases + // - closed while waiting for response + idle longer than 10min => send keep-alive after 9min + // - closed while waiting for response + 2hr connection limit => ? + // - closed while not waiting + idle longer than 10min => ? + // - closed while not waiting + 2hr connection limit => ? + + // Set timer to send keep-alive message if still waiting for response after 9 minutes + let wsKeepAliveTimer; + if (!ws) { - connectAndSendMessage(); + connect(() => { + sendMessage(); + }); } else { sendMessage(); } - function connectAndSendMessage() { + function connect(connectCallback = undefined) { ws = new WebSocket(process.env.SST_DEBUG_ENDPOINT); ws.on("open", () => { console.log("opened"); - sendMessage(); + if (connectCallback) { + connectCallback(); + } }); ws.on("close", () => { @@ -66,14 +76,31 @@ exports.main = function (event, context, callback) { awsRequestId, callbackWaitsForEmptyEventLoop, }, + env: constructEnvs(), }) ); console.log("request sent"); + + // Start timer + wsKeepAliveTimer = setTimeout(function () { + ws.send(JSON.stringify({ action: "keepalive" })); + console.log("sent keepalive message"); + }, 540000); } function receiveMessage(data) { console.log("response received", { data }); - const { action, debugRequestId, response } = JSON.parse(data); + const { action, debugRequestId, responseData, responseError } = JSON.parse( + data + ); + if (action === "failedToSendRequestDueToClientNotConnected") { + throw new Error("Debug client not connected."); + } + + if (action === "failedToSendRequestDueToUnknown") { + throw new Error("Failed to send request to debug client."); + } + if ( action !== "newResponse" || debugRequestId !== wsCallbackRef.debugRequestId @@ -81,6 +108,132 @@ exports.main = function (event, context, callback) { console.log("discard response"); return; } - wsCallbackRef.callback(null, response); + + // Stop timer + if (wsKeepAliveTimer) { + clearTimeout(wsKeepAliveTimer); + } + + // Handle response error + if (responseError) { + throw deserializeError(responseError); + } + + // Handle response data + wsCallbackRef.callback(null, responseData); + } + + function constructEnvs() { + const envs = {}; + Object.keys(process.env) + .filter( + (key) => + ![ + // Include + // + //'AWS_REGION', + //'AWS_DEFAULT_REGION', + //'AWS_LAMBDA_FUNCTION_NAME', + //'AWS_LAMBDA_FUNCTION_VERSION', + //'AWS_ACCESS_KEY_ID', + //'AWS_SECRET_ACCESS_KEY', + //'AWS_SESSION_TOKEN', + // + // Exclude + // + "SST_DEBUG_ENDPOINT", + "SST_DEBUG_SRC_HANDLER", + "SST_DEBUG_SRC_PATH", + "AWS_LAMBDA_FUNCTION_MEMORY_SIZE", + "AWS_LAMBDA_LOG_GROUP_NAME", + "AWS_LAMBDA_LOG_STREAM_NAME", + "LD_LIBRARY_PATH", + "LAMBDA_TASK_ROOT", + "AWS_LAMBDA_RUNTIME_API", + "AWS_EXECUTION_ENV", + "AWS_XRAY_DAEMON_ADDRESS", + "AWS_LAMBDA_INITIALIZATION_TYPE", + "PATH", + "PWD", + "LAMBDA_RUNTIME_DIR", + "LANG", + "NODE_PATH", + "TZ", + "SHLVL", + "_AWS_XRAY_DAEMON_ADDRESS", + "_AWS_XRAY_DAEMON_PORT", + "AWS_XRAY_CONTEXT_MISSING", + "_HANDLER", + "_X_AMZN_TRACE_ID", + ].includes(key) + ) + .forEach((key) => { + envs[key] = process.env[key]; + }); + return envs; } }; + +// Serialize error +// https://github.com/sindresorhus/serialize-error/blob/master/index.js +const commonProperties = [ + { property: "name", enumerable: false }, + { property: "message", enumerable: false }, + { property: "stack", enumerable: false }, + { property: "code", enumerable: true }, +]; + +const destroyCircular = ({ from, seen, to_, forceEnumerable }) => { + const to = to_ || (Array.isArray(from) ? [] : {}); + + seen.push(from); + + for (const [key, value] of Object.entries(from)) { + if (typeof value === "function") { + continue; + } + + if (!value || typeof value !== "object") { + to[key] = value; + continue; + } + + if (!seen.includes(from[key])) { + to[key] = destroyCircular({ + from: from[key], + seen: seen.slice(), + forceEnumerable, + }); + continue; + } + + to[key] = "[Circular]"; + } + + for (const { property, enumerable } of commonProperties) { + if (typeof from[property] === "string") { + Object.defineProperty(to, property, { + value: from[property], + enumerable: forceEnumerable ? true : enumerable, + configurable: true, + writable: true, + }); + } + } + + return to; +}; + +const deserializeError = (value) => { + if (value instanceof Error) { + return value; + } + + if (typeof value === "object" && value !== null && !Array.isArray(value)) { + const newError = new Error(); + destroyCircular({ from: value, seen: [], to_: newError }); + return newError; + } + + return value; +}; diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index e35cc8a6ef..9647296e6b 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -37,6 +37,7 @@ export class Function extends lambda.Function { code: lambda.Code.fromAsset(path.resolve(__dirname, "../lambda/stub")), handler: "index.main", environment: { + ...(props.environment || {}), SST_DEBUG_SRC_PATH: props.code.path, SST_DEBUG_SRC_HANDLER: props.handler, SST_DEBUG_ENDPOINT: root.debugEndpoint || "", diff --git a/packages/resources/src/NodejsFunction.ts b/packages/resources/src/NodejsFunction.ts index 833d7818e7..34232c3ebb 100644 --- a/packages/resources/src/NodejsFunction.ts +++ b/packages/resources/src/NodejsFunction.ts @@ -30,6 +30,7 @@ export class NodejsFunction extends lambda.NodejsFunction { entry: path.resolve(__dirname, "../lambda/stub/index.js"), handler: "main", environment: { + ...((props && props.environment) || {}), SST_DEBUG_SRC_PATH: srcPath, SST_DEBUG_SRC_HANDLER: srcHandler, SST_DEBUG_ENDPOINT: root.debugEndpoint || "", diff --git a/yarn.lock b/yarn.lock index 69df9729b8..449d91e909 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8577,10 +8577,10 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -sst-cdk@1.74.0-rc.1: - version "1.74.0-rc.1" - resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.74.0-rc.1.tgz#3ce6f1bb32da7ae2a79c4fe40ed99e4937eefb65" - integrity sha512-ZHHlzqJv7rFS2gyiN5YyLitJ3pRg2BEjmZDpmkmr3GRTyaZnrs6Z//ntiipSRE/5B3Jd89xHkCQViusVp/ZhRw== +sst-cdk@1.74.0-rc.3: + version "1.74.0-rc.3" + resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.74.0-rc.3.tgz#1abaeb8cf4ff45cf96276dfe81be2366c80d7da5" + integrity sha512-b2b64GrQQIM2BnT6I0JjruwNxGGQNRkhRfF9ZJut7Is2aMyubgA9bm0LIy223LiIadVi+njyiuhrNNnfr84hEA== dependencies: "@aws-cdk/cloud-assembly-schema" "1.74.0" "@aws-cdk/cloudformation-diff" "1.74.0" From 3af77f78e5ba40660e77d5723a465a2e380915fb Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 24 Nov 2020 23:13:30 -0500 Subject: [PATCH 134/481] Organizing files --- .../cdk-wrapper}/.babelrc.json | 0 .../wrapper => assets/cdk-wrapper}/run.js | 0 .../debug => assets/debug-stack}/bin/index.js | 2 +- .../debug => assets/debug-stack}/cdk.json | 0 .../debug-stack}/lambda/wsConnect.js | 0 .../debug-stack}/lambda/wsDefault.js | 0 .../debug-stack}/lambda/wsDisconnect.js | 0 .../debug-stack/lib/DebugStack.js} | 0 .../lambda-invoke}/bootstrap.js | 0 .../lambda-invoke}/serializeError.js | 0 packages/cli/bin/scripts.js | 6 +- .../config => bin}/sync-cdk-version.js | 2 + packages/cli/{scripts/util => lib}/errors.js | 0 packages/cli/{scripts/util => lib}/logger.js | 0 packages/cli/package.json | 2 +- packages/cli/scripts/add-cdk.js | 2 +- packages/cli/scripts/build.js | 4 +- packages/cli/scripts/cdk.js | 6 +- packages/cli/scripts/config/cdkOptions.js | 6 - packages/cli/scripts/deploy.js | 4 +- packages/cli/scripts/remove.js | 2 +- packages/cli/scripts/start.js | 17 +- packages/cli/scripts/test.js | 4 +- .../{config => util}/.eslintrc.babel.js | 0 .../{config => util}/.eslintrc.typescript.js | 0 .../{config => util}/babelJestTransform.js | 0 .../scripts/{config => util}/cdkHelpers.js | 10 +- packages/cli/scripts/util/cdkOptions.js | 6 + .../{config => util}/createJestConfig.js | 2 +- .../cli/scripts/{config => util}/paths.js | 0 packages/cli/test/base-ts/yarn.lock | 473 +++++++---- packages/cli/test/base/yarn.lock | 638 +++++++-------- packages/cli/test/config/yarn.lock | 520 +++++++------ packages/cli/test/context/yarn.lock | 520 +++++++------ packages/cli/test/jest/yarn.lock | 733 +++++++++--------- packages/cli/test/stack-no-prefix/yarn.lock | 277 ++++++- 36 files changed, 1833 insertions(+), 1403 deletions(-) rename packages/cli/{scripts/config => assets/cdk-wrapper}/.babelrc.json (100%) rename packages/cli/{scripts/wrapper => assets/cdk-wrapper}/run.js (100%) rename packages/cli/{scripts/debug => assets/debug-stack}/bin/index.js (84%) rename packages/cli/{scripts/debug => assets/debug-stack}/cdk.json (100%) rename packages/cli/{scripts/debug => assets/debug-stack}/lambda/wsConnect.js (100%) rename packages/cli/{scripts/debug => assets/debug-stack}/lambda/wsDefault.js (100%) rename packages/cli/{scripts/debug => assets/debug-stack}/lambda/wsDisconnect.js (100%) rename packages/cli/{scripts/debug/lib/debug-stack.js => assets/debug-stack/lib/DebugStack.js} (100%) rename packages/cli/{scripts/wrapper => assets/lambda-invoke}/bootstrap.js (100%) rename packages/cli/{scripts/wrapper => assets/lambda-invoke}/serializeError.js (100%) rename packages/cli/{scripts/config => bin}/sync-cdk-version.js (98%) mode change 100644 => 100755 rename packages/cli/{scripts/util => lib}/errors.js (100%) rename packages/cli/{scripts/util => lib}/logger.js (100%) delete mode 100644 packages/cli/scripts/config/cdkOptions.js rename packages/cli/scripts/{config => util}/.eslintrc.babel.js (100%) rename packages/cli/scripts/{config => util}/.eslintrc.typescript.js (100%) rename packages/cli/scripts/{config => util}/babelJestTransform.js (100%) rename packages/cli/scripts/{config => util}/cdkHelpers.js (96%) create mode 100644 packages/cli/scripts/util/cdkOptions.js rename packages/cli/scripts/{config => util}/createJestConfig.js (97%) rename packages/cli/scripts/{config => util}/paths.js (100%) diff --git a/packages/cli/scripts/config/.babelrc.json b/packages/cli/assets/cdk-wrapper/.babelrc.json similarity index 100% rename from packages/cli/scripts/config/.babelrc.json rename to packages/cli/assets/cdk-wrapper/.babelrc.json diff --git a/packages/cli/scripts/wrapper/run.js b/packages/cli/assets/cdk-wrapper/run.js similarity index 100% rename from packages/cli/scripts/wrapper/run.js rename to packages/cli/assets/cdk-wrapper/run.js diff --git a/packages/cli/scripts/debug/bin/index.js b/packages/cli/assets/debug-stack/bin/index.js similarity index 84% rename from packages/cli/scripts/debug/bin/index.js rename to packages/cli/assets/debug-stack/bin/index.js index 31b23248e5..0458ba0192 100644 --- a/packages/cli/scripts/debug/bin/index.js +++ b/packages/cli/assets/debug-stack/bin/index.js @@ -1,7 +1,7 @@ #!/usr/bin/env node const cdk = require("@aws-cdk/core"); -const { DebugStack } = require("../lib/debug-stack"); +const { DebugStack } = require("../lib/DebugStack"); const stage = process.env.SST_DEBUG_STAGE; const region = process.env.SST_DEBUG_REGION; diff --git a/packages/cli/scripts/debug/cdk.json b/packages/cli/assets/debug-stack/cdk.json similarity index 100% rename from packages/cli/scripts/debug/cdk.json rename to packages/cli/assets/debug-stack/cdk.json diff --git a/packages/cli/scripts/debug/lambda/wsConnect.js b/packages/cli/assets/debug-stack/lambda/wsConnect.js similarity index 100% rename from packages/cli/scripts/debug/lambda/wsConnect.js rename to packages/cli/assets/debug-stack/lambda/wsConnect.js diff --git a/packages/cli/scripts/debug/lambda/wsDefault.js b/packages/cli/assets/debug-stack/lambda/wsDefault.js similarity index 100% rename from packages/cli/scripts/debug/lambda/wsDefault.js rename to packages/cli/assets/debug-stack/lambda/wsDefault.js diff --git a/packages/cli/scripts/debug/lambda/wsDisconnect.js b/packages/cli/assets/debug-stack/lambda/wsDisconnect.js similarity index 100% rename from packages/cli/scripts/debug/lambda/wsDisconnect.js rename to packages/cli/assets/debug-stack/lambda/wsDisconnect.js diff --git a/packages/cli/scripts/debug/lib/debug-stack.js b/packages/cli/assets/debug-stack/lib/DebugStack.js similarity index 100% rename from packages/cli/scripts/debug/lib/debug-stack.js rename to packages/cli/assets/debug-stack/lib/DebugStack.js diff --git a/packages/cli/scripts/wrapper/bootstrap.js b/packages/cli/assets/lambda-invoke/bootstrap.js similarity index 100% rename from packages/cli/scripts/wrapper/bootstrap.js rename to packages/cli/assets/lambda-invoke/bootstrap.js diff --git a/packages/cli/scripts/wrapper/serializeError.js b/packages/cli/assets/lambda-invoke/serializeError.js similarity index 100% rename from packages/cli/scripts/wrapper/serializeError.js rename to packages/cli/assets/lambda-invoke/serializeError.js diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index 3a9f24dece..7287a6e3aa 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -20,10 +20,10 @@ const chalk = require("chalk"); const spawn = require("cross-spawn"); const packageJson = require("../package.json"); -const paths = require("../scripts/config/paths"); -const cdkOptions = require("../scripts/config/cdkOptions"); +const paths = require("../scripts/util/paths"); +const cdkOptions = require("../scripts/util/cdkOptions"); const { getCdkVersion } = require("@serverless-stack/core"); -const { prepareCdk } = require("../scripts/config/cdkHelpers"); +const { prepareCdk } = require("../scripts/util/cdkHelpers"); const sstVersion = packageJson.version; const cdkVersion = getCdkVersion(); diff --git a/packages/cli/scripts/config/sync-cdk-version.js b/packages/cli/bin/sync-cdk-version.js old mode 100644 new mode 100755 similarity index 98% rename from packages/cli/scripts/config/sync-cdk-version.js rename to packages/cli/bin/sync-cdk-version.js index 009f2ed0b4..378504351c --- a/packages/cli/scripts/config/sync-cdk-version.js +++ b/packages/cli/bin/sync-cdk-version.js @@ -1,3 +1,5 @@ +#!/usr/bin/env node + /** * Gets the forked AWS CDK version from @serverless-stack/core and makes sure: * - The aws-cdk package used for the cdk command is the same version diff --git a/packages/cli/scripts/util/errors.js b/packages/cli/lib/errors.js similarity index 100% rename from packages/cli/scripts/util/errors.js rename to packages/cli/lib/errors.js diff --git a/packages/cli/scripts/util/logger.js b/packages/cli/lib/logger.js similarity index 100% rename from packages/cli/scripts/util/logger.js rename to packages/cli/lib/logger.js diff --git a/packages/cli/package.json b/packages/cli/package.json index 51e5de1a2e..b197654dca 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -3,7 +3,7 @@ "version": "0.4.3", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { - "prepare": "node scripts/config/sync-cdk-version.js", + "prepare": "./bin/sync-cdk-version.js", "jest-clear-cache": "jest --clearCache", "test": "jest" }, diff --git a/packages/cli/scripts/add-cdk.js b/packages/cli/scripts/add-cdk.js index c0020d5ebd..01c4c06903 100644 --- a/packages/cli/scripts/add-cdk.js +++ b/packages/cli/scripts/add-cdk.js @@ -3,7 +3,7 @@ const chalk = require("chalk"); const spawn = require("cross-spawn"); -const logger = require("./util/logger"); +const logger = require("../lib/logger"); module.exports = async function (argv, cliInfo) { const npm = cliInfo.npm; diff --git a/packages/cli/scripts/build.js b/packages/cli/scripts/build.js index aeca40c707..ccb40a790b 100644 --- a/packages/cli/scripts/build.js +++ b/packages/cli/scripts/build.js @@ -2,8 +2,8 @@ const chalk = require("chalk"); -const logger = require("./util/logger"); -const { synth } = require("./config/cdkHelpers"); +const logger = require("../lib/logger"); +const { synth } = require("./util/cdkHelpers"); function printResults(results, usingYarn) { const stacks = results.stacks; diff --git a/packages/cli/scripts/cdk.js b/packages/cli/scripts/cdk.js index 7c619d8009..fc86ad396a 100644 --- a/packages/cli/scripts/cdk.js +++ b/packages/cli/scripts/cdk.js @@ -12,12 +12,12 @@ let argv = process.argv.slice(3); const path = require("path"); const spawn = require("cross-spawn"); -const paths = require("./config/paths"); -const cdkOptions = require("./config/cdkOptions"); +const paths = require("./util/paths"); +const cdkOptions = require("./util/cdkOptions"); // CDK command spawn.sync( path.join(paths.ownNodeModules, ".bin/cdk"), - [ "--app", cdkOptions.app ].concat(argv), + ["--app", cdkOptions.app].concat(argv), { stdio: "inherit" } ); diff --git a/packages/cli/scripts/config/cdkOptions.js b/packages/cli/scripts/config/cdkOptions.js deleted file mode 100644 index a5e80d0ac6..0000000000 --- a/packages/cli/scripts/config/cdkOptions.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = { - output: 'build/cdk.out', - app: 'node build/run.js', -}; diff --git a/packages/cli/scripts/deploy.js b/packages/cli/scripts/deploy.js index 4fb27c8a4d..93f393fd1b 100644 --- a/packages/cli/scripts/deploy.js +++ b/packages/cli/scripts/deploy.js @@ -1,9 +1,9 @@ "use strict"; const chalk = require("chalk"); -const { parallelDeploy } = require("./config/cdkHelpers"); +const { parallelDeploy } = require("./util/cdkHelpers"); -const logger = require("./util/logger"); +const logger = require("../lib/logger"); module.exports = async function (argv, config, cliInfo) { logger.log(chalk.grey("Deploying " + (argv.stack ? argv.stack : "stacks"))); diff --git a/packages/cli/scripts/remove.js b/packages/cli/scripts/remove.js index 594e4179d0..c478d2efb1 100644 --- a/packages/cli/scripts/remove.js +++ b/packages/cli/scripts/remove.js @@ -3,7 +3,7 @@ const chalk = require("chalk"); const { parallelDestroy } = require("@serverless-stack/core"); -const logger = require("./util/logger"); +const logger = require("../lib/logger"); module.exports = async function (argv, config, cliInfo) { logger.log(chalk.grey("Removing " + (argv.stack ? argv.stack : "stacks"))); diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index a0c6024b87..41ac418939 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -1,17 +1,18 @@ "use strict"; +const path = require("path"); +const chalk = require("chalk"); const WebSocket = require("ws"); const spawn = require("cross-spawn"); -const chalk = require("chalk"); const sstDeploy = require("./deploy"); -const paths = require("./config/paths"); +const paths = require("./util/paths"); const { prepareCdk, applyConfig, deploy: cdkDeploy, -} = require("./config/cdkHelpers"); -const logger = require("./util/logger"); +} = require("./util/cdkHelpers"); +const logger = require("../lib/logger"); const WEBSOCKET_CLOSE_CODE = { NEW_CLIENT_CONNECTED: 4901, @@ -137,7 +138,7 @@ function onMessage(message) { `--max-old-space-size=${oldSpace}`, `--max-semi-space-size=${semiSpace}`, "--max-http-header-size=81920", // HTTP header limit of 8KB - require.resolve("../scripts/wrapper/bootstrap.js"), + path.join(paths.ownPath, "assets", "lambda-invoke", "bootstrap.js"), JSON.stringify(event), JSON.stringify(context), //"./src", // Local path to the Lambda functions @@ -225,12 +226,14 @@ module.exports = async function (argv, cliInfo) { // Note: When deploying the debug stack, the current working directory is user's app. // Setting the current working directory to debug stack cdk app directory to allow // Lambda Function construct be able to reference code with relative path. - process.chdir(`${paths.ownPath}/scripts/debug`); + process.chdir(path.join(paths.ownPath, "assets", "debug-stack")); const debugStackRet = await cdkDeploy({ ...cliInfo.cdkOptions, app: `${debugAppEnvs.join(" ")} node bin/index.js`, output: "cdk.out", }); + // Note: Restore working directory + process.chdir(paths.appPath); // Get websocket endpoint if ( @@ -250,8 +253,6 @@ module.exports = async function (argv, cliInfo) { logger.log(" Deploying app"); logger.log("==============="); logger.log(""); - // Note: Restore working directory - process.chdir(paths.appPath); prepareCdk(argv, cliInfo, config); await sstDeploy(argv, config, cliInfo); diff --git a/packages/cli/scripts/test.js b/packages/cli/scripts/test.js index 17f19ccea7..8990bb8da0 100644 --- a/packages/cli/scripts/test.js +++ b/packages/cli/scripts/test.js @@ -17,9 +17,9 @@ process.on("unhandledRejection", (err) => { const jest = require("jest"); let argv = process.argv.slice(2); -const createJestConfig = require("./config/createJestConfig"); +const createJestConfig = require("./util/createJestConfig"); const path = require("path"); -const paths = require("./config/paths"); +const paths = require("./util/paths"); argv.push( "--config", JSON.stringify( diff --git a/packages/cli/scripts/config/.eslintrc.babel.js b/packages/cli/scripts/util/.eslintrc.babel.js similarity index 100% rename from packages/cli/scripts/config/.eslintrc.babel.js rename to packages/cli/scripts/util/.eslintrc.babel.js diff --git a/packages/cli/scripts/config/.eslintrc.typescript.js b/packages/cli/scripts/util/.eslintrc.typescript.js similarity index 100% rename from packages/cli/scripts/config/.eslintrc.typescript.js rename to packages/cli/scripts/util/.eslintrc.typescript.js diff --git a/packages/cli/scripts/config/babelJestTransform.js b/packages/cli/scripts/util/babelJestTransform.js similarity index 100% rename from packages/cli/scripts/config/babelJestTransform.js rename to packages/cli/scripts/util/babelJestTransform.js diff --git a/packages/cli/scripts/config/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js similarity index 96% rename from packages/cli/scripts/config/cdkHelpers.js rename to packages/cli/scripts/util/cdkHelpers.js index 05ffc4005f..ef5b7aae44 100644 --- a/packages/cli/scripts/config/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -7,8 +7,8 @@ const spawn = require("cross-spawn"); const sstCore = require("@serverless-stack/core"); const paths = require("./paths"); -const logger = require("../util/logger"); -const { isSubProcessError } = require("../util/errors"); +const logger = require("../../lib/logger"); +const { isSubProcessError } = require("../../lib/errors"); const isTs = fs.existsSync(path.join(paths.appPath, "tsconfig.json")); @@ -123,7 +123,7 @@ function lint() { [ "--no-error-on-unmatched-pattern", "--config", - path.join(paths.ownPath, "scripts", "config", config), + path.join(paths.ownPath, "scripts", "util", config), "--ext", ".js,.ts", "--fix", @@ -187,14 +187,14 @@ function transpile(cliInfo) { function copyConfigFiles() { fs.copyFileSync( - path.join(paths.ownPath, "scripts", "config", ".babelrc.json"), + path.join(paths.ownPath, "assets", "cdk-wrapper", ".babelrc.json"), path.join(paths.appBuildPath, ".babelrc.json") ); } function copyWrapperFiles() { fs.copyFileSync( - path.join(paths.ownScriptsPath, "wrapper", "run.js"), + path.join(paths.ownPath, "assets", "cdk-wrapper", "run.js"), path.join(paths.appBuildPath, "run.js") ); } diff --git a/packages/cli/scripts/util/cdkOptions.js b/packages/cli/scripts/util/cdkOptions.js new file mode 100644 index 0000000000..2c4f19454c --- /dev/null +++ b/packages/cli/scripts/util/cdkOptions.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = { + output: "build/cdk.out", + app: "node build/run.js", +}; diff --git a/packages/cli/scripts/config/createJestConfig.js b/packages/cli/scripts/util/createJestConfig.js similarity index 97% rename from packages/cli/scripts/config/createJestConfig.js rename to packages/cli/scripts/util/createJestConfig.js index 4721173f3c..f0c71e3fc7 100644 --- a/packages/cli/scripts/config/createJestConfig.js +++ b/packages/cli/scripts/util/createJestConfig.js @@ -31,7 +31,7 @@ module.exports = (resolve, rootDir) => { "/**/*.{spec,test}.{js,jsx,ts,tsx}", ], transform: { - "^.+\\.(js|jsx)$": resolve("scripts/config/babelJestTransform.js"), + "^.+\\.(js|jsx)$": resolve("scripts/util/babelJestTransform.js"), }, transformIgnorePatterns: [ "[/\\\\]node_modules[/\\\\].+\\.(js|jsx|ts|tsx)$", diff --git a/packages/cli/scripts/config/paths.js b/packages/cli/scripts/util/paths.js similarity index 100% rename from packages/cli/scripts/config/paths.js rename to packages/cli/scripts/util/paths.js diff --git a/packages/cli/test/base-ts/yarn.lock b/packages/cli/test/base-ts/yarn.lock index 8f3ca49b15..2f257a7d82 100644 --- a/packages/cli/test/base-ts/yarn.lock +++ b/packages/cli/test/base-ts/yarn.lock @@ -2,142 +2,300 @@ # yarn lockfile v1 -"@aws-cdk/assert@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.61.0.tgz#c1dbbf71fd64beb067a6e6237e03686319acaaa7" - integrity sha512-avvDVpyd8zLMT0HEW1K2ngP5U8CHu+BtPinUkLpLXVJ+Cr5K12plnk84+BOWe1NhM9/bqC4b1KA0c6MzIzgREA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cloudformation-diff" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-events@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" - integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-iam@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" - integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== - dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-kms@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" - integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" - integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== - dependencies: - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/cfnspec@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.61.0.tgz#69e998ab83c0a478b76e1c5deb8484171dfd95f9" - integrity sha512-Ss5N3unY6iVh9SjYAYvTyvhdb7Kaz6dVFeV8K68UGewiFcHpC5tQi3YmlVBw3HCgKoRt20emiHAfmdfeGO/PUQ== +"@aws-cdk/assert@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.74.0.tgz#82795a3bb21ede93288a60322804f6f4e2d4959e" + integrity sha512-5M3M4lcSS2dGPgVANhv5GjqC6nNBy9bL1XECAJj3lg7q+6zJ00+0wq4bB0wyvm/mE+S0axkGZ4LVHF5QA2gCfQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/cloudformation-diff" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/assets@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.74.0.tgz#8aea948a32afcf7c60449346a087c4b5aecff251" + integrity sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ== + dependencies: + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-applicationautoscaling@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz#ad5e946e68bd4094c3236e983d36f67d66135dfc" + integrity sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-autoscaling-common@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz#f6bcbb987830f299b6e2ef454944afdde9a8a82e" + integrity sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudwatch@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz#94a29d2998a5c08412084b346d404b3a8b90f8a8" + integrity sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-codeguruprofiler@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz#d749688e9edb252ce6fc68efa4f9977f7ba02cb6" + integrity sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ec2@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz#eae31df9045ca9374daf6b1562674e31d8053aff" + integrity sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/aws-ssm" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-efs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz#367b89f14ccd090f98227dbc975076571b31faac" + integrity sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA== + dependencies: + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-events@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz#2ed5a4cdd737ce4c8950506df496d0b43ac6aa12" + integrity sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-iam@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz#c255c9676fb6048ab27c00d111ed5e7d8b46877c" + integrity sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA== + dependencies: + "@aws-cdk/core" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-kms@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz#73531f7b5d2542eb5e3f7bb54604944921e34995" + integrity sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda-nodejs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.74.0.tgz#aa818270e4dcd74be51d402cdb114da311b3c966" + integrity sha512-1mc8I+Yz43El8O8SjsfkABsI31tcpO5e3fAz7/40DKuFgM9jkL6vyiL55MLIckAqmE2N9mRYU0xF4RC7uRZdmQ== + dependencies: + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz#52175fbc9e679ca5c0f4d15e0666c99fc4a953d0" + integrity sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-codeguruprofiler" "1.74.0" + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-efs" "1.74.0" + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/aws-sqs" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-logs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz#cd40afe70ffeb5250ecea1db0ee0a2f68fb2084a" + integrity sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3-assets@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz#7f1988f3931e95d88a8c1357f98c47f7f9b73dee" + integrity sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg== + dependencies: + "@aws-cdk/assets" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz#5b53839c3af0f67bfb1e96061f6a1ea5be445fe9" + integrity sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q== + dependencies: + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sqs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz#998da5838d4310805432f0cf55fcc7c8f34657e2" + integrity sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ssm@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz#426dd65c0b933618d5c196cb38386c1035b0fdc4" + integrity sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/cfnspec@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.74.0.tgz#03577e266721fe87287f9fc710a95d7b7e5886cd" + integrity sha512-9rdFgRUoV3lbAD6lnU+hGdkit8ILmUq+XCXzRdc9xWHUXIKxMmFK9frXTT+wGmjgdz/GpPyfSbFjzyqk4QE5+w== dependencies: md5 "^2.3.0" -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== +"@aws-cdk/cloud-assembly-schema@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz#f1bbd8411ec320dd9e14ef2dce626a05019c42bc" + integrity sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw== dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" + jsonschema "^1.4.0" + semver "^7.3.2" -"@aws-cdk/cloudformation-diff@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.61.0.tgz#8acb549fd1dd819aa61dfed47e011b44827045a8" - integrity sha512-TrrmywhYkXxGNTmDd1k2biJMVtEvb0QcbZ/IGM6biMXIJ+wsjw/n5snvwciQ8/PHZmsUYk67qulGdso1rpy06Q== +"@aws-cdk/cloudformation-diff@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.74.0.tgz#d86199db530f9df641cff7f3996939c47645d59f" + integrity sha512-aYAg85fkpX39euUo5HjsGtqOpyD5fAz1+jZ/F/5erA8Y/+rB4ifCVJH0cLYHVdYwo8oc3poB6jW4tVMxNYxbrg== dependencies: - "@aws-cdk/cfnspec" "1.61.0" + "@aws-cdk/cfnspec" "1.74.0" colors "^1.4.0" - diff "^4.0.2" + diff "^5.0.0" fast-deep-equal "^3.1.3" string-width "^4.2.0" - table "^5.4.6" + table "^6.0.3" -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== +"@aws-cdk/core@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.74.0.tgz#132d31c0ab9d39394827431ccd804cf10de34273" + integrity sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + "@balena/dockerignore" "^1.0.2" + constructs "^3.2.0" fs-extra "^9.0.1" + ignore "^5.1.8" minimatch "^3.0.4" -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== +"@aws-cdk/cx-api@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz#922c11389d723eadef2bc12666ced4980fe9e4cc" + integrity sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + semver "^7.3.2" + +"@aws-cdk/region-info@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.74.0.tgz#e53eabe2d8980c360e63ea956615253551005182" + integrity sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA== -"@aws-cdk/region-info@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" - integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== "@serverless-stack/resources@../../../resources": - version "0.1.3" + version "0.4.3" dependencies: - "@aws-cdk/core" "1.61.0" - -ajv@^6.10.2: - version "6.12.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" - integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-lambda-nodejs" "1.74.0" + "@aws-cdk/core" "1.74.0" + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== -ansi-styles@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== +ansi-styles@^4.0.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 "^1.9.0" + color-convert "^2.0.1" -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== at-least-node@^1.0.0: version "1.0.0" @@ -162,17 +320,17 @@ charenc@0.0.2: resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== +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.3" + color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +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== colors@^1.4.0: version "1.4.0" @@ -184,25 +342,20 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== +constructs@^3.2.0: + version "3.2.40" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.40.tgz#e8c0e1020ad254ff73d9ea6c85cc90c3a33c71f1" + integrity sha512-XtKn+Pzq8EZNe1zasQem6X09dprZ8pXvNxECKQLZC+jU5BdkgDKe0nak4Wp+k7uvDFlyh9NccaGtxqP6w2YS0A== crypt@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= -diff@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +diff@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== emoji-regex@^8.0.0: version "8.0.0" @@ -234,16 +387,16 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +ignore@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - 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" @@ -263,12 +416,12 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== +jsonschema@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== -lodash@^4.17.14: +lodash@^4.17.20: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== @@ -294,28 +447,19 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -semver@^7.2.2: +semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" string-width@^4.2.0: version "4.2.0" @@ -326,13 +470,6 @@ string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -340,15 +477,15 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" -table@^5.4.6: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== +table@^6.0.3: + version "6.0.4" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.4.tgz#c523dd182177e926c723eb20e1b341238188aa0d" + integrity sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw== dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" + ajv "^6.12.4" + lodash "^4.17.20" + slice-ansi "^4.0.0" + string-width "^4.2.0" universalify@^1.0.0: version "1.0.0" diff --git a/packages/cli/test/base/yarn.lock b/packages/cli/test/base/yarn.lock index 5fc447868c..826fd43e4a 100644 --- a/packages/cli/test/base/yarn.lock +++ b/packages/cli/test/base/yarn.lock @@ -2,309 +2,331 @@ # yarn lockfile v1 -"@aws-cdk/assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.61.0.tgz#9702ba8ef5b3c45ec47e0530006d63dc0685a5ff" - integrity sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA== - dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-applicationautoscaling@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz#8129984ba0185bbb525fd8ef6328c5c84e51e4e5" - integrity sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-autoscaling-common@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz#9e7f6a8669b36001b846d90fa8cb65d8b4edb27b" - integrity sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-certificatemanager@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.61.0.tgz#2362854c86f7b7f8344aec6dda9e84eb7017acc0" - integrity sha512-sTLmDyh8aER9ovvXuK1Q8Jcs1PY1H0W5Rg2ueCZvCNO5NktGsbt5oYZZiDFyIEtuASuArGp0XjkLP+qtPC6J3w== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-route53" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudformation@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.61.0.tgz#6810e5327aa53b6d73cb337af340db152284aad7" - integrity sha512-e7mti0sWR6Sf4tav36bu379kkG5E33VMPLZaT8RkhXkIl97c1OaGHVx5G1Oe5DiHka08c+PA6da8ahkrR1wSkQ== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudwatch@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz#3c0171ca76d086da424c1b4148a53c4d68dd885a" - integrity sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-codeguruprofiler@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz#1ace4c61a4a7b916f4dbe28070b5b914949e6f06" - integrity sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - -"@aws-cdk/aws-cognito@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.61.0.tgz#0fd460e4bfae70d335c02befd4f997de9f9d8ded" - integrity sha512-MiZxDVdStTX1uD6NOpeMoKtL/DMyYONG6Hh8t851bLgxjZDQw8W7ZCWTLBjDIymt7m/seFNF3bWdYD883S17fQ== - dependencies: - "@aws-cdk/aws-certificatemanager" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/custom-resources" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-dynamodb@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.61.0.tgz#3d9b1ffd6eb965152a2456de1b08625d3f3ee907" - integrity sha512-Qd87xJNTjCRBQ//H4WA6Lif3VuA9QuyKyterlmTGnmrUsAqubkKtxu/lLvMp0gQb9LzjQ5Hn9238v1s8rDBDlw== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/custom-resources" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ec2@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz#d39b1f5356c57089b963bbe4644adc02fd12a4bf" - integrity sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-ssm" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-efs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz#c4d66d0d928c01c8018c1c8bc75a1c5097d649ce" - integrity sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg== - dependencies: - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-events@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" - integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-iam@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" - integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== - dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-kms@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" - integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-lambda@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz#65b2fb456f6c2d0566401bd3d265f5bae47d6346" - integrity sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-codeguruprofiler" "1.61.0" - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-efs" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-logs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz#430bb5fc87ec606416ffb0869f04754185092a21" - integrity sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-route53@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.61.0.tgz#f4b50ba975f687dcbc763b1cb98eaf0c6ac22b36" - integrity sha512-VKfEtqEMXXPBel3/QQMET0jmw7qyAXWOywzSPQ1/8J6th2q9hMzLQOr6fkuf1rTdVMNjLXhHqXq/W+JinfCUqw== - dependencies: - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3-assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz#8512ac0e16818bc78eff010d15d6cc99a7d8fccf" - integrity sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA== - dependencies: - "@aws-cdk/assets" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" - integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== - dependencies: - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sns@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.61.0.tgz#c82f9b224b7ebf3e48cd9433456156e5d3f1df89" - integrity sha512-jmJmZXidJAJTg4lPnxMm26QR3ovMYb/89NBWnIRwGdVGcZ7nrWUkC0JNPQMbP+EvUFdh/9xdFVP4JvvzZzoy0w== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sqs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz#b2d1d7a5d27d36d1580a3cb500daf417037da492" - integrity sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ssm@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz#229308cfce757f8b3f75d12bf276ce4f8042076f" - integrity sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" +"@aws-cdk/assets@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.74.0.tgz#8aea948a32afcf7c60449346a087c4b5aecff251" + integrity sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ== + dependencies: + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-applicationautoscaling@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz#ad5e946e68bd4094c3236e983d36f67d66135dfc" + integrity sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-autoscaling-common@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz#f6bcbb987830f299b6e2ef454944afdde9a8a82e" + integrity sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-certificatemanager@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.74.0.tgz#35b07c4b396a3db96da5d431e549460d1edc2251" + integrity sha512-Ve1SYM6qpUysHLD5bzHiE4kXBeo7VAEQlUti0cjkkjkuPh+dKHti/TqYhA0tkfUIMjZylnvkogBzMYdIUBTNxg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-route53" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudformation@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.74.0.tgz#04fffb02403fb52ee05ec43172b845a29a903a9e" + integrity sha512-VOyuMhoxA9vk3zSUfzqSg1YjYYgc+qyB0bpaOJIW/iinXYXhA64z5YQnTxdwd/exlFgA59chOanA7aRrNM2YIg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-sns" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudwatch@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz#94a29d2998a5c08412084b346d404b3a8b90f8a8" + integrity sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-codeguruprofiler@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz#d749688e9edb252ce6fc68efa4f9977f7ba02cb6" + integrity sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cognito@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.74.0.tgz#740f51269cbe00b46ae6327814dd8c0dbb470912" + integrity sha512-t8XZbWQd8gMgn6FfYlPBmb3HDBVFHZI3tEODgc4mu/qRZAn2GH+pka4l1kdsgfzsBekvBLsOQosp7xJ6XaABsA== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/custom-resources" "1.74.0" + constructs "^3.2.0" + punycode "^2.1.1" + +"@aws-cdk/aws-dynamodb@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.74.0.tgz#7e0ef530e9c3d7301a9db616ddf6d650f7acb76f" + integrity sha512-YU38dFYLMyMe5u2GLy8sFCFTVxwDgWZ67HzFg41kSj8WpAsVQEE5Zxh1nf0+8Ai1J4MNeLeMCaXtuliHipoQSw== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/custom-resources" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ec2@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz#eae31df9045ca9374daf6b1562674e31d8053aff" + integrity sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/aws-ssm" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-efs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz#367b89f14ccd090f98227dbc975076571b31faac" + integrity sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA== + dependencies: + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-events@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz#2ed5a4cdd737ce4c8950506df496d0b43ac6aa12" + integrity sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-iam@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz#c255c9676fb6048ab27c00d111ed5e7d8b46877c" + integrity sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA== + dependencies: + "@aws-cdk/core" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-kms@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz#73531f7b5d2542eb5e3f7bb54604944921e34995" + integrity sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda-nodejs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.74.0.tgz#aa818270e4dcd74be51d402cdb114da311b3c966" + integrity sha512-1mc8I+Yz43El8O8SjsfkABsI31tcpO5e3fAz7/40DKuFgM9jkL6vyiL55MLIckAqmE2N9mRYU0xF4RC7uRZdmQ== + dependencies: + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz#52175fbc9e679ca5c0f4d15e0666c99fc4a953d0" + integrity sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-codeguruprofiler" "1.74.0" + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-efs" "1.74.0" + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/aws-sqs" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-logs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz#cd40afe70ffeb5250ecea1db0ee0a2f68fb2084a" + integrity sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-route53@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.74.0.tgz#f9b3c770cf613227bba31c4a7499c8f19966f3e4" + integrity sha512-TYnAByXLc6B/uAG03bYLV0kPi1TU8G95kW6wNhfiqvPCSwfizbsg5rztbUoydJpBocbOs9qbtCM7v6gbDsB2bQ== + dependencies: + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3-assets@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz#7f1988f3931e95d88a8c1357f98c47f7f9b73dee" + integrity sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg== + dependencies: + "@aws-cdk/assets" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz#5b53839c3af0f67bfb1e96061f6a1ea5be445fe9" + integrity sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q== + dependencies: + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sns@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.74.0.tgz#c9289b34cb2512010a0b6813f684c93398502bdd" + integrity sha512-O0HDGvl1WjCTU53auNJKCW5/6vpbVYlj0RwLgGaOOlTeKnfuq53kGvL/t3QdZQlJWxSvkbN61O+rZB7GacXV0g== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-sqs" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sqs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz#998da5838d4310805432f0cf55fcc7c8f34657e2" + integrity sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ssm@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz#426dd65c0b933618d5c196cb38386c1035b0fdc4" + integrity sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/cloud-assembly-schema@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz#f1bbd8411ec320dd9e14ef2dce626a05019c42bc" + integrity sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw== + dependencies: + jsonschema "^1.4.0" + semver "^7.3.2" + +"@aws-cdk/core@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.74.0.tgz#132d31c0ab9d39394827431ccd804cf10de34273" + integrity sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + "@balena/dockerignore" "^1.0.2" + constructs "^3.2.0" fs-extra "^9.0.1" + ignore "^5.1.8" minimatch "^3.0.4" -"@aws-cdk/custom-resources@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.61.0.tgz#03749f4122e46504fd1b3b3b9a11aa3578f269bf" - integrity sha512-etnHE7A0+J5w1L/m+KxEbPQ7LgtVYvEUV6naqRp5uIsTBaJ9sCQ+q43Y3Fj+g3NMigm8C2fKg5FmiFE6kiymDQ== +"@aws-cdk/custom-resources@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.74.0.tgz#19329e8a9b9bc0ca66e00c791b008c416a67265f" + integrity sha512-KDXgyRCeCMIj42nQcd2RXc4GYQpd7SWtx2iw0G4Wvs/wG4i3nR1qdlvEJvAlNgsYeqM4pp3mIp3PgdX341HsCg== dependencies: - "@aws-cdk/aws-cloudformation" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== + "@aws-cdk/aws-cloudformation" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-sns" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/cx-api@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz#922c11389d723eadef2bc12666ced4980fe9e4cc" + integrity sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + semver "^7.3.2" + +"@aws-cdk/region-info@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.74.0.tgz#e53eabe2d8980c360e63ea956615253551005182" + integrity sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA== -"@aws-cdk/region-info@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" - integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== "@serverless-stack/resources@../../../resources": - version "0.1.10" + version "0.4.3" dependencies: - "@aws-cdk/core" "1.61.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-lambda-nodejs" "1.74.0" + "@aws-cdk/core" "1.74.0" at-least-node@^1.0.0: version "1.0.0" @@ -329,10 +351,10 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== +constructs@^3.2.0: + version "3.2.40" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.40.tgz#e8c0e1020ad254ff73d9ea6c85cc90c3a33c71f1" + integrity sha512-XtKn+Pzq8EZNe1zasQem6X09dprZ8pXvNxECKQLZC+jU5BdkgDKe0nak4Wp+k7uvDFlyh9NccaGtxqP6w2YS0A== fs-extra@^9.0.1: version "9.0.1" @@ -349,6 +371,11 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +ignore@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + jsonfile@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" @@ -358,10 +385,10 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== +jsonschema@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== minimatch@^3.0.4: version "3.0.4" @@ -370,7 +397,12 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -semver@^7.2.2: +punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== diff --git a/packages/cli/test/config/yarn.lock b/packages/cli/test/config/yarn.lock index bd5fb40701..a6b35a0548 100644 --- a/packages/cli/test/config/yarn.lock +++ b/packages/cli/test/config/yarn.lock @@ -2,275 +2,296 @@ # yarn lockfile v1 -"@aws-cdk/assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.61.0.tgz#9702ba8ef5b3c45ec47e0530006d63dc0685a5ff" - integrity sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA== +"@aws-cdk/assets@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.74.0.tgz#8aea948a32afcf7c60449346a087c4b5aecff251" + integrity sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ== dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-applicationautoscaling@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz#8129984ba0185bbb525fd8ef6328c5c84e51e4e5" - integrity sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw== + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-applicationautoscaling@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz#ad5e946e68bd4094c3236e983d36f67d66135dfc" + integrity sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw== dependencies: - "@aws-cdk/aws-autoscaling-common" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-autoscaling-common@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz#9e7f6a8669b36001b846d90fa8cb65d8b4edb27b" - integrity sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ== + "@aws-cdk/aws-autoscaling-common" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-autoscaling-common@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz#f6bcbb987830f299b6e2ef454944afdde9a8a82e" + integrity sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudformation@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.61.0.tgz#6810e5327aa53b6d73cb337af340db152284aad7" - integrity sha512-e7mti0sWR6Sf4tav36bu379kkG5E33VMPLZaT8RkhXkIl97c1OaGHVx5G1Oe5DiHka08c+PA6da8ahkrR1wSkQ== + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudformation@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.74.0.tgz#04fffb02403fb52ee05ec43172b845a29a903a9e" + integrity sha512-VOyuMhoxA9vk3zSUfzqSg1YjYYgc+qyB0bpaOJIW/iinXYXhA64z5YQnTxdwd/exlFgA59chOanA7aRrNM2YIg== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudwatch@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz#3c0171ca76d086da424c1b4148a53c4d68dd885a" - integrity sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug== + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-sns" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudwatch@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz#94a29d2998a5c08412084b346d404b3a8b90f8a8" + integrity sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-codeguruprofiler@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz#1ace4c61a4a7b916f4dbe28070b5b914949e6f06" - integrity sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w== + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-codeguruprofiler@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz#d749688e9edb252ce6fc68efa4f9977f7ba02cb6" + integrity sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - -"@aws-cdk/aws-dynamodb@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.61.0.tgz#3d9b1ffd6eb965152a2456de1b08625d3f3ee907" - integrity sha512-Qd87xJNTjCRBQ//H4WA6Lif3VuA9QuyKyterlmTGnmrUsAqubkKtxu/lLvMp0gQb9LzjQ5Hn9238v1s8rDBDlw== + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-dynamodb@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.74.0.tgz#7e0ef530e9c3d7301a9db616ddf6d650f7acb76f" + integrity sha512-YU38dFYLMyMe5u2GLy8sFCFTVxwDgWZ67HzFg41kSj8WpAsVQEE5Zxh1nf0+8Ai1J4MNeLeMCaXtuliHipoQSw== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/custom-resources" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ec2@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz#eae31df9045ca9374daf6b1562674e31d8053aff" + integrity sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g== dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/custom-resources" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ec2@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz#d39b1f5356c57089b963bbe4644adc02fd12a4bf" - integrity sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ== + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/aws-ssm" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-efs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz#367b89f14ccd090f98227dbc975076571b31faac" + integrity sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA== dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-ssm" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-efs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz#c4d66d0d928c01c8018c1c8bc75a1c5097d649ce" - integrity sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg== + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-events@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz#2ed5a4cdd737ce4c8950506df496d0b43ac6aa12" + integrity sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw== dependencies: - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-events@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" - integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-iam@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz#c255c9676fb6048ab27c00d111ed5e7d8b46877c" + integrity sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-iam@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" - integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== + "@aws-cdk/core" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-kms@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz#73531f7b5d2542eb5e3f7bb54604944921e34995" + integrity sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg== dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-kms@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" - integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda-nodejs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.74.0.tgz#aa818270e4dcd74be51d402cdb114da311b3c966" + integrity sha512-1mc8I+Yz43El8O8SjsfkABsI31tcpO5e3fAz7/40DKuFgM9jkL6vyiL55MLIckAqmE2N9mRYU0xF4RC7uRZdmQ== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-lambda@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz#65b2fb456f6c2d0566401bd3d265f5bae47d6346" - integrity sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg== + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz#52175fbc9e679ca5c0f4d15e0666c99fc4a953d0" + integrity sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew== dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-codeguruprofiler" "1.61.0" - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-efs" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-logs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz#430bb5fc87ec606416ffb0869f04754185092a21" - integrity sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw== + "@aws-cdk/aws-applicationautoscaling" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-codeguruprofiler" "1.74.0" + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-efs" "1.74.0" + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/aws-sqs" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-logs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz#cd40afe70ffeb5250ecea1db0ee0a2f68fb2084a" + integrity sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA== dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3-assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz#8512ac0e16818bc78eff010d15d6cc99a7d8fccf" - integrity sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA== + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3-assets@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz#7f1988f3931e95d88a8c1357f98c47f7f9b73dee" + integrity sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg== dependencies: - "@aws-cdk/assets" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" - integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== + "@aws-cdk/assets" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz#5b53839c3af0f67bfb1e96061f6a1ea5be445fe9" + integrity sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q== dependencies: - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sns@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.61.0.tgz#c82f9b224b7ebf3e48cd9433456156e5d3f1df89" - integrity sha512-jmJmZXidJAJTg4lPnxMm26QR3ovMYb/89NBWnIRwGdVGcZ7nrWUkC0JNPQMbP+EvUFdh/9xdFVP4JvvzZzoy0w== + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sns@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.74.0.tgz#c9289b34cb2512010a0b6813f684c93398502bdd" + integrity sha512-O0HDGvl1WjCTU53auNJKCW5/6vpbVYlj0RwLgGaOOlTeKnfuq53kGvL/t3QdZQlJWxSvkbN61O+rZB7GacXV0g== dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sqs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz#b2d1d7a5d27d36d1580a3cb500daf417037da492" - integrity sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA== + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-sqs" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sqs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz#998da5838d4310805432f0cf55fcc7c8f34657e2" + integrity sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg== dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ssm@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz#229308cfce757f8b3f75d12bf276ce4f8042076f" - integrity sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg== + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ssm@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz#426dd65c0b933618d5c196cb38386c1035b0fdc4" + integrity sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/cloud-assembly-schema@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz#f1bbd8411ec320dd9e14ef2dce626a05019c42bc" + integrity sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw== dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" + jsonschema "^1.4.0" + semver "^7.3.2" -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== +"@aws-cdk/core@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.74.0.tgz#132d31c0ab9d39394827431ccd804cf10de34273" + integrity sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + "@balena/dockerignore" "^1.0.2" + constructs "^3.2.0" fs-extra "^9.0.1" + ignore "^5.1.8" minimatch "^3.0.4" -"@aws-cdk/custom-resources@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.61.0.tgz#03749f4122e46504fd1b3b3b9a11aa3578f269bf" - integrity sha512-etnHE7A0+J5w1L/m+KxEbPQ7LgtVYvEUV6naqRp5uIsTBaJ9sCQ+q43Y3Fj+g3NMigm8C2fKg5FmiFE6kiymDQ== +"@aws-cdk/custom-resources@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.74.0.tgz#19329e8a9b9bc0ca66e00c791b008c416a67265f" + integrity sha512-KDXgyRCeCMIj42nQcd2RXc4GYQpd7SWtx2iw0G4Wvs/wG4i3nR1qdlvEJvAlNgsYeqM4pp3mIp3PgdX341HsCg== dependencies: - "@aws-cdk/aws-cloudformation" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== + "@aws-cdk/aws-cloudformation" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-sns" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/cx-api@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz#922c11389d723eadef2bc12666ced4980fe9e4cc" + integrity sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + semver "^7.3.2" + +"@aws-cdk/region-info@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.74.0.tgz#e53eabe2d8980c360e63ea956615253551005182" + integrity sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA== -"@aws-cdk/region-info@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" - integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== "@serverless-stack/resources@../../../resources": - version "0.1.3" + version "0.4.3" dependencies: - "@aws-cdk/core" "1.61.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-lambda-nodejs" "1.74.0" + "@aws-cdk/core" "1.74.0" at-least-node@^1.0.0: version "1.0.0" @@ -295,10 +316,10 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== +constructs@^3.2.0: + version "3.2.40" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.40.tgz#e8c0e1020ad254ff73d9ea6c85cc90c3a33c71f1" + integrity sha512-XtKn+Pzq8EZNe1zasQem6X09dprZ8pXvNxECKQLZC+jU5BdkgDKe0nak4Wp+k7uvDFlyh9NccaGtxqP6w2YS0A== fs-extra@^9.0.1: version "9.0.1" @@ -315,6 +336,11 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +ignore@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + jsonfile@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" @@ -324,10 +350,10 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== +jsonschema@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== minimatch@^3.0.4: version "3.0.4" @@ -336,7 +362,7 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -semver@^7.2.2: +semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== diff --git a/packages/cli/test/context/yarn.lock b/packages/cli/test/context/yarn.lock index bd5fb40701..a6b35a0548 100644 --- a/packages/cli/test/context/yarn.lock +++ b/packages/cli/test/context/yarn.lock @@ -2,275 +2,296 @@ # yarn lockfile v1 -"@aws-cdk/assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.61.0.tgz#9702ba8ef5b3c45ec47e0530006d63dc0685a5ff" - integrity sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA== +"@aws-cdk/assets@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.74.0.tgz#8aea948a32afcf7c60449346a087c4b5aecff251" + integrity sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ== dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-applicationautoscaling@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz#8129984ba0185bbb525fd8ef6328c5c84e51e4e5" - integrity sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw== + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-applicationautoscaling@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz#ad5e946e68bd4094c3236e983d36f67d66135dfc" + integrity sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw== dependencies: - "@aws-cdk/aws-autoscaling-common" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-autoscaling-common@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz#9e7f6a8669b36001b846d90fa8cb65d8b4edb27b" - integrity sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ== + "@aws-cdk/aws-autoscaling-common" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-autoscaling-common@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz#f6bcbb987830f299b6e2ef454944afdde9a8a82e" + integrity sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudformation@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.61.0.tgz#6810e5327aa53b6d73cb337af340db152284aad7" - integrity sha512-e7mti0sWR6Sf4tav36bu379kkG5E33VMPLZaT8RkhXkIl97c1OaGHVx5G1Oe5DiHka08c+PA6da8ahkrR1wSkQ== + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudformation@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.74.0.tgz#04fffb02403fb52ee05ec43172b845a29a903a9e" + integrity sha512-VOyuMhoxA9vk3zSUfzqSg1YjYYgc+qyB0bpaOJIW/iinXYXhA64z5YQnTxdwd/exlFgA59chOanA7aRrNM2YIg== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudwatch@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz#3c0171ca76d086da424c1b4148a53c4d68dd885a" - integrity sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug== + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-sns" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudwatch@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz#94a29d2998a5c08412084b346d404b3a8b90f8a8" + integrity sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-codeguruprofiler@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz#1ace4c61a4a7b916f4dbe28070b5b914949e6f06" - integrity sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w== + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-codeguruprofiler@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz#d749688e9edb252ce6fc68efa4f9977f7ba02cb6" + integrity sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - -"@aws-cdk/aws-dynamodb@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.61.0.tgz#3d9b1ffd6eb965152a2456de1b08625d3f3ee907" - integrity sha512-Qd87xJNTjCRBQ//H4WA6Lif3VuA9QuyKyterlmTGnmrUsAqubkKtxu/lLvMp0gQb9LzjQ5Hn9238v1s8rDBDlw== + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-dynamodb@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.74.0.tgz#7e0ef530e9c3d7301a9db616ddf6d650f7acb76f" + integrity sha512-YU38dFYLMyMe5u2GLy8sFCFTVxwDgWZ67HzFg41kSj8WpAsVQEE5Zxh1nf0+8Ai1J4MNeLeMCaXtuliHipoQSw== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/custom-resources" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ec2@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz#eae31df9045ca9374daf6b1562674e31d8053aff" + integrity sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g== dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/custom-resources" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ec2@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz#d39b1f5356c57089b963bbe4644adc02fd12a4bf" - integrity sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ== + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/aws-ssm" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-efs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz#367b89f14ccd090f98227dbc975076571b31faac" + integrity sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA== dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-ssm" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-efs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz#c4d66d0d928c01c8018c1c8bc75a1c5097d649ce" - integrity sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg== + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-events@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz#2ed5a4cdd737ce4c8950506df496d0b43ac6aa12" + integrity sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw== dependencies: - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-events@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" - integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-iam@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz#c255c9676fb6048ab27c00d111ed5e7d8b46877c" + integrity sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-iam@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" - integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== + "@aws-cdk/core" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-kms@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz#73531f7b5d2542eb5e3f7bb54604944921e34995" + integrity sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg== dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-kms@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" - integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda-nodejs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.74.0.tgz#aa818270e4dcd74be51d402cdb114da311b3c966" + integrity sha512-1mc8I+Yz43El8O8SjsfkABsI31tcpO5e3fAz7/40DKuFgM9jkL6vyiL55MLIckAqmE2N9mRYU0xF4RC7uRZdmQ== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-lambda@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz#65b2fb456f6c2d0566401bd3d265f5bae47d6346" - integrity sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg== + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz#52175fbc9e679ca5c0f4d15e0666c99fc4a953d0" + integrity sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew== dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-codeguruprofiler" "1.61.0" - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-efs" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-logs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz#430bb5fc87ec606416ffb0869f04754185092a21" - integrity sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw== + "@aws-cdk/aws-applicationautoscaling" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-codeguruprofiler" "1.74.0" + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-efs" "1.74.0" + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/aws-sqs" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-logs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz#cd40afe70ffeb5250ecea1db0ee0a2f68fb2084a" + integrity sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA== dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3-assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz#8512ac0e16818bc78eff010d15d6cc99a7d8fccf" - integrity sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA== + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3-assets@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz#7f1988f3931e95d88a8c1357f98c47f7f9b73dee" + integrity sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg== dependencies: - "@aws-cdk/assets" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" - integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== + "@aws-cdk/assets" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz#5b53839c3af0f67bfb1e96061f6a1ea5be445fe9" + integrity sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q== dependencies: - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sns@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.61.0.tgz#c82f9b224b7ebf3e48cd9433456156e5d3f1df89" - integrity sha512-jmJmZXidJAJTg4lPnxMm26QR3ovMYb/89NBWnIRwGdVGcZ7nrWUkC0JNPQMbP+EvUFdh/9xdFVP4JvvzZzoy0w== + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sns@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.74.0.tgz#c9289b34cb2512010a0b6813f684c93398502bdd" + integrity sha512-O0HDGvl1WjCTU53auNJKCW5/6vpbVYlj0RwLgGaOOlTeKnfuq53kGvL/t3QdZQlJWxSvkbN61O+rZB7GacXV0g== dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sqs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz#b2d1d7a5d27d36d1580a3cb500daf417037da492" - integrity sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA== + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-sqs" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sqs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz#998da5838d4310805432f0cf55fcc7c8f34657e2" + integrity sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg== dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ssm@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz#229308cfce757f8b3f75d12bf276ce4f8042076f" - integrity sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg== + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ssm@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz#426dd65c0b933618d5c196cb38386c1035b0fdc4" + integrity sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/cloud-assembly-schema@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz#f1bbd8411ec320dd9e14ef2dce626a05019c42bc" + integrity sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw== dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" + jsonschema "^1.4.0" + semver "^7.3.2" -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== +"@aws-cdk/core@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.74.0.tgz#132d31c0ab9d39394827431ccd804cf10de34273" + integrity sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + "@balena/dockerignore" "^1.0.2" + constructs "^3.2.0" fs-extra "^9.0.1" + ignore "^5.1.8" minimatch "^3.0.4" -"@aws-cdk/custom-resources@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.61.0.tgz#03749f4122e46504fd1b3b3b9a11aa3578f269bf" - integrity sha512-etnHE7A0+J5w1L/m+KxEbPQ7LgtVYvEUV6naqRp5uIsTBaJ9sCQ+q43Y3Fj+g3NMigm8C2fKg5FmiFE6kiymDQ== +"@aws-cdk/custom-resources@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.74.0.tgz#19329e8a9b9bc0ca66e00c791b008c416a67265f" + integrity sha512-KDXgyRCeCMIj42nQcd2RXc4GYQpd7SWtx2iw0G4Wvs/wG4i3nR1qdlvEJvAlNgsYeqM4pp3mIp3PgdX341HsCg== dependencies: - "@aws-cdk/aws-cloudformation" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== + "@aws-cdk/aws-cloudformation" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-sns" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/cx-api@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz#922c11389d723eadef2bc12666ced4980fe9e4cc" + integrity sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + semver "^7.3.2" + +"@aws-cdk/region-info@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.74.0.tgz#e53eabe2d8980c360e63ea956615253551005182" + integrity sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA== -"@aws-cdk/region-info@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" - integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== "@serverless-stack/resources@../../../resources": - version "0.1.3" + version "0.4.3" dependencies: - "@aws-cdk/core" "1.61.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-lambda-nodejs" "1.74.0" + "@aws-cdk/core" "1.74.0" at-least-node@^1.0.0: version "1.0.0" @@ -295,10 +316,10 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== +constructs@^3.2.0: + version "3.2.40" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.40.tgz#e8c0e1020ad254ff73d9ea6c85cc90c3a33c71f1" + integrity sha512-XtKn+Pzq8EZNe1zasQem6X09dprZ8pXvNxECKQLZC+jU5BdkgDKe0nak4Wp+k7uvDFlyh9NccaGtxqP6w2YS0A== fs-extra@^9.0.1: version "9.0.1" @@ -315,6 +336,11 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +ignore@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + jsonfile@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" @@ -324,10 +350,10 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== +jsonschema@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== minimatch@^3.0.4: version "3.0.4" @@ -336,7 +362,7 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -semver@^7.2.2: +semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== diff --git a/packages/cli/test/jest/yarn.lock b/packages/cli/test/jest/yarn.lock index df51708c58..8208baf489 100644 --- a/packages/cli/test/jest/yarn.lock +++ b/packages/cli/test/jest/yarn.lock @@ -2,337 +2,353 @@ # yarn lockfile v1 -"@aws-cdk/assert@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.61.0.tgz#c1dbbf71fd64beb067a6e6237e03686319acaaa7" - integrity sha512-avvDVpyd8zLMT0HEW1K2ngP5U8CHu+BtPinUkLpLXVJ+Cr5K12plnk84+BOWe1NhM9/bqC4b1KA0c6MzIzgREA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cloudformation-diff" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.61.0.tgz#9702ba8ef5b3c45ec47e0530006d63dc0685a5ff" - integrity sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA== - dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-applicationautoscaling@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz#8129984ba0185bbb525fd8ef6328c5c84e51e4e5" - integrity sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-autoscaling-common@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz#9e7f6a8669b36001b846d90fa8cb65d8b4edb27b" - integrity sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudformation@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.61.0.tgz#6810e5327aa53b6d73cb337af340db152284aad7" - integrity sha512-e7mti0sWR6Sf4tav36bu379kkG5E33VMPLZaT8RkhXkIl97c1OaGHVx5G1Oe5DiHka08c+PA6da8ahkrR1wSkQ== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudwatch@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz#3c0171ca76d086da424c1b4148a53c4d68dd885a" - integrity sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-codeguruprofiler@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz#1ace4c61a4a7b916f4dbe28070b5b914949e6f06" - integrity sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - -"@aws-cdk/aws-dynamodb@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.61.0.tgz#3d9b1ffd6eb965152a2456de1b08625d3f3ee907" - integrity sha512-Qd87xJNTjCRBQ//H4WA6Lif3VuA9QuyKyterlmTGnmrUsAqubkKtxu/lLvMp0gQb9LzjQ5Hn9238v1s8rDBDlw== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/custom-resources" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ec2@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz#d39b1f5356c57089b963bbe4644adc02fd12a4bf" - integrity sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-ssm" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-efs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz#c4d66d0d928c01c8018c1c8bc75a1c5097d649ce" - integrity sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg== - dependencies: - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-events@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" - integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-iam@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" - integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== - dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-kms@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" - integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-lambda@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz#65b2fb456f6c2d0566401bd3d265f5bae47d6346" - integrity sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-codeguruprofiler" "1.61.0" - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-efs" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-logs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz#430bb5fc87ec606416ffb0869f04754185092a21" - integrity sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3-assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz#8512ac0e16818bc78eff010d15d6cc99a7d8fccf" - integrity sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA== - dependencies: - "@aws-cdk/assets" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" - integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== - dependencies: - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sns@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.61.0.tgz#c82f9b224b7ebf3e48cd9433456156e5d3f1df89" - integrity sha512-jmJmZXidJAJTg4lPnxMm26QR3ovMYb/89NBWnIRwGdVGcZ7nrWUkC0JNPQMbP+EvUFdh/9xdFVP4JvvzZzoy0w== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sqs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz#b2d1d7a5d27d36d1580a3cb500daf417037da492" - integrity sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ssm@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz#229308cfce757f8b3f75d12bf276ce4f8042076f" - integrity sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/cfnspec@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.61.0.tgz#69e998ab83c0a478b76e1c5deb8484171dfd95f9" - integrity sha512-Ss5N3unY6iVh9SjYAYvTyvhdb7Kaz6dVFeV8K68UGewiFcHpC5tQi3YmlVBw3HCgKoRt20emiHAfmdfeGO/PUQ== +"@aws-cdk/assert@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.74.0.tgz#82795a3bb21ede93288a60322804f6f4e2d4959e" + integrity sha512-5M3M4lcSS2dGPgVANhv5GjqC6nNBy9bL1XECAJj3lg7q+6zJ00+0wq4bB0wyvm/mE+S0axkGZ4LVHF5QA2gCfQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/cloudformation-diff" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/assets@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.74.0.tgz#8aea948a32afcf7c60449346a087c4b5aecff251" + integrity sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ== + dependencies: + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-applicationautoscaling@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz#ad5e946e68bd4094c3236e983d36f67d66135dfc" + integrity sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-autoscaling-common@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz#f6bcbb987830f299b6e2ef454944afdde9a8a82e" + integrity sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudformation@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.74.0.tgz#04fffb02403fb52ee05ec43172b845a29a903a9e" + integrity sha512-VOyuMhoxA9vk3zSUfzqSg1YjYYgc+qyB0bpaOJIW/iinXYXhA64z5YQnTxdwd/exlFgA59chOanA7aRrNM2YIg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-sns" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudwatch@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz#94a29d2998a5c08412084b346d404b3a8b90f8a8" + integrity sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-codeguruprofiler@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz#d749688e9edb252ce6fc68efa4f9977f7ba02cb6" + integrity sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-dynamodb@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.74.0.tgz#7e0ef530e9c3d7301a9db616ddf6d650f7acb76f" + integrity sha512-YU38dFYLMyMe5u2GLy8sFCFTVxwDgWZ67HzFg41kSj8WpAsVQEE5Zxh1nf0+8Ai1J4MNeLeMCaXtuliHipoQSw== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/custom-resources" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ec2@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz#eae31df9045ca9374daf6b1562674e31d8053aff" + integrity sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/aws-ssm" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-efs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz#367b89f14ccd090f98227dbc975076571b31faac" + integrity sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA== + dependencies: + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-events@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz#2ed5a4cdd737ce4c8950506df496d0b43ac6aa12" + integrity sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-iam@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz#c255c9676fb6048ab27c00d111ed5e7d8b46877c" + integrity sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA== + dependencies: + "@aws-cdk/core" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-kms@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz#73531f7b5d2542eb5e3f7bb54604944921e34995" + integrity sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda-nodejs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.74.0.tgz#aa818270e4dcd74be51d402cdb114da311b3c966" + integrity sha512-1mc8I+Yz43El8O8SjsfkABsI31tcpO5e3fAz7/40DKuFgM9jkL6vyiL55MLIckAqmE2N9mRYU0xF4RC7uRZdmQ== + dependencies: + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz#52175fbc9e679ca5c0f4d15e0666c99fc4a953d0" + integrity sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-codeguruprofiler" "1.74.0" + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-efs" "1.74.0" + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/aws-sqs" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-logs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz#cd40afe70ffeb5250ecea1db0ee0a2f68fb2084a" + integrity sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3-assets@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz#7f1988f3931e95d88a8c1357f98c47f7f9b73dee" + integrity sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg== + dependencies: + "@aws-cdk/assets" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz#5b53839c3af0f67bfb1e96061f6a1ea5be445fe9" + integrity sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q== + dependencies: + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sns@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.74.0.tgz#c9289b34cb2512010a0b6813f684c93398502bdd" + integrity sha512-O0HDGvl1WjCTU53auNJKCW5/6vpbVYlj0RwLgGaOOlTeKnfuq53kGvL/t3QdZQlJWxSvkbN61O+rZB7GacXV0g== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-sqs" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sqs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz#998da5838d4310805432f0cf55fcc7c8f34657e2" + integrity sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ssm@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz#426dd65c0b933618d5c196cb38386c1035b0fdc4" + integrity sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/cfnspec@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.74.0.tgz#03577e266721fe87287f9fc710a95d7b7e5886cd" + integrity sha512-9rdFgRUoV3lbAD6lnU+hGdkit8ILmUq+XCXzRdc9xWHUXIKxMmFK9frXTT+wGmjgdz/GpPyfSbFjzyqk4QE5+w== dependencies: md5 "^2.3.0" -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== +"@aws-cdk/cloud-assembly-schema@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz#f1bbd8411ec320dd9e14ef2dce626a05019c42bc" + integrity sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw== dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" + jsonschema "^1.4.0" + semver "^7.3.2" -"@aws-cdk/cloudformation-diff@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.61.0.tgz#8acb549fd1dd819aa61dfed47e011b44827045a8" - integrity sha512-TrrmywhYkXxGNTmDd1k2biJMVtEvb0QcbZ/IGM6biMXIJ+wsjw/n5snvwciQ8/PHZmsUYk67qulGdso1rpy06Q== +"@aws-cdk/cloudformation-diff@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.74.0.tgz#d86199db530f9df641cff7f3996939c47645d59f" + integrity sha512-aYAg85fkpX39euUo5HjsGtqOpyD5fAz1+jZ/F/5erA8Y/+rB4ifCVJH0cLYHVdYwo8oc3poB6jW4tVMxNYxbrg== dependencies: - "@aws-cdk/cfnspec" "1.61.0" + "@aws-cdk/cfnspec" "1.74.0" colors "^1.4.0" - diff "^4.0.2" + diff "^5.0.0" fast-deep-equal "^3.1.3" string-width "^4.2.0" - table "^5.4.6" - -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" + table "^6.0.3" + +"@aws-cdk/core@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.74.0.tgz#132d31c0ab9d39394827431ccd804cf10de34273" + integrity sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + "@balena/dockerignore" "^1.0.2" + constructs "^3.2.0" fs-extra "^9.0.1" + ignore "^5.1.8" minimatch "^3.0.4" -"@aws-cdk/custom-resources@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.61.0.tgz#03749f4122e46504fd1b3b3b9a11aa3578f269bf" - integrity sha512-etnHE7A0+J5w1L/m+KxEbPQ7LgtVYvEUV6naqRp5uIsTBaJ9sCQ+q43Y3Fj+g3NMigm8C2fKg5FmiFE6kiymDQ== - dependencies: - "@aws-cdk/aws-cloudformation" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" - -"@aws-cdk/region-info@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" - integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== +"@aws-cdk/custom-resources@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.74.0.tgz#19329e8a9b9bc0ca66e00c791b008c416a67265f" + integrity sha512-KDXgyRCeCMIj42nQcd2RXc4GYQpd7SWtx2iw0G4Wvs/wG4i3nR1qdlvEJvAlNgsYeqM4pp3mIp3PgdX341HsCg== + dependencies: + "@aws-cdk/aws-cloudformation" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-sns" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/cx-api@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz#922c11389d723eadef2bc12666ced4980fe9e4cc" + integrity sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.74.0" + semver "^7.3.2" + +"@aws-cdk/region-info@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.74.0.tgz#e53eabe2d8980c360e63ea956615253551005182" + integrity sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA== + +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== "@serverless-stack/resources@../../../resources": - version "0.1.3" + version "0.4.3" dependencies: - "@aws-cdk/core" "1.61.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-lambda-nodejs" "1.74.0" + "@aws-cdk/core" "1.74.0" -ajv@^6.10.2: - version "6.12.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" - integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== -ansi-styles@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== +ansi-styles@^4.0.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 "^1.9.0" + color-convert "^2.0.1" -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== at-least-node@^1.0.0: version "1.0.0" @@ -357,17 +373,17 @@ charenc@0.0.2: resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== +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.3" + color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +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== colors@^1.4.0: version "1.4.0" @@ -379,25 +395,20 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== +constructs@^3.2.0: + version "3.2.40" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.40.tgz#e8c0e1020ad254ff73d9ea6c85cc90c3a33c71f1" + integrity sha512-XtKn+Pzq8EZNe1zasQem6X09dprZ8pXvNxECKQLZC+jU5BdkgDKe0nak4Wp+k7uvDFlyh9NccaGtxqP6w2YS0A== crypt@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= -diff@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +diff@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== emoji-regex@^8.0.0: version "8.0.0" @@ -429,16 +440,16 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +ignore@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - 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" @@ -458,15 +469,15 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== +jsonschema@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== -lodash@^4.17.14: - version "4.17.19" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" - integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== +lodash@^4.17.20: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== md5@^2.3.0: version "2.3.0" @@ -489,28 +500,19 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -semver@^7.2.2: +semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" string-width@^4.2.0: version "4.2.0" @@ -521,13 +523,6 @@ string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -535,15 +530,15 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" -table@^5.4.6: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== +table@^6.0.3: + version "6.0.4" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.4.tgz#c523dd182177e926c723eb20e1b341238188aa0d" + integrity sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw== dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" + ajv "^6.12.4" + lodash "^4.17.20" + slice-ansi "^4.0.0" + string-width "^4.2.0" universalify@^1.0.0: version "1.0.0" diff --git a/packages/cli/test/stack-no-prefix/yarn.lock b/packages/cli/test/stack-no-prefix/yarn.lock index 4d69cef265..252e46aa79 100644 --- a/packages/cli/test/stack-no-prefix/yarn.lock +++ b/packages/cli/test/stack-no-prefix/yarn.lock @@ -2,37 +2,243 @@ # yarn lockfile v1 -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" +"@aws-cdk/assets@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.74.0.tgz#8aea948a32afcf7c60449346a087c4b5aecff251" + integrity sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ== + dependencies: + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-applicationautoscaling@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz#ad5e946e68bd4094c3236e983d36f67d66135dfc" + integrity sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-autoscaling-common@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz#f6bcbb987830f299b6e2ef454944afdde9a8a82e" + integrity sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudwatch@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz#94a29d2998a5c08412084b346d404b3a8b90f8a8" + integrity sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-codeguruprofiler@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz#d749688e9edb252ce6fc68efa4f9977f7ba02cb6" + integrity sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ec2@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz#eae31df9045ca9374daf6b1562674e31d8053aff" + integrity sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/aws-ssm" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-efs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz#367b89f14ccd090f98227dbc975076571b31faac" + integrity sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA== + dependencies: + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-events@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz#2ed5a4cdd737ce4c8950506df496d0b43ac6aa12" + integrity sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-iam@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz#c255c9676fb6048ab27c00d111ed5e7d8b46877c" + integrity sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA== + dependencies: + "@aws-cdk/core" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-kms@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz#73531f7b5d2542eb5e3f7bb54604944921e34995" + integrity sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda-nodejs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.74.0.tgz#aa818270e4dcd74be51d402cdb114da311b3c966" + integrity sha512-1mc8I+Yz43El8O8SjsfkABsI31tcpO5e3fAz7/40DKuFgM9jkL6vyiL55MLIckAqmE2N9mRYU0xF4RC7uRZdmQ== + dependencies: + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz#52175fbc9e679ca5c0f4d15e0666c99fc4a953d0" + integrity sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-codeguruprofiler" "1.74.0" + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-efs" "1.74.0" + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/aws-sqs" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-logs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz#cd40afe70ffeb5250ecea1db0ee0a2f68fb2084a" + integrity sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3-assets@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz#7f1988f3931e95d88a8c1357f98c47f7f9b73dee" + integrity sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg== + dependencies: + "@aws-cdk/assets" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz#5b53839c3af0f67bfb1e96061f6a1ea5be445fe9" + integrity sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q== + dependencies: + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sqs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz#998da5838d4310805432f0cf55fcc7c8f34657e2" + integrity sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ssm@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz#426dd65c0b933618d5c196cb38386c1035b0fdc4" + integrity sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/cloud-assembly-schema@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz#f1bbd8411ec320dd9e14ef2dce626a05019c42bc" + integrity sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw== + dependencies: + jsonschema "^1.4.0" + semver "^7.3.2" + +"@aws-cdk/core@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.74.0.tgz#132d31c0ab9d39394827431ccd804cf10de34273" + integrity sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + "@balena/dockerignore" "^1.0.2" + constructs "^3.2.0" fs-extra "^9.0.1" + ignore "^5.1.8" minimatch "^3.0.4" -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== +"@aws-cdk/cx-api@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz#922c11389d723eadef2bc12666ced4980fe9e4cc" + integrity sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + semver "^7.3.2" + +"@aws-cdk/region-info@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.74.0.tgz#e53eabe2d8980c360e63ea956615253551005182" + integrity sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA== + +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== "@serverless-stack/resources@../../../resources": - version "0.1.3" + version "0.4.3" dependencies: - "@aws-cdk/core" "1.61.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-lambda-nodejs" "1.74.0" + "@aws-cdk/core" "1.74.0" at-least-node@^1.0.0: version "1.0.0" @@ -57,10 +263,10 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== +constructs@^3.2.0: + version "3.2.40" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.40.tgz#e8c0e1020ad254ff73d9ea6c85cc90c3a33c71f1" + integrity sha512-XtKn+Pzq8EZNe1zasQem6X09dprZ8pXvNxECKQLZC+jU5BdkgDKe0nak4Wp+k7uvDFlyh9NccaGtxqP6w2YS0A== fs-extra@^9.0.1: version "9.0.1" @@ -77,6 +283,11 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +ignore@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + jsonfile@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" @@ -86,10 +297,10 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== +jsonschema@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== minimatch@^3.0.4: version "3.0.4" @@ -98,7 +309,7 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -semver@^7.2.2: +semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== From 8c60485e5566cf3a744bf363b1cc1d7738f23474 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 25 Nov 2020 01:20:11 -0500 Subject: [PATCH 135/481] Implement `sst start` --- packages/cli/scripts/start.js | 7 - packages/cli/test/start/src/hello.js | 14 +- packages/resources/lambda/stub/index.js | 285 ++++++++++++++---------- 3 files changed, 172 insertions(+), 134 deletions(-) diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index a0c6024b87..ab57648ed6 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -108,7 +108,6 @@ function onMessage(message) { context, env, debugRequestId, - debugRequestExpireAt, debugRequestTimeoutInMs, debugSrcPath, debugSrcHandler, @@ -118,12 +117,6 @@ function onMessage(message) { chalk.grey(`${debugRequestId} REQUEST ${JSON.stringify(event, null, 4)}`) ); - // Validate request did not expire - if (debugRequestExpireAt < Date.now()) { - logger.log(chalk.grey(`${debugRequestId} DISCARDED ${debugRequestId}`)); - return; - } - // From Lambda /var/runtime/bootstrap // https://link.medium.com/7ir11kKjwbb const newSpace = Math.floor(context.memoryLimitInMB / 10); diff --git a/packages/cli/test/start/src/hello.js b/packages/cli/test/start/src/hello.js index 9b9f6fa96f..5fb3f8a757 100644 --- a/packages/cli/test/start/src/hello.js +++ b/packages/cli/test/start/src/hello.js @@ -17,11 +17,11 @@ exports.handler = async function (event, context, callback) { }) .promise(); - setTimeout(() => { - callback(null, { - statusCode: 200, - headers: { "Content-Type": "text/plain" }, - body: "New World with event: " + JSON.stringify(event), - }); - }, 2000); + //setTimeout(() => { + callback(null, { + statusCode: 200, + headers: { "Content-Type": "text/plain" }, + body: "New World with event: " + JSON.stringify(event), + }); + //}, 2000); }; diff --git a/packages/resources/lambda/stub/index.js b/packages/resources/lambda/stub/index.js index 1bcda83df7..c3cdaee3b2 100644 --- a/packages/resources/lambda/stub/index.js +++ b/packages/resources/lambda/stub/index.js @@ -1,179 +1,224 @@ +// Note: 4 cases where a websocket connection might be closed +// 1. closed while waiting for response + idle longer than 10min => send keep-alive after 9min +// 2. closed while waiting for response + 2hr connection limit => a new connection will be used +// 3. closed while not waiting + idle longer than 10min => detect close callback and resend +// 4. closed while not waiting + 2hr connection limit => a new connection will be used + const WebSocket = require("ws"); -let ws; -let wsCallbackRef = {}; + +// Set debugRequestId in ref b/c debugRequestId will be used in callback, need to do the +// useRef trick to let the callback access its current value. +let _ref = { + ws: null, + wsConnectedAt: 0, +}; + +// a new connection will be created if current connection has established for the given lifespan +const CONNECTION_LIFESPAN = 1800000; // 30 minutes exports.main = function (event, context, callback) { context.callbackWaitsForEmptyEventLoop = false; - const { - functionName, - memoryLimitInMB, - awsRequestId, - callbackWaitsForEmptyEventLoop, - } = context; - const debugRequestExpireAt = - Date.now() + context.getRemainingTimeInMillis() + 1000; - const debugRequestId = `${awsRequestId}-${debugRequestExpireAt}`; - - // Set debugRequestId in ref b/c debugRequestId will be used in callback, need to do the - // useRef trick to let the callback access its current value. - wsCallbackRef.debugRequestId = debugRequestId; - wsCallbackRef.callback = callback; - - // Connection closed cases - // - closed while waiting for response + idle longer than 10min => send keep-alive after 9min - // - closed while waiting for response + 2hr connection limit => ? - // - closed while not waiting + idle longer than 10min => ? - // - closed while not waiting + 2hr connection limit => ? - - // Set timer to send keep-alive message if still waiting for response after 9 minutes - let wsKeepAliveTimer; - - if (!ws) { - connect(() => { - sendMessage(); - }); - } else { + _ref.event = event; + _ref.context = context; + _ref.callback = callback; + _ref.keepAliveTimer = null; + _ref.debugRequestId = `${context.awsRequestId}-${Date.now()}`; + + // Case: Lambda first run, no websocket connection + if (!_ref.ws) { + connectAndSendMessage(); + } + // Case: Lambda subsequent run, websocket connection EXCEEDED life span + else if (Date.now() - _ref.wsConnectedAt >= CONNECTION_LIFESPAN) { + disconnect(); + connectAndSendMessage(); + } + // Case: Lambda subsequent run, websocket connection NOT exceeded life span + else { sendMessage(); } - function connect(connectCallback = undefined) { - ws = new WebSocket(process.env.SST_DEBUG_ENDPOINT); + function connectAndSendMessage() { + console.log("connectAndSendMessage()"); + _ref.ws = new WebSocket(process.env.SST_DEBUG_ENDPOINT); + _ref.wsConnectedAt = Date.now(); - ws.on("open", () => { - console.log("opened"); - if (connectCallback) { - connectCallback(); + _ref.ws.onopen = () => { + console.log("ws.onopen"); + sendMessage(); + }; + + _ref.ws.onclose = (e) => { + // Note: review the 4 cases a connection could be closed: + // 1. WILL NOT HAPPEN: b/c the connect is kept alive by keep-alive message + // 2. WILL NOT HAPPEN: b/c a new connect is created, and existing connection is disconnected + // 3. CAN HAPPEN: reconnect and resend message + // 4. WILL NOT HAPPEN: b/c a new connect is created, and existing connection is disconnected + console.log("ws.onclose", e.code, e.reason); + + // stop timer + if (_ref.keepAliveTimer) { + console.log("ws.onclose - stop keep alive timer", _ref.keepAliveTimer); + clearTimeout(_ref.keepAliveTimer); } - }); - ws.on("close", () => { - console.log("closed"); - }); + // reconnect + connectAndSendMessage(); + }; - ws.on("message", (data) => { - receiveMessage(data); - }); + _ref.ws.onmessage = (e) => { + console.log("ws.onmessage", e.data); + receiveMessage(e.data); + }; - ws.on("error", () => { - console.log("error"); - }); + _ref.ws.onerror = (e) => { + console.log("ws.onerror", e); + }; + } + + function disconnect() { + console.log("disconnect()"); + _ref.ws.onopen = () => { + console.log("ws.onopen (old connection)"); + }; + + _ref.ws.onclose = (e) => { + console.log("ws.onclose (old connection)", e.code, e.reason); + }; + + _ref.ws.onmessage = (e) => { + console.log("ws.onmessage (old connection)", e); + }; + + _ref.ws.onerror = (e) => { + console.log("ws.onerror (old connection)", e); + }; + _ref.ws.close(); } function sendMessage() { - ws.send( + // Send message + console.log("sendMessage() - send request"); + + const { debugRequestId, context, event } = _ref; + + _ref.ws.send( JSON.stringify({ action: "newRequest", debugRequestId, - debugRequestExpireAt, debugRequestTimeoutInMs: context.getRemainingTimeInMillis(), debugSrcPath: process.env.SST_DEBUG_SRC_PATH, debugSrcHandler: process.env.SST_DEBUG_SRC_HANDLER, event, context: { - functionName, - memoryLimitInMB, - awsRequestId, - callbackWaitsForEmptyEventLoop, + functionName: context.functionName, + memoryLimitInMB: context.memoryLimitInMB, + awsRequestId: context.awsRequestId, + callbackWaitsForEmptyEventLoop: + context.callbackWaitsForEmptyEventLoop, }, env: constructEnvs(), }) ); - console.log("request sent"); - // Start timer - wsKeepAliveTimer = setTimeout(function () { - ws.send(JSON.stringify({ action: "keepalive" })); + // Start timer to send keep-alive message if still waiting for response after 9 minutes + console.log("sendMessage() - start keep alive timer"); + _ref.keepAliveTimer = setTimeout(function () { + _ref.ws.send(JSON.stringify({ action: "keepalive" })); console.log("sent keepalive message"); }, 540000); } function receiveMessage(data) { - console.log("response received", { data }); + console.log("receiveMessage()"); const { action, debugRequestId, responseData, responseError } = JSON.parse( data ); + + // handle failed to send requests if (action === "failedToSendRequestDueToClientNotConnected") { throw new Error("Debug client not connected."); } - if (action === "failedToSendRequestDueToUnknown") { throw new Error("Failed to send request to debug client."); } - if ( - action !== "newResponse" || - debugRequestId !== wsCallbackRef.debugRequestId - ) { - console.log("discard response"); + // handle invalid and expired response + if (action !== "newResponse" || debugRequestId !== _ref.debugRequestId) { + console.log("receiveMessage() - discard response"); return; } - // Stop timer - if (wsKeepAliveTimer) { - clearTimeout(wsKeepAliveTimer); + // stop timer + if (_ref.keepAliveTimer) { + console.log( + "receiveMessage() - stop keep alive timer", + _ref.keepAliveTimer + ); + clearTimeout(_ref.keepAliveTimer); } - // Handle response error + // handle response error if (responseError) { throw deserializeError(responseError); } - // Handle response data - wsCallbackRef.callback(null, responseData); - } - - function constructEnvs() { - const envs = {}; - Object.keys(process.env) - .filter( - (key) => - ![ - // Include - // - //'AWS_REGION', - //'AWS_DEFAULT_REGION', - //'AWS_LAMBDA_FUNCTION_NAME', - //'AWS_LAMBDA_FUNCTION_VERSION', - //'AWS_ACCESS_KEY_ID', - //'AWS_SECRET_ACCESS_KEY', - //'AWS_SESSION_TOKEN', - // - // Exclude - // - "SST_DEBUG_ENDPOINT", - "SST_DEBUG_SRC_HANDLER", - "SST_DEBUG_SRC_PATH", - "AWS_LAMBDA_FUNCTION_MEMORY_SIZE", - "AWS_LAMBDA_LOG_GROUP_NAME", - "AWS_LAMBDA_LOG_STREAM_NAME", - "LD_LIBRARY_PATH", - "LAMBDA_TASK_ROOT", - "AWS_LAMBDA_RUNTIME_API", - "AWS_EXECUTION_ENV", - "AWS_XRAY_DAEMON_ADDRESS", - "AWS_LAMBDA_INITIALIZATION_TYPE", - "PATH", - "PWD", - "LAMBDA_RUNTIME_DIR", - "LANG", - "NODE_PATH", - "TZ", - "SHLVL", - "_AWS_XRAY_DAEMON_ADDRESS", - "_AWS_XRAY_DAEMON_PORT", - "AWS_XRAY_CONTEXT_MISSING", - "_HANDLER", - "_X_AMZN_TRACE_ID", - ].includes(key) - ) - .forEach((key) => { - envs[key] = process.env[key]; - }); - return envs; + // handle response data + _ref.callback(null, responseData); } }; +function constructEnvs() { + const envs = {}; + Object.keys(process.env) + .filter( + (key) => + ![ + // Include + // + //'AWS_REGION', + //'AWS_DEFAULT_REGION', + //'AWS_LAMBDA_FUNCTION_NAME', + //'AWS_LAMBDA_FUNCTION_VERSION', + //'AWS_ACCESS_KEY_ID', + //'AWS_SECRET_ACCESS_KEY', + //'AWS_SESSION_TOKEN', + // + // Exclude + // + "SST_DEBUG_ENDPOINT", + "SST_DEBUG_SRC_HANDLER", + "SST_DEBUG_SRC_PATH", + "AWS_LAMBDA_FUNCTION_MEMORY_SIZE", + "AWS_LAMBDA_LOG_GROUP_NAME", + "AWS_LAMBDA_LOG_STREAM_NAME", + "LD_LIBRARY_PATH", + "LAMBDA_TASK_ROOT", + "AWS_LAMBDA_RUNTIME_API", + "AWS_EXECUTION_ENV", + "AWS_XRAY_DAEMON_ADDRESS", + "AWS_LAMBDA_INITIALIZATION_TYPE", + "PATH", + "PWD", + "LAMBDA_RUNTIME_DIR", + "LANG", + "NODE_PATH", + "TZ", + "SHLVL", + "_AWS_XRAY_DAEMON_ADDRESS", + "_AWS_XRAY_DAEMON_PORT", + "AWS_XRAY_CONTEXT_MISSING", + "_HANDLER", + "_X_AMZN_TRACE_ID", + ].includes(key) + ) + .forEach((key) => { + envs[key] = process.env[key]; + }); + return envs; +} + // Serialize error // https://github.com/sindresorhus/serialize-error/blob/master/index.js const commonProperties = [ From f6f20c494c391423546d7a37b4d79680a107fae3 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 25 Nov 2020 02:43:22 -0500 Subject: [PATCH 136/481] Implement `sst start` --- .../cli/assets/lambda-invoke/bootstrap.js | 6 ++++ packages/cli/scripts/remove.js | 29 +++++++++++++++++++ packages/cli/scripts/util/cdkHelpers.js | 13 +++++++++ packages/cli/test/start/lib/index.js | 4 +-- packages/cli/test/start/package.json | 2 ++ packages/core/index.js | 7 ++++- packages/core/package.json | 2 +- yarn.lock | 8 ++--- 8 files changed, 63 insertions(+), 8 deletions(-) diff --git a/packages/cli/assets/lambda-invoke/bootstrap.js b/packages/cli/assets/lambda-invoke/bootstrap.js index 37f6bed482..07dfdadf8a 100644 --- a/packages/cli/assets/lambda-invoke/bootstrap.js +++ b/packages/cli/assets/lambda-invoke/bootstrap.js @@ -90,9 +90,15 @@ function getHandler() { } catch (e) { return reject(e); } + // returned a Promise if (result != null && typeof result.then === "function") { result.then(resolve, reject); } + // returned a non-Promise + // ie. the handler function is not async, and the user returned instead of calling the callback + else { + return resolve(null); + } }); } diff --git a/packages/cli/scripts/remove.js b/packages/cli/scripts/remove.js index c478d2efb1..dcedfcb056 100644 --- a/packages/cli/scripts/remove.js +++ b/packages/cli/scripts/remove.js @@ -1,11 +1,40 @@ "use strict"; +const path = require("path"); const chalk = require("chalk"); const { parallelDestroy } = require("@serverless-stack/core"); +const paths = require("./util/paths"); +const { destroy: cdkDestroy } = require("./util/cdkHelpers"); const logger = require("../lib/logger"); module.exports = async function (argv, config, cliInfo) { + const stackName = `${config.stage}-debug-stack`; + + //////////////////////// + // Remove debug stack // + //////////////////////// + logger.log(chalk.grey("Removing " + stackName + " stack")); + const debugAppEnvs = [ + `SST_DEBUG_STACK=${stackName}`, + `SST_DEBUG_STAGE=${config.stage}`, + `SST_DEBUG_REGION=${config.region}`, + ]; + // Note: When deploying the debug stack, the current working directory is user's app. + // Setting the current working directory to debug stack cdk app directory to allow + // Lambda Function construct be able to reference code with relative path. + process.chdir(path.join(paths.ownPath, "assets", "debug-stack")); + await cdkDestroy({ + ...cliInfo.cdkOptions, + app: `${debugAppEnvs.join(" ")} node bin/index.js`, + output: "cdk.out", + }); + // Note: Restore working directory + process.chdir(paths.appPath); + + //////////////// + // Remove app // + //////////////// logger.log(chalk.grey("Removing " + (argv.stack ? argv.stack : "stacks"))); // Wait for remove to complete diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index ef5b7aae44..3f03afa2b0 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -315,6 +315,18 @@ async function deploy(options) { return results; } +async function destroy(options) { + let results; + + try { + results = await sstCore.destroy(options); + } catch (e) { + handleCdkErrors(e); + } + + return results; +} + async function parallelDeploy(options, stackStates) { let results; @@ -342,6 +354,7 @@ async function parallelDestroy(options, stackStates) { module.exports = { synth, deploy, + destroy, prepareCdk, applyConfig, parallelDeploy, diff --git a/packages/cli/test/start/lib/index.js b/packages/cli/test/start/lib/index.js index 722a71c965..230a536d00 100644 --- a/packages/cli/test/start/lib/index.js +++ b/packages/cli/test/start/lib/index.js @@ -18,7 +18,7 @@ class MySampleStack extends sst.Stack { const snsFunc = new sst.Function(this, "MySnsLambda", { code: lambda.Code.fromAsset("src"), handler: "sns.handler", - timeout: cdk.Duration.seconds(600), + timeout: cdk.Duration.seconds(6), runtime: lambda.Runtime.NODEJS_12_X, memorySize: 1024, }); @@ -27,7 +27,7 @@ class MySampleStack extends sst.Stack { const apiFunc = new sst.Function(this, "MyApiLambda", { code: lambda.Code.fromAsset("src"), handler: "hello.handler", - timeout: cdk.Duration.seconds(600), + timeout: cdk.Duration.seconds(6), runtime: lambda.Runtime.NODEJS_12_X, memorySize: 1024, environment: { diff --git a/packages/cli/test/start/package.json b/packages/cli/test/start/package.json index 1c5e2700c1..02ed375226 100644 --- a/packages/cli/test/start/package.json +++ b/packages/cli/test/start/package.json @@ -6,6 +6,8 @@ "scripts": { "start": "../../bin/scripts.js start", "build": "../../bin/scripts.js build", + "deploy": "../../bin/scripts.js deploy", + "remove": "../../bin/scripts.js remove", "cdk": "../../bin/scripts.js cdk" }, "keywords": [], diff --git a/packages/core/index.js b/packages/core/index.js index f309f71f9c..faaca7220a 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -20,6 +20,10 @@ async function deploy(cdkOptions) { return await cdk.deploy(cdkOptions); } +async function destroy(cdkOptions) { + return await cdk.destroy(cdkOptions); +} + async function parallelDeploy(cdkOptions, stackStates) { const STACK_DEPLOY_STATUS_PENDING = "pending"; const STACK_DEPLOY_STATUS_DEPLOYING = "deploying"; @@ -475,7 +479,7 @@ async function parallelDestroy(cdkOptions, stackStates) { .map(async (stackState) => { try { logger.debug(`Destroying stack ${stackState.name}`); - const { status, region } = await cdk.destroy({ + const { status, region } = await cdk.destroyAsync({ ...cdkOptions, stackName: stackState.name, }); @@ -801,6 +805,7 @@ async function parallelDestroy(cdkOptions, stackStates) { module.exports = { synth, deploy, + destroy, getCdkVersion, parallelDeploy, parallelDestroy, diff --git a/packages/core/package.json b/packages/core/package.json index 8f820c1842..fa8050bf14 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -20,6 +20,6 @@ "dependencies": { "aws-sdk": "^2.761.0", "chalk": "^4.1.0", - "sst-cdk": "1.74.0-rc.3" + "sst-cdk": "1.74.0-rc.6" } } diff --git a/yarn.lock b/yarn.lock index 449d91e909..68274607b7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8577,10 +8577,10 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -sst-cdk@1.74.0-rc.3: - version "1.74.0-rc.3" - resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.74.0-rc.3.tgz#1abaeb8cf4ff45cf96276dfe81be2366c80d7da5" - integrity sha512-b2b64GrQQIM2BnT6I0JjruwNxGGQNRkhRfF9ZJut7Is2aMyubgA9bm0LIy223LiIadVi+njyiuhrNNnfr84hEA== +sst-cdk@1.74.0-rc.6: + version "1.74.0-rc.6" + resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.74.0-rc.6.tgz#581a9c0ff8204a0f480c4cbe02b1f8ffd5b05180" + integrity sha512-VpDcqd1NOxSSwQ3Hk81YcWuDLscaRLzgGdgZ1UvA4EK2x66BPA8l1WHZesImQUKVsiqNB6115U4XNiUMCeWLIg== dependencies: "@aws-cdk/cloud-assembly-schema" "1.74.0" "@aws-cdk/cloudformation-diff" "1.74.0" From 77942b292bf69e9748c598d9163674a473ee8848 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 25 Nov 2020 15:30:45 -0500 Subject: [PATCH 137/481] Moving the cdk version scripts around --- packages/cli/test/jest-ts/yarn.lock | 1078 ++++++++++++----- .../{scripts => bin}/get-cdk-version.js | 2 + packages/create-serverless-stack/package.json | 2 +- .../{scripts => bin}/aws-cdk-version-check.js | 2 + packages/resources/package.json | 2 +- 5 files changed, 791 insertions(+), 295 deletions(-) rename packages/create-serverless-stack/{scripts => bin}/get-cdk-version.js (96%) mode change 100644 => 100755 rename packages/resources/{scripts => bin}/aws-cdk-version-check.js (98%) mode change 100644 => 100755 diff --git a/packages/cli/test/jest-ts/yarn.lock b/packages/cli/test/jest-ts/yarn.lock index e59b6b93ae..f98b9069a3 100644 --- a/packages/cli/test/jest-ts/yarn.lock +++ b/packages/cli/test/jest-ts/yarn.lock @@ -2,248 +2,293 @@ # yarn lockfile v1 -"@aws-cdk/assert@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.61.0.tgz#c1dbbf71fd64beb067a6e6237e03686319acaaa7" - integrity sha512-avvDVpyd8zLMT0HEW1K2ngP5U8CHu+BtPinUkLpLXVJ+Cr5K12plnk84+BOWe1NhM9/bqC4b1KA0c6MzIzgREA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cloudformation-diff" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.61.0.tgz#9702ba8ef5b3c45ec47e0530006d63dc0685a5ff" - integrity sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA== - dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-applicationautoscaling@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz#8129984ba0185bbb525fd8ef6328c5c84e51e4e5" - integrity sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-autoscaling-common@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz#9e7f6a8669b36001b846d90fa8cb65d8b4edb27b" - integrity sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudformation@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.61.0.tgz#6810e5327aa53b6d73cb337af340db152284aad7" - integrity sha512-e7mti0sWR6Sf4tav36bu379kkG5E33VMPLZaT8RkhXkIl97c1OaGHVx5G1Oe5DiHka08c+PA6da8ahkrR1wSkQ== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudwatch@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz#3c0171ca76d086da424c1b4148a53c4d68dd885a" - integrity sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-codeguruprofiler@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz#1ace4c61a4a7b916f4dbe28070b5b914949e6f06" - integrity sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - -"@aws-cdk/aws-dynamodb@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.61.0.tgz#3d9b1ffd6eb965152a2456de1b08625d3f3ee907" - integrity sha512-Qd87xJNTjCRBQ//H4WA6Lif3VuA9QuyKyterlmTGnmrUsAqubkKtxu/lLvMp0gQb9LzjQ5Hn9238v1s8rDBDlw== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/custom-resources" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ec2@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz#d39b1f5356c57089b963bbe4644adc02fd12a4bf" - integrity sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-ssm" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-efs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz#c4d66d0d928c01c8018c1c8bc75a1c5097d649ce" - integrity sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg== - dependencies: - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-events@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" - integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-iam@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" - integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== - dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-kms@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" - integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-lambda@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz#65b2fb456f6c2d0566401bd3d265f5bae47d6346" - integrity sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-codeguruprofiler" "1.61.0" - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-efs" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-logs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz#430bb5fc87ec606416ffb0869f04754185092a21" - integrity sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3-assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz#8512ac0e16818bc78eff010d15d6cc99a7d8fccf" - integrity sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA== - dependencies: - "@aws-cdk/assets" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" - integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== - dependencies: - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sns-subscriptions@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.61.0.tgz#839f37ae5b206a6c9b773775dbed7439425eeb0c" - integrity sha512-XhRJlbaNKrl5+cIhSf8fIeV1gcWyg25O86k5j6dt4KOGYWa4fpYkxF4KwUKKYtugk0F887K7F4/DmDOtqm5JuQ== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sns@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.61.0.tgz#c82f9b224b7ebf3e48cd9433456156e5d3f1df89" - integrity sha512-jmJmZXidJAJTg4lPnxMm26QR3ovMYb/89NBWnIRwGdVGcZ7nrWUkC0JNPQMbP+EvUFdh/9xdFVP4JvvzZzoy0w== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sqs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz#b2d1d7a5d27d36d1580a3cb500daf417037da492" - integrity sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ssm@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz#229308cfce757f8b3f75d12bf276ce4f8042076f" - integrity sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" +"@aws-cdk/assert@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.74.0.tgz#82795a3bb21ede93288a60322804f6f4e2d4959e" + integrity sha512-5M3M4lcSS2dGPgVANhv5GjqC6nNBy9bL1XECAJj3lg7q+6zJ00+0wq4bB0wyvm/mE+S0axkGZ4LVHF5QA2gCfQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/cloudformation-diff" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/assets@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.74.0.tgz#8aea948a32afcf7c60449346a087c4b5aecff251" + integrity sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ== + dependencies: + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-apigatewayv2@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.74.0.tgz#c65c94e25b70fcee53a3e15e211f74819eff4d77" + integrity sha512-Z8GRXYZX6MHZeyKQpiiCUvtxIKh6y9UGRM9f6+xfjMa75WwjoM8cFm9h41720LwKcUXYj0TlKiqEyeL12UIAYA== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-applicationautoscaling@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz#ad5e946e68bd4094c3236e983d36f67d66135dfc" + integrity sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-autoscaling-common@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz#f6bcbb987830f299b6e2ef454944afdde9a8a82e" + integrity sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-certificatemanager@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.74.0.tgz#35b07c4b396a3db96da5d431e549460d1edc2251" + integrity sha512-Ve1SYM6qpUysHLD5bzHiE4kXBeo7VAEQlUti0cjkkjkuPh+dKHti/TqYhA0tkfUIMjZylnvkogBzMYdIUBTNxg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-route53" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudformation@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.74.0.tgz#04fffb02403fb52ee05ec43172b845a29a903a9e" + integrity sha512-VOyuMhoxA9vk3zSUfzqSg1YjYYgc+qyB0bpaOJIW/iinXYXhA64z5YQnTxdwd/exlFgA59chOanA7aRrNM2YIg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-sns" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudwatch@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz#94a29d2998a5c08412084b346d404b3a8b90f8a8" + integrity sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-codeguruprofiler@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz#d749688e9edb252ce6fc68efa4f9977f7ba02cb6" + integrity sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-dynamodb@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.74.0.tgz#7e0ef530e9c3d7301a9db616ddf6d650f7acb76f" + integrity sha512-YU38dFYLMyMe5u2GLy8sFCFTVxwDgWZ67HzFg41kSj8WpAsVQEE5Zxh1nf0+8Ai1J4MNeLeMCaXtuliHipoQSw== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/custom-resources" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ec2@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz#eae31df9045ca9374daf6b1562674e31d8053aff" + integrity sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/aws-ssm" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-efs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz#367b89f14ccd090f98227dbc975076571b31faac" + integrity sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA== + dependencies: + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-events@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz#2ed5a4cdd737ce4c8950506df496d0b43ac6aa12" + integrity sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-iam@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz#c255c9676fb6048ab27c00d111ed5e7d8b46877c" + integrity sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA== + dependencies: + "@aws-cdk/core" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-kms@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz#73531f7b5d2542eb5e3f7bb54604944921e34995" + integrity sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda-nodejs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.74.0.tgz#aa818270e4dcd74be51d402cdb114da311b3c966" + integrity sha512-1mc8I+Yz43El8O8SjsfkABsI31tcpO5e3fAz7/40DKuFgM9jkL6vyiL55MLIckAqmE2N9mRYU0xF4RC7uRZdmQ== + dependencies: + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz#52175fbc9e679ca5c0f4d15e0666c99fc4a953d0" + integrity sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-codeguruprofiler" "1.74.0" + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-efs" "1.74.0" + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/aws-sqs" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-logs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz#cd40afe70ffeb5250ecea1db0ee0a2f68fb2084a" + integrity sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-s3-assets" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-route53@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.74.0.tgz#f9b3c770cf613227bba31c4a7499c8f19966f3e4" + integrity sha512-TYnAByXLc6B/uAG03bYLV0kPi1TU8G95kW6wNhfiqvPCSwfizbsg5rztbUoydJpBocbOs9qbtCM7v6gbDsB2bQ== + dependencies: + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3-assets@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz#7f1988f3931e95d88a8c1357f98c47f7f9b73dee" + integrity sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg== + dependencies: + "@aws-cdk/assets" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz#5b53839c3af0f67bfb1e96061f6a1ea5be445fe9" + integrity sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q== + dependencies: + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sns-subscriptions@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.74.0.tgz#6cdad4a409359122e8a410543e33da59d21b54cc" + integrity sha512-MOuArbCx1nxL5B40RMQzHNnU0SZWkaQfRDTURTQbX4e0OHyq5DnQrtXTu/XyI/MYPBU+ZnC/FXP+hynCatn+nw== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-sns" "1.74.0" + "@aws-cdk/aws-sqs" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sns@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.74.0.tgz#c9289b34cb2512010a0b6813f684c93398502bdd" + integrity sha512-O0HDGvl1WjCTU53auNJKCW5/6vpbVYlj0RwLgGaOOlTeKnfuq53kGvL/t3QdZQlJWxSvkbN61O+rZB7GacXV0g== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-events" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/aws-sqs" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sqs@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz#998da5838d4310805432f0cf55fcc7c8f34657e2" + integrity sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ssm@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz#426dd65c0b933618d5c196cb38386c1035b0fdc4" + integrity sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-kms" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" "@aws-cdk/cfnspec@1.61.0": version "1.61.0" @@ -252,6 +297,13 @@ dependencies: md5 "^2.3.0" +"@aws-cdk/cfnspec@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.74.0.tgz#03577e266721fe87287f9fc710a95d7b7e5886cd" + integrity sha512-9rdFgRUoV3lbAD6lnU+hGdkit8ILmUq+XCXzRdc9xWHUXIKxMmFK9frXTT+wGmjgdz/GpPyfSbFjzyqk4QE5+w== + dependencies: + md5 "^2.3.0" + "@aws-cdk/cloud-assembly-schema@1.61.0": version "1.61.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" @@ -260,6 +312,14 @@ jsonschema "^1.2.5" semver "^7.2.2" +"@aws-cdk/cloud-assembly-schema@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz#f1bbd8411ec320dd9e14ef2dce626a05019c42bc" + integrity sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw== + dependencies: + jsonschema "^1.4.0" + semver "^7.3.2" + "@aws-cdk/cloudformation-diff@1.61.0": version "1.61.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.61.0.tgz#8acb549fd1dd819aa61dfed47e011b44827045a8" @@ -272,6 +332,18 @@ string-width "^4.2.0" table "^5.4.6" +"@aws-cdk/cloudformation-diff@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.74.0.tgz#d86199db530f9df641cff7f3996939c47645d59f" + integrity sha512-aYAg85fkpX39euUo5HjsGtqOpyD5fAz1+jZ/F/5erA8Y/+rB4ifCVJH0cLYHVdYwo8oc3poB6jW4tVMxNYxbrg== + dependencies: + "@aws-cdk/cfnspec" "1.74.0" + colors "^1.4.0" + diff "^5.0.0" + fast-deep-equal "^3.1.3" + string-width "^4.2.0" + table "^6.0.3" + "@aws-cdk/core@1.61.0": version "1.61.0" resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" @@ -283,18 +355,32 @@ fs-extra "^9.0.1" minimatch "^3.0.4" -"@aws-cdk/custom-resources@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.61.0.tgz#03749f4122e46504fd1b3b3b9a11aa3578f269bf" - integrity sha512-etnHE7A0+J5w1L/m+KxEbPQ7LgtVYvEUV6naqRp5uIsTBaJ9sCQ+q43Y3Fj+g3NMigm8C2fKg5FmiFE6kiymDQ== - dependencies: - "@aws-cdk/aws-cloudformation" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" +"@aws-cdk/core@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.74.0.tgz#132d31c0ab9d39394827431ccd804cf10de34273" + integrity sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + "@balena/dockerignore" "^1.0.2" + constructs "^3.2.0" + fs-extra "^9.0.1" + ignore "^5.1.8" + minimatch "^3.0.4" + +"@aws-cdk/custom-resources@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.74.0.tgz#19329e8a9b9bc0ca66e00c791b008c416a67265f" + integrity sha512-KDXgyRCeCMIj42nQcd2RXc4GYQpd7SWtx2iw0G4Wvs/wG4i3nR1qdlvEJvAlNgsYeqM4pp3mIp3PgdX341HsCg== + dependencies: + "@aws-cdk/aws-cloudformation" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-logs" "1.74.0" + "@aws-cdk/aws-sns" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" "@aws-cdk/cx-api@1.61.0": version "1.61.0" @@ -304,11 +390,31 @@ "@aws-cdk/cloud-assembly-schema" "1.61.0" semver "^7.2.2" +"@aws-cdk/cx-api@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz#922c11389d723eadef2bc12666ced4980fe9e4cc" + integrity sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.74.0" + semver "^7.3.2" + "@aws-cdk/region-info@1.61.0": version "1.61.0" resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== +"@aws-cdk/region-info@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.74.0.tgz#e53eabe2d8980c360e63ea956615253551005182" + integrity sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA== + +"@aws-cdk/yaml-cfn@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/yaml-cfn/-/yaml-cfn-1.74.0.tgz#ea66da39391acf4d2f385845bb1c3466779bb90c" + integrity sha512-fJyS9apCC6lk3MHramd8Kjz4UwGWqM5gDRBci68Vs/nfXcpXY2ekHGjUMUfcel7VPobNKWszxWAMxXttAHa1zg== + dependencies: + yaml "1.10.0" + "@babel/cli@^7.10.5": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.5.tgz#57df2987c8cf89d0fc7d4b157ec59d7619f1b77a" @@ -1183,6 +1289,11 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1394,21 +1505,26 @@ chalk "^4.0.0" "@serverless-stack/cli@../../../cli": - version "0.4.1" + version "0.4.3" dependencies: + "@aws-cdk/aws-apigatewayv2" "1.74.0" + "@aws-cdk/aws-dynamodb" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/core" "1.74.0" "@babel/cli" "^7.10.5" "@babel/core" "^7.10.5" "@babel/eslint-parser" "^7.11.3" "@babel/eslint-plugin" "^7.11.3" "@babel/plugin-proposal-class-properties" "^7.10.4" "@babel/preset-env" "^7.10.4" - "@serverless-stack/core" "^0.4.1" - "@serverless-stack/resources" "^0.4.1" + "@serverless-stack/core" "^0.4.3" + "@serverless-stack/resources" "^0.4.3" "@types/jest" "^26.0.7" "@types/node" "^14.0.27" "@typescript-eslint/eslint-plugin" "^3.9.1" "@typescript-eslint/parser" "^3.9.1" - aws-cdk "1.61.0" + aws-cdk "1.74.0" chalk "^4.1.0" core-js "^3.6.5" cross-spawn "^7.0.3" @@ -1418,26 +1534,29 @@ source-map-support "^0.5.19" ts-jest "^26.1.4" typescript "^3.9.7" + ws "^7.4.0" yargs "^15.4.1" -"@serverless-stack/core@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@serverless-stack/core/-/core-0.4.1.tgz#c3099627eb891696cd0321a28ed8df3df995c2f7" - integrity sha512-Fkqv/prAwNHG4Plf/HcL0VV1S5i0/q3z1K4LevS0PObM6S90jczLWLYoWmq0OGIffX/ARvHJWAxNT0F5BMCJ5A== +"@serverless-stack/core@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@serverless-stack/core/-/core-0.4.3.tgz#1f9c8b0221c718250dbadd3a7081e2e8fbef28bb" + integrity sha512-R+iUsOKMYFof+nu4O9VhZrNmiJs3ap6sxuKjXfiUwTI6Iy8wCFE5aIb3Wu0EIBmfeVe7vR4PPH9TYjh3kJ4UdA== dependencies: aws-sdk "^2.761.0" chalk "^4.1.0" sst-cdk "1.61.0-rc.25" "@serverless-stack/resources@../../../resources": - version "0.4.1" + version "0.4.3" dependencies: - "@aws-cdk/core" "1.61.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-lambda-nodejs" "1.74.0" + "@aws-cdk/core" "1.74.0" -"@serverless-stack/resources@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@serverless-stack/resources/-/resources-0.4.1.tgz#fb5f2a4459b2139661b19e750e8af2bf214d3b41" - integrity sha512-oDPFeyUo3KQN/x7FuEcmIoDDJmJnXId18g/1EkdG8nCWnbGF28tAsfT95Qv6qLjxBPlgV5rKW6b6z6djJkYwKQ== +"@serverless-stack/resources@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@serverless-stack/resources/-/resources-0.4.3.tgz#1a9143ccedb1e5458d6c3cd32e8be531ee27e4a6" + integrity sha512-cYE2aTHbToj71xZyEbCMH5+5jZEHx2ebL/gA5eEC0JUnlrfCIt6K3buO4nIKvOY01hQD/kS6OLM40x6keV2F3A== dependencies: "@aws-cdk/core" "1.61.0" @@ -1455,6 +1574,11 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.9" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d" @@ -1665,6 +1789,13 @@ agent-base@4, agent-base@^4.2.0, agent-base@^4.3.0: dependencies: es6-promisify "^5.0.0" +agent-base@6, agent-base@^6.0.0: + 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" + agent-base@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" @@ -1692,6 +1823,16 @@ ajv@^6.10.2, ajv@^6.12.3: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -1774,6 +1915,19 @@ archiver@^4.0.2: tar-stream "^2.1.2" zip-stream "^3.0.1" +archiver@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.1.0.tgz#05b0f6f7836f3e6356a0532763d2bb91017a7e37" + integrity sha512-iKuQUP1nuKzBC2PFlGet5twENzCfyODmvkxwDV0cEFXavwcLrIW5ssTuHi9dyTPvpWr6Faweo2eQaQiLIwyXTA== + dependencies: + archiver-utils "^2.1.0" + async "^3.2.0" + buffer-crc32 "^0.2.1" + readable-stream "^3.6.0" + readdir-glob "^1.0.0" + tar-stream "^2.1.4" + zip-stream "^4.0.4" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1823,11 +1977,23 @@ ast-types@0.x.x: resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.3.tgz#50da3f28d17bdbc7969a3a2d83a0e4a72ae755a7" integrity sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA== +ast-types@^0.13.2: + version "0.13.4" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" + integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== + dependencies: + tslib "^2.0.1" + astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" @@ -1853,34 +2019,34 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -aws-cdk@1.61.0: - version "1.61.0" - resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-1.61.0.tgz#b1e1a55c64dff5825b3961b56c2b5fcb7ac472e9" - integrity sha512-deLtRq3DkiUB/5EN8ZCWLdXY0Uhm+fUvA1WSO8lzEhl71SmD7dyEHqvl7k96WPrIhUkS0nbiz6a+WC0QadIthg== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cloudformation-diff" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - archiver "^4.0.2" - aws-sdk "^2.739.0" - camelcase "^6.0.0" - cdk-assets "1.61.0" +aws-cdk@1.74.0: + version "1.74.0" + resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-1.74.0.tgz#d049631ea578a8b75244b13a3028134ebb56add2" + integrity sha512-D4LKNlmvLHv+CWI/35Esaoij4v5VSqKyc+Gvnjhj1K3I4lG/AAxEy1CmRBhN/w1LJt70U9jnBpIsb6hGUlrV8A== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/cloudformation-diff" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + "@aws-cdk/yaml-cfn" "1.74.0" + archiver "^5.0.2" + aws-sdk "^2.792.0" + camelcase "^6.2.0" + cdk-assets "1.74.0" colors "^1.4.0" decamelize "^4.0.0" fs-extra "^9.0.1" glob "^7.1.6" json-diff "^0.5.4" minimatch ">=3.0" - promptly "^3.0.3" - proxy-agent "^3.1.1" - semver "^7.2.2" + promptly "^3.2.0" + proxy-agent "^4.0.0" + semver "^7.3.2" source-map-support "^0.5.19" - table "^5.4.6" - uuid "^8.3.0" + table "^6.0.3" + uuid "^8.3.1" wrap-ansi "^7.0.0" - yaml "^1.10.0" - yargs "^15.4.1" + yargs "^16.1.1" aws-sdk@^2.739.0: version "2.743.0" @@ -1912,6 +2078,21 @@ aws-sdk@^2.761.0: uuid "3.3.2" xml2js "0.4.19" +aws-sdk@^2.792.0: + version "2.799.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.799.0.tgz#8b1a64c1a9f8ccf5794eb07bdd8051e4cb6adcfd" + integrity sha512-NYAoiNU+bJXhlJsC0rFqrmD5t5ho7/VxldmziP6HLPYHfOCI9Uvk6UVjfPmhLWPm0mHnIxhsHqmsNGyjhHNYmw== + dependencies: + buffer "4.9.2" + events "1.1.1" + ieee754 "1.1.13" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "3.3.2" + xml2js "0.4.19" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -2040,6 +2221,15 @@ bl@^4.0.1: inherits "^2.0.4" readable-stream "^3.4.0" +bl@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" + integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2162,6 +2352,11 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== +camelcase@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + caniuse-lite@^1.0.30001111: version "1.0.30001112" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001112.tgz#0fffc3b934ff56ff0548c37bc9dad7d882bcf672" @@ -2191,6 +2386,18 @@ cdk-assets@1.61.0: glob "^7.1.6" yargs "^15.4.1" +cdk-assets@1.74.0: + version "1.74.0" + resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.74.0.tgz#d70d5d5351181d91d9ee91791a858c2eb5d5e723" + integrity sha512-YF3nE1zAJU4dlWVnY30a4ALNzHhSTMMoAMv4bYkwXTLqzu+QB2v3MQdPpCLdGTGUYDaeRZy/Z/4R4MqM+/KPAA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + archiver "^5.0.2" + aws-sdk "^2.792.0" + glob "^7.1.6" + yargs "^16.1.1" + chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -2276,6 +2483,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +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" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -2350,6 +2566,16 @@ compress-commons@^3.0.0: normalize-path "^3.0.0" readable-stream "^2.3.7" +compress-commons@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.0.2.tgz#d6896be386e52f37610cef9e6fa5defc58c31bd7" + integrity sha512-qhd32a9xgzmpfoga1VQEiLEwdKZ6Plnpx5UCgIsf89FSolyJ7WnifY4Gtjgv5WR6hWAyRaHxC5MiEhU/38U70A== + dependencies: + buffer-crc32 "^0.2.13" + crc32-stream "^4.0.1" + 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" @@ -2360,6 +2586,11 @@ constructs@^3.0.4: resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== +constructs@^3.2.0: + version "3.2.40" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.40.tgz#e8c0e1020ad254ff73d9ea6c85cc90c3a33c71f1" + integrity sha512-XtKn+Pzq8EZNe1zasQem6X09dprZ8pXvNxECKQLZC+jU5BdkgDKe0nak4Wp+k7uvDFlyh9NccaGtxqP6w2YS0A== + convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" @@ -2390,6 +2621,14 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +crc-32@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" + integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== + dependencies: + exit-on-epipe "~1.0.1" + printj "~1.1.0" + crc32-stream@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85" @@ -2398,6 +2637,14 @@ crc32-stream@^3.0.1: crc "^3.4.4" readable-stream "^3.4.0" +crc32-stream@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.1.tgz#0f047d74041737f8a55e86837a1b826bd8ab0067" + integrity sha512-FN5V+weeO/8JaXsamelVYO1PHyeCsuL3HcG4cqsj0ceARcocxalaShCsohZMSAF+db7UYFwBy1rARK/0oFItUw== + dependencies: + crc-32 "^1.2.0" + readable-stream "^3.4.0" + crc@^3.4.4: version "3.8.0" resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" @@ -2459,6 +2706,11 @@ data-uri-to-buffer@1: resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" integrity sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ== +data-uri-to-buffer@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" + integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== + data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -2564,6 +2816,15 @@ degenerator@^1.0.4: escodegen "1.x.x" esprima "3.x.x" +degenerator@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-2.2.0.tgz#49e98c11fa0293c5b26edfbb52f15729afcdb254" + integrity sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg== + dependencies: + ast-types "^0.13.2" + escodegen "^1.8.1" + esprima "^4.0.0" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -2594,6 +2855,11 @@ diff@^4.0.2: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +diff@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + difflib@~0.2.1: version "0.2.4" resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" @@ -2693,6 +2959,11 @@ escalade@^3.0.2: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== +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.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -2703,7 +2974,7 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@1.x.x, escodegen@^1.14.1: +escodegen@1.x.x, escodegen@^1.14.1, escodegen@^1.8.1: version "1.14.3" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== @@ -2868,6 +3139,11 @@ execa@^4.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +exit-on-epipe@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" + integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -2976,6 +3252,11 @@ file-uri-to-path@1, file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +file-uri-to-path@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba" + integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg== + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -3046,6 +3327,15 @@ fs-constants@^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@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-extra@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" @@ -3079,7 +3369,7 @@ fsevents@^2.1.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== -ftp@~0.3.10: +ftp@^0.3.10, ftp@~0.3.10: version "0.3.10" resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0= @@ -3102,7 +3392,7 @@ gensync@^1.0.0-beta.1: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, 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== @@ -3126,6 +3416,18 @@ get-stream@^5.0.0: dependencies: pump "^3.0.0" +get-uri@3: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c" + integrity sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg== + dependencies: + "@tootallnate/once" "1" + data-uri-to-buffer "3" + debug "4" + file-uri-to-path "2" + fs-extra "^8.1.0" + ftp "^0.3.10" + get-uri@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.4.tgz#d4937ab819e218d4cb5ae18e4f5962bef169cc6a" @@ -3299,6 +3601,15 @@ http-proxy-agent@^2.1.0: agent-base "4" debug "3.1.0" +http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -3308,6 +3619,14 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +https-proxy-agent@5, https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + https-proxy-agent@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81" @@ -3338,6 +3657,11 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + import-fresh@^3.0.0: version "3.2.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" @@ -4125,6 +4449,13 @@ json5@2.x, json5@^2.1.2: dependencies: minimist "^1.2.5" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + jsonfile@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" @@ -4139,6 +4470,11 @@ jsonschema@^1.2.5: resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== +jsonschema@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -4265,7 +4601,7 @@ lodash@^4.17.14, lodash@^4.17.19: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== -lodash@^4.17.15: +lodash@^4.17.15, lodash@^4.17.20: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== @@ -4657,6 +4993,21 @@ pac-proxy-agent@^3.0.1: raw-body "^2.2.0" socks-proxy-agent "^4.0.1" +pac-proxy-agent@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz#66883eeabadc915fc5e95457324cb0f0ac78defb" + integrity sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + get-uri "3" + http-proxy-agent "^4.0.1" + https-proxy-agent "5" + pac-resolver "^4.1.0" + raw-body "^2.2.0" + socks-proxy-agent "5" + pac-resolver@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26" @@ -4668,6 +5019,15 @@ pac-resolver@^3.0.0: netmask "^1.0.6" thunkify "^2.1.2" +pac-resolver@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-4.1.0.tgz#4b12e7d096b255a3b84e53f6831f32e9c7e5fe95" + integrity sha512-d6lf2IrZJJ7ooVHr7BfwSjRO1yKSJMaiiWYSHcrxSIUtZrCa4KKGwcztdkZ/E9LFleJfjoi1yl+XLR7AX24nbQ== + dependencies: + degenerator "^2.2.0" + ip "^1.1.5" + netmask "^1.0.6" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -4794,6 +5154,11 @@ pretty-format@^26.2.0: ansi-styles "^4.0.0" react-is "^16.12.0" +printj@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" + integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== + 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" @@ -4812,6 +5177,13 @@ promptly@^3.0.3: pify "^3.0.0" read "^1.0.4" +promptly@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/promptly/-/promptly-3.2.0.tgz#a5517fbbf59bd31c1751d4e1d9bef1714f42b9d8" + integrity sha512-WnR9obtgW+rG4oUV3hSnNGl1pHm3V1H/qD9iJBumGSmVsSC5HpZOLuu8qdMb6yCItGfT7dcRszejr/5P3i9Pug== + dependencies: + read "^1.0.4" + prompts@^2.0.1: version "2.3.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" @@ -4834,6 +5206,20 @@ proxy-agent@^3.1.1: proxy-from-env "^1.0.0" socks-proxy-agent "^4.0.1" +proxy-agent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-4.0.0.tgz#a92976af3fbc7d846f2e850e2ac5ac6ca3fb74c7" + integrity sha512-8P0Y2SkwvKjiGU1IkEfYuTteioMIDFxPL4/j49zzt5Mz3pG1KO+mIrDG1qH0PQUHTTczjwGcYl+EzfXiFj5vUQ== + dependencies: + agent-base "^6.0.0" + debug "4" + http-proxy-agent "^4.0.0" + https-proxy-agent "^5.0.0" + lru-cache "^5.1.1" + pac-proxy-agent "^4.1.0" + proxy-from-env "^1.0.0" + socks-proxy-agent "^5.0.0" + proxy-from-env@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -4945,6 +5331,13 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdir-glob@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4" + integrity sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA== + dependencies: + minimatch "^3.0.4" + readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -5287,6 +5680,15 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + smart-buffer@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" @@ -5322,6 +5724,15 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +socks-proxy-agent@5, socks-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" + integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== + dependencies: + agent-base "6" + debug "4" + socks "^2.3.3" + socks-proxy-agent@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" @@ -5330,6 +5741,14 @@ socks-proxy-agent@^4.0.1: agent-base "~4.2.1" socks "~2.3.2" +socks@^2.3.3: + version "2.5.0" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.5.0.tgz#3a7c286db114f67864a4bd8b4207a91d1db3d6db" + integrity sha512-00OqQHp5SCbwm9ecOMJj9aQtMSjwi1uVuGQoxnpKCS50VKZcOZ8z11CTKypmR8sEy7nZimy/qXY7rYJYbRlXmA== + dependencies: + ip "^1.1.5" + smart-buffer "^4.1.0" + socks@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" @@ -5600,6 +6019,16 @@ table@^5.2.3, table@^5.4.6: slice-ansi "^2.1.0" string-width "^3.0.0" +table@^6.0.3: + version "6.0.4" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.4.tgz#c523dd182177e926c723eb20e1b341238188aa0d" + integrity sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw== + dependencies: + ajv "^6.12.4" + lodash "^4.17.20" + slice-ansi "^4.0.0" + string-width "^4.2.0" + tar-stream@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.3.tgz#1e2022559221b7866161660f118255e20fa79e41" @@ -5611,6 +6040,17 @@ tar-stream@^2.1.2: inherits "^2.0.3" readable-stream "^3.1.1" +tar-stream@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.4.tgz#c4fb1a11eb0da29b893a5b25476397ba2d053bfa" + integrity sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw== + 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" + terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -5735,6 +6175,11 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== +tslib@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" + integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== + tsutils@^3.17.1: version "3.17.1" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" @@ -5833,6 +6278,11 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + universalify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" @@ -5901,6 +6351,11 @@ uuid@^8.2.0, uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== +uuid@^8.3.1: + version "8.3.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" + integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== + v8-compile-cache@^2.0.3: version "2.1.1" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" @@ -6058,6 +6513,11 @@ ws@^7.2.3: resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== +ws@^7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.0.tgz#a5dd76a24197940d4a8bb9e0e152bb4503764da7" + integrity sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ== + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" @@ -6091,12 +6551,17 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== +y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yaml@^1.10.0: +yaml@1.10.0, yaml@^1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== @@ -6109,6 +6574,11 @@ yargs-parser@18.x, yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^20.2.2: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + yargs@^15.3.1, yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" @@ -6126,6 +6596,19 @@ yargs@^15.3.1, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" +yargs@^16.1.1: + version "16.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.1.1.tgz#5a4a095bd1ca806b0a50d0c03611d38034d219a1" + integrity sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w== + 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" + zip-stream@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-3.0.1.tgz#cb8db9d324a76c09f9b76b31a12a48638b0b9708" @@ -6134,3 +6617,12 @@ zip-stream@^3.0.1: archiver-utils "^2.1.0" compress-commons "^3.0.0" readable-stream "^3.6.0" + +zip-stream@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.0.4.tgz#3a8f100b73afaa7d1ae9338d910b321dec77ff3a" + integrity sha512-a65wQ3h5gcQ/nQGWV1mSZCEzCML6EK/vyVPcrPNynySP1j3VBbQKh3nhC8CbORb+jfl2vXvh56Ul5odP1bAHqw== + dependencies: + archiver-utils "^2.1.0" + compress-commons "^4.0.2" + readable-stream "^3.6.0" diff --git a/packages/create-serverless-stack/scripts/get-cdk-version.js b/packages/create-serverless-stack/bin/get-cdk-version.js old mode 100644 new mode 100755 similarity index 96% rename from packages/create-serverless-stack/scripts/get-cdk-version.js rename to packages/create-serverless-stack/bin/get-cdk-version.js index 5bf4a5c5fe..c3ab8d5c8b --- a/packages/create-serverless-stack/scripts/get-cdk-version.js +++ b/packages/create-serverless-stack/bin/get-cdk-version.js @@ -1,3 +1,5 @@ +#!/usr/bin/env node + /** * Gets the forked AWS CDK version from @serverless-stack/core and writes to a temp file. * Replaces the version in the template package.json. diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 88f241a87e..43bf146fef 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -7,7 +7,7 @@ "create-serverless-stack": "./bin/index.js" }, "scripts": { - "prepare": "node scripts/get-cdk-version.js" + "prepare": "./bin/get-cdk-version.js" }, "author": { "name": "Anomaly Innovations", diff --git a/packages/resources/scripts/aws-cdk-version-check.js b/packages/resources/bin/aws-cdk-version-check.js old mode 100644 new mode 100755 similarity index 98% rename from packages/resources/scripts/aws-cdk-version-check.js rename to packages/resources/bin/aws-cdk-version-check.js index 311d16556f..6416f5ed47 --- a/packages/resources/scripts/aws-cdk-version-check.js +++ b/packages/resources/bin/aws-cdk-version-check.js @@ -1,3 +1,5 @@ +#!/usr/bin/env node + /** * Keep the AWS CDK version in sync with the forked version we are using in * @serverless-stack/core. Can cause unexpected issues if out of sync. diff --git a/packages/resources/package.json b/packages/resources/package.json index 50801e5afc..31cad64494 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -9,7 +9,7 @@ "watch": "tsc --watch --rootDir src --outDir dist", "build": "tsc --rootDir src --outDir dist && cd lambda/stub && yarn", "clean": "rm -rf dist", - "prepare": "node scripts/aws-cdk-version-check.js && npm run build" + "prepare": "./bin/aws-cdk-version-check.js && npm run build" }, "author": { "name": "Anomaly Innovations", From 85a4ac75d017c45d678eae87463cc909fc7baffb Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 25 Nov 2020 16:09:11 -0500 Subject: [PATCH 138/481] sst start: clean up test app --- packages/cli/assets/lambda-invoke/bootstrap.js | 3 ++- packages/cli/test/start/lib/index.js | 17 ++++++++--------- .../cli/test/start/src/{hello.js => api.js} | 13 +++---------- packages/cli/test/start/src/sns.js | 4 ++-- 4 files changed, 15 insertions(+), 22 deletions(-) rename packages/cli/test/start/src/{hello.js => api.js} (61%) diff --git a/packages/cli/assets/lambda-invoke/bootstrap.js b/packages/cli/assets/lambda-invoke/bootstrap.js index 07dfdadf8a..99a3a0c4a0 100644 --- a/packages/cli/assets/lambda-invoke/bootstrap.js +++ b/packages/cli/assets/lambda-invoke/bootstrap.js @@ -95,7 +95,8 @@ function getHandler() { result.then(resolve, reject); } // returned a non-Promise - // ie. the handler function is not async, and the user returned instead of calling the callback + // ie. The handler function is not async, and the user returned instead of calling + // the callback. Lambda would return a null response, we need to return the same. else { return resolve(null); } diff --git a/packages/cli/test/start/lib/index.js b/packages/cli/test/start/lib/index.js index 230a536d00..bfab1beb2f 100644 --- a/packages/cli/test/start/lib/index.js +++ b/packages/cli/test/start/lib/index.js @@ -10,32 +10,31 @@ class MySampleStack extends sst.Stack { constructor(scope, id, props) { super(scope, id, props); - const { stage, name } = this.node.root; - + // Create an SNS topic const topic = new sns.Topic(this, "MyTopic", { displayName: "Customer subscription topic", }); + + // Create a Lambda function subscribed to the topic const snsFunc = new sst.Function(this, "MySnsLambda", { code: lambda.Code.fromAsset("src"), handler: "sns.handler", - timeout: cdk.Duration.seconds(6), runtime: lambda.Runtime.NODEJS_12_X, - memorySize: 1024, }); topic.addSubscription(new subscriptions.LambdaSubscription(snsFunc)); + // Create a Lambda function triggered by the HTTP API const apiFunc = new sst.Function(this, "MyApiLambda", { code: lambda.Code.fromAsset("src"), - handler: "hello.handler", - timeout: cdk.Duration.seconds(6), + handler: "api.handler", runtime: lambda.Runtime.NODEJS_12_X, - memorySize: 1024, environment: { - DRINK: "COFFEE", TOPIC_ARN: topic.topicArn, }, }); topic.grantPublish(apiFunc); + + // Create the HTTP API const api = new apig.HttpApi(this, "Api"); api.addRoutes({ integration: new apigIntegrations.LambdaProxyIntegration({ @@ -45,8 +44,8 @@ class MySampleStack extends sst.Stack { path: "/", }); + // Show API endpoint in output new cdk.CfnOutput(this, "ApiEndpoint", { - exportName: `${stage}-${name}-ApiEndpoint`, value: api.apiEndpoint, }); } diff --git a/packages/cli/test/start/src/hello.js b/packages/cli/test/start/src/api.js similarity index 61% rename from packages/cli/test/start/src/hello.js rename to packages/cli/test/start/src/api.js index 5fb3f8a757..f67a0355aa 100644 --- a/packages/cli/test/start/src/hello.js +++ b/packages/cli/test/start/src/api.js @@ -1,12 +1,7 @@ -setTimeout(() => console.log("still here"), 3000); - const AWS = require("aws-sdk"); -AWS.config.logger = console; const sns = new AWS.SNS(); -exports.handler = async function (event, context, callback) { - context.callbackWaitsForEmptyEventLoop = false; - +exports.handler = async function (event) { console.log("Calling from inside the api function"); await sns @@ -17,11 +12,9 @@ exports.handler = async function (event, context, callback) { }) .promise(); - //setTimeout(() => { - callback(null, { + return { statusCode: 200, headers: { "Content-Type": "text/plain" }, body: "New World with event: " + JSON.stringify(event), - }); - //}, 2000); + }; }; diff --git a/packages/cli/test/start/src/sns.js b/packages/cli/test/start/src/sns.js index ac3be2a757..4bb0a03882 100644 --- a/packages/cli/test/start/src/sns.js +++ b/packages/cli/test/start/src/sns.js @@ -1,4 +1,4 @@ -exports.handler = function (event, context, callback) { +exports.handler = async function () { console.log("Calling from inside the sns function"); - callback(null, { status: "real" }); + return { status: true }; }; From b81c718813da3f73a8f92b52932edbe5c0d96cae Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 25 Nov 2020 16:28:39 -0500 Subject: [PATCH 139/481] Formatting test app for start --- packages/cli/test/start/lib/index.js | 9 +++++---- packages/cli/test/start/src/api.js | 10 ++++++---- packages/cli/test/start/src/sns.js | 6 ++++-- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/packages/cli/test/start/lib/index.js b/packages/cli/test/start/lib/index.js index bfab1beb2f..e8f5d630d0 100644 --- a/packages/cli/test/start/lib/index.js +++ b/packages/cli/test/start/lib/index.js @@ -1,11 +1,12 @@ -import * as sst from "@serverless-stack/resources"; import * as cdk from "@aws-cdk/core"; -import * as lambda from "@aws-cdk/aws-lambda"; import * as sns from "@aws-cdk/aws-sns"; -import * as subscriptions from "@aws-cdk/aws-sns-subscriptions"; +import * as lambda from "@aws-cdk/aws-lambda"; import * as apig from "@aws-cdk/aws-apigatewayv2"; +import * as subscriptions from "@aws-cdk/aws-sns-subscriptions"; import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; +import * as sst from "@serverless-stack/resources"; + class MySampleStack extends sst.Stack { constructor(scope, id, props) { super(scope, id, props); @@ -23,7 +24,7 @@ class MySampleStack extends sst.Stack { }); topic.addSubscription(new subscriptions.LambdaSubscription(snsFunc)); - // Create a Lambda function triggered by the HTTP API + // Create a Lambda function triggered by an HTTP API const apiFunc = new sst.Function(this, "MyApiLambda", { code: lambda.Code.fromAsset("src"), handler: "api.handler", diff --git a/packages/cli/test/start/src/api.js b/packages/cli/test/start/src/api.js index f67a0355aa..a8202643f5 100644 --- a/packages/cli/test/start/src/api.js +++ b/packages/cli/test/start/src/api.js @@ -2,19 +2,21 @@ const AWS = require("aws-sdk"); const sns = new AWS.SNS(); exports.handler = async function (event) { - console.log("Calling from inside the api function"); + console.log( + `Logging from inside the API Lambda for route: ${event.routeKey}` + ); await sns .publish({ - TopicArn: process.env.TOPIC_ARN, - Message: JSON.stringify({ abc: 123 }), MessageStructure: "string", + TopicArn: process.env.TOPIC_ARN, + Message: "Hello from the API Lambda", }) .promise(); return { statusCode: 200, + body: "Hello World", headers: { "Content-Type": "text/plain" }, - body: "New World with event: " + JSON.stringify(event), }; }; diff --git a/packages/cli/test/start/src/sns.js b/packages/cli/test/start/src/sns.js index 4bb0a03882..ff1e8beb91 100644 --- a/packages/cli/test/start/src/sns.js +++ b/packages/cli/test/start/src/sns.js @@ -1,4 +1,6 @@ -exports.handler = async function () { - console.log("Calling from inside the sns function"); +exports.handler = async function (event) { + console.log( + `Logging from inside the SNS Lambda with event message: "${event.Records[0].Sns.Message}"` + ); return { status: true }; }; From 030d832841d6faafa15701f926b2a04442a703da Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 25 Nov 2020 16:45:51 -0500 Subject: [PATCH 140/481] sst start: pretty format event source --- packages/cli/scripts/start.js | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index ff6461949c..3e7cde1525 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -114,9 +114,17 @@ function onMessage(message) { debugSrcHandler, } = data; + // Print request info logger.log( - chalk.grey(`${debugRequestId} REQUEST ${JSON.stringify(event, null, 4)}`) + chalk.grey( + `${debugRequestId} REQUEST ${ + env.AWS_LAMBDA_FUNCTION_NAME + } [${debugSrcPath}:${debugSrcHandler}] invoked by ${parseEventSource( + event + )}` + ) ); + logger.debug(chalk.grey(JSON.stringify(event))); // From Lambda /var/runtime/bootstrap // https://link.medium.com/7ir11kKjwbb @@ -147,8 +155,23 @@ function onMessage(message) { ); const timer = setTimer(lambda, handleResponse, debugRequestTimeoutInMs); + function parseEventSource(event) { + // SNS + if ( + event.Records && + event.Records.length > 0 && + event.Records.EventSource === "aws:sns" + ) { + // TopicArn: arn:aws:sns:us-east-1:123456789012:ExampleTopic + return event.Records.length === 1 + ? `SNS ${event.Records[0].Sns.TopicArn.split(":").pop()}` + : `SNS ${event.Records.length} records`; + } else { + return "an event"; + } + } + function handleResponse(response) { - console.log(response); switch (response.type) { case "success": case "failure": @@ -172,11 +195,7 @@ function onMessage(message) { if (lambdaResponse.type === "success") { logger.log( chalk.grey( - `${debugRequestId} RESPONSE ${JSON.stringify( - lambdaResponse.data, - null, - 4 - )}` + `${debugRequestId} RESPONSE ${JSON.stringify(lambdaResponse.data)}` ) ); } else if (lambdaResponse.type === "failure") { From 8b4e487272b4c100309d17714aac62b39fe98cac Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 25 Nov 2020 16:46:14 -0500 Subject: [PATCH 141/481] Tweaking copy for start command --- packages/cli/scripts/start.js | 40 +++++++++++++++-------------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index ff6461949c..925a9a1f20 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -28,7 +28,7 @@ function setTimer(lambda, handleResponse, timeoutInMs) { process.kill(lambda.pid, "SIGKILL"); } catch (e) { logger.log(e); - logger.log("Cannot kill timed out Lambda"); + logger.error("Cannot kill timed out Lambda"); } }, timeoutInMs); } @@ -38,15 +38,15 @@ function startClient(debugEndpoint) { ws.on("open", () => { ws.send(JSON.stringify({ action: "connectClient" })); - logger.debug("websocket opened"); + logger.debug("WebSocket opened"); }); ws.on("close", (code, reason) => { - logger.debug("websocket closed"); - logger.log("Debug session closed.", { code, reason }); + logger.debug("Websocket closed"); + logger.log("Debug session closed", { code, reason }); // Case: disconnected due to new client connected => do not reconnect - // Case: disconnected due to 10min idle or 2hr websocket connection limit => reconnect + // Case: disconnected due to 10min idle or 2hr WebSocket connection limit => reconnect if (code !== WEBSOCKET_CLOSE_CODE.NEW_CLIENT_CONNECTED) { logger.log("Debug session reconnecting..."); startClient(debugEndpoint); @@ -54,48 +54,42 @@ function startClient(debugEndpoint) { }); ws.on("error", (e) => { - logger.debug(`websocket error: ${e}`); - logger.log(`Debug session error: ${e}`); + logger.debug(`WebSocket error: ${e}`); + logger.error(`Debug session error: ${e}`); }); ws.on("message", onMessage); } function onMessage(message) { - logger.debug(`message received: ${message}`); + logger.debug(`Message received: ${message}`); const data = JSON.parse(message); // Handle actions if (data.action === "clientConnected") { logger.log("Debug session started. Listening for requests..."); - logger.debug(`client connection id: ${data.clientConnectionId}`); + logger.debug(`Client connection id: ${data.clientConnectionId}`); return; } if (data.action === "clientDisconnectedDueToNewClient") { - logger.log( + logger.warn( "A new debug session has been started. This session will be closed..." ); ws.close(WEBSOCKET_CLOSE_CODE.NEW_CLIENT_CONNECTED); return; } if (data.action === "failedToSendResponseDueToStubDisconnected") { - logger.log( - chalk.grey( - `${debugRequestId} ${chalk.red( - "ERROR" - )} Failed to send response because the Lambda function is not disconnected.` - ) + logger.error( + chalk.grey(debugRequestId) + + " Failed to send response because the Lambda function is not disconnected" ); return; } if (data.action === "failedToSendResponseDueToUnknown") { - logger.log( - chalk.grey( - `${debugRequestId} ${chalk.red( - "ERROR" - )} Failed to send response to the Lambda function.` - ) + logger.error( + chalk.grey(debugRequestId) + + " Failed to send response to the Lambda function" ); return; } @@ -228,7 +222,7 @@ module.exports = async function (argv, cliInfo) { // Note: Restore working directory process.chdir(paths.appPath); - // Get websocket endpoint + // Get WebSocket endpoint if ( !debugStackRet || !debugStackRet.outputs || From b49471b7faab825aab07453d8596f7a8debfddd0 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 25 Nov 2020 21:29:45 -0500 Subject: [PATCH 142/481] sst start: update event source --- packages/cli/lib/array.js | 12 ++++++ packages/cli/scripts/start.js | 70 ++++++++++++++++++++++++++--------- 2 files changed, 65 insertions(+), 17 deletions(-) create mode 100644 packages/cli/lib/array.js diff --git a/packages/cli/lib/array.js b/packages/cli/lib/array.js new file mode 100644 index 0000000000..925cec8fc9 --- /dev/null +++ b/packages/cli/lib/array.js @@ -0,0 +1,12 @@ +export function unique(arr) { + if (arr.length === 0) { + return arr; + } + + const isObjArray = arr[0] instanceof Object; + arr = isObjArray ? arr.map((e) => JSON.stringify(e)) : arr; + + const unique = arr.filter((e, pos) => arr.indexOf(e) === pos); + + return isObjArray ? unique.map((e) => JSON.parse(e)) : unique; +} diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 3e7cde1525..481896ce59 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -12,6 +12,7 @@ const { applyConfig, deploy: cdkDeploy, } = require("./util/cdkHelpers"); +const array = require("../lib/array"); const logger = require("../lib/logger"); const WEBSOCKET_CLOSE_CODE = { @@ -115,13 +116,12 @@ function onMessage(message) { } = data; // Print request info + const eventSource = parseEventSource(event); + const eventSourceDesc = + eventSource === null ? " invoked" : ` invoked by ${eventSource}`; logger.log( chalk.grey( - `${debugRequestId} REQUEST ${ - env.AWS_LAMBDA_FUNCTION_NAME - } [${debugSrcPath}:${debugSrcHandler}] invoked by ${parseEventSource( - event - )}` + `${debugRequestId} REQUEST ${env.AWS_LAMBDA_FUNCTION_NAME} [${debugSrcPath}:${debugSrcHandler}]${eventSourceDesc}` ) ); logger.debug(chalk.grey(JSON.stringify(event))); @@ -156,19 +156,55 @@ function onMessage(message) { const timer = setTimer(lambda, handleResponse, debugRequestTimeoutInMs); function parseEventSource(event) { - // SNS - if ( - event.Records && - event.Records.length > 0 && - event.Records.EventSource === "aws:sns" - ) { - // TopicArn: arn:aws:sns:us-east-1:123456789012:ExampleTopic - return event.Records.length === 1 - ? `SNS ${event.Records[0].Sns.TopicArn.split(":").pop()}` - : `SNS ${event.Records.length} records`; - } else { - return "an event"; + try { + // HTTP + if ( + ["2.0", "1.0"].includes(event.version) && + event.requestContext.apiId + ) { + return event.version === "1.0" + ? `API ${event.httpMethod} ${event.path}` + : `API ${event.requestContext.http.method} ${event.rawPath}`; + } + + // HTTP Authorizer + if (["TOKEN", "REQUEST"].includes(event.type) && event.methodArn) { + return "API authorizer"; + } + + if (event.Records && event.Records.length > 0) { + // SNS + if (event.Records[0].EventSource === "aws:sns") { + // TopicArn: arn:aws:sns:us-east-1:123456789012:ExampleTopic + const topics = array.unique( + event.Records.map((record) => record.Sns.TopicArn.split(":").pop()) + ); + return topics.length === 1 + ? `SNS topic ${topics[0]}` + : `SNS topics: ${topics.join(", ")}`; + } + // SQS + if (event.Records.EventSource === "aws:sqs") { + // eventSourceARN: arn:aws:sqs:us-east-1:123456789012:MyQueue + const names = array.unique( + event.Records.map((record) => + record.eventSourceARN.split(":").pop() + ) + ); + return names.length === 1 + ? `SQS queue ${names[0]}` + : `SQS queues: ${names.join(", ")}`; + } + // DynamoDB + if (event.Records.EventSource === "aws:dynamodb") { + return "DynamoDB"; + } + } + } catch (e) { + logger.debug(`Failed to parse event source ${e}`); } + + return null; } function handleResponse(response) { From 0686107c3cb7e668552167602f6ea4e7db75ce66 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 25 Nov 2020 21:44:59 -0500 Subject: [PATCH 143/481] sst start: update copy --- packages/cli/lib/array.js | 6 +++++- packages/cli/scripts/start.js | 18 +++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/cli/lib/array.js b/packages/cli/lib/array.js index 925cec8fc9..2a5d591e8c 100644 --- a/packages/cli/lib/array.js +++ b/packages/cli/lib/array.js @@ -1,4 +1,4 @@ -export function unique(arr) { +function unique(arr) { if (arr.length === 0) { return arr; } @@ -10,3 +10,7 @@ export function unique(arr) { return isObjArray ? unique.map((e) => JSON.parse(e)) : unique; } + +module.exports = { + unique, +}; diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 77c115f617..a4403d7ef4 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -112,10 +112,14 @@ function onMessage(message) { // Print request info const eventSource = parseEventSource(event); const eventSourceDesc = - eventSource === null ? " invoked" : ` invoked by ${eventSource}`; + eventSource === null + ? " invoked" + : ` invoked by ${chalk.cyan(eventSource)}`; logger.log( chalk.grey( - `${debugRequestId} REQUEST ${env.AWS_LAMBDA_FUNCTION_NAME} [${debugSrcPath}:${debugSrcHandler}]${eventSourceDesc}` + `${context.awsRequestId} REQUEST ${chalk.cyan( + env.AWS_LAMBDA_FUNCTION_NAME + )} [${debugSrcPath}/${debugSrcHandler}]${eventSourceDesc}` ) ); logger.debug(chalk.grey(JSON.stringify(event))); @@ -216,7 +220,9 @@ function onMessage(message) { // Handle timeout: do not send a response, let stub timeout if (lambdaResponse.type === "timeout") { logger.log( - chalk.grey(`${debugRequestId} ${chalk.red("ERROR")} Lambda timed out.`) + chalk.grey( + `${context.awsRequestId} ${chalk.red("ERROR")} Lambda timed out.` + ) ); return; } @@ -225,11 +231,13 @@ function onMessage(message) { if (lambdaResponse.type === "success") { logger.log( chalk.grey( - `${debugRequestId} RESPONSE ${JSON.stringify(lambdaResponse.data)}` + `${context.awsRequestId} RESPONSE ${JSON.stringify( + lambdaResponse.data + )}` ) ); } else if (lambdaResponse.type === "failure") { - logger.log(chalk.grey(`${debugRequestId} ${chalk.red("ERROR")}`)); + logger.log(chalk.grey(`${context.awsRequestId} ${chalk.red("ERROR")}`)); console.log(lambdaResponse.error); } ws.send( From 8a9301c95309a59cb6913b515ef4724e185c6f28 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 25 Nov 2020 22:03:24 -0500 Subject: [PATCH 144/481] Fixing copy --- packages/cli/scripts/start.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index a4403d7ef4..c1c15a393d 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -83,14 +83,14 @@ function onMessage(message) { if (data.action === "failedToSendResponseDueToStubDisconnected") { logger.error( chalk.grey(debugRequestId) + - " Failed to send response because the Lambda function is not disconnected" + " Failed to send a response because the Lambda function is disconnected" ); return; } if (data.action === "failedToSendResponseDueToUnknown") { logger.error( chalk.grey(debugRequestId) + - " Failed to send response to the Lambda function" + " Failed to send a response to the Lambda function" ); return; } @@ -221,7 +221,7 @@ function onMessage(message) { if (lambdaResponse.type === "timeout") { logger.log( chalk.grey( - `${context.awsRequestId} ${chalk.red("ERROR")} Lambda timed out.` + `${context.awsRequestId} ${chalk.red("ERROR")} Lambda timed out` ) ); return; @@ -237,14 +237,15 @@ function onMessage(message) { ) ); } else if (lambdaResponse.type === "failure") { - logger.log(chalk.grey(`${context.awsRequestId} ${chalk.red("ERROR")}`)); - console.log(lambdaResponse.error); + logger.error( + chalk.grey(context.awsRequestId) + ` ${lambdaResponse.error}` + ); } ws.send( JSON.stringify({ - action: "newResponse", debugRequestId, stubConnectionId, + action: "newResponse", responseData: lambdaResponse.data, responseError: lambdaResponse.error, }) From 0a586f786aca7e7d498a80c4dda680159831f959 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 25 Nov 2020 22:08:37 -0500 Subject: [PATCH 145/481] v1.0.0-alpha.0 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 6 +++--- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lerna.json b/lerna.json index 722219b6b6..3575b02da4 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.4.3" + "version": "1.0.0-alpha.0" } diff --git a/packages/cli/package.json b/packages/cli/package.json index b197654dca..610438b07f 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.4.3", + "version": "1.0.0-alpha.0", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -46,8 +46,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^0.4.3", - "@serverless-stack/resources": "^0.4.3", + "@serverless-stack/core": "^1.0.0-alpha.0", + "@serverless-stack/resources": "^1.0.0-alpha.0", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/core/package.json b/packages/core/package.json index fa8050bf14..139a69e900 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.4.3", + "version": "1.0.0-alpha.0", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 43bf146fef..42df7f66cf 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.4.3", + "version": "1.0.0-alpha.0", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 31cad64494..fe7d028200 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.4.3", + "version": "1.0.0-alpha.0", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", @@ -25,9 +25,9 @@ "access": "public" }, "dependencies": { - "@aws-cdk/core": "1.74.0", "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-lambda-nodejs": "1.74.0" + "@aws-cdk/aws-lambda-nodejs": "1.74.0", + "@aws-cdk/core": "1.74.0" }, "devDependencies": { "@types/node": "^14.0.27", From 201ea7a532273a165ed957a43740a60e1c004977 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 25 Nov 2020 22:14:38 -0500 Subject: [PATCH 146/481] v1.0.0-alpha.0 --- packages/cli/package.json | 3 ++- packages/core/package.json | 3 ++- packages/create-serverless-stack/package.json | 3 ++- packages/resources/package.json | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index 610438b07f..2cac55271b 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -67,5 +67,6 @@ }, "devDependencies": { "replace-in-file": "^6.1.0" - } + }, + "gitHead": "0a586f786aca7e7d498a80c4dda680159831f959" } diff --git a/packages/core/package.json b/packages/core/package.json index 139a69e900..7d8ca3da83 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -21,5 +21,6 @@ "aws-sdk": "^2.761.0", "chalk": "^4.1.0", "sst-cdk": "1.74.0-rc.6" - } + }, + "gitHead": "0a586f786aca7e7d498a80c4dda680159831f959" } diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 42df7f66cf..1994533bfe 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -27,5 +27,6 @@ "chalk": "^4.1.0", "cross-spawn": "^7.0.3", "yargs": "^15.4.1" - } + }, + "gitHead": "0a586f786aca7e7d498a80c4dda680159831f959" } diff --git a/packages/resources/package.json b/packages/resources/package.json index fe7d028200..935c62e665 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -32,5 +32,6 @@ "devDependencies": { "@types/node": "^14.0.27", "typescript": "^3.9.7" - } + }, + "gitHead": "0a586f786aca7e7d498a80c4dda680159831f959" } From cdad0f91a6452ab65ae7a2a2d8ab0464ab3dbd35 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 25 Nov 2020 22:16:05 -0500 Subject: [PATCH 147/481] v1.0.0-alpha.1 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lerna.json b/lerna.json index 3575b02da4..bee8590a6c 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "1.0.0-alpha.0" + "version": "1.0.0-alpha.1" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 2cac55271b..92e6800578 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "1.0.0-alpha.0", + "version": "1.0.0-alpha.1", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -46,8 +46,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^1.0.0-alpha.0", - "@serverless-stack/resources": "^1.0.0-alpha.0", + "@serverless-stack/core": "^1.0.0-alpha.1", + "@serverless-stack/resources": "^1.0.0-alpha.1", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/core/package.json b/packages/core/package.json index 7d8ca3da83..5aaeb34fe8 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "1.0.0-alpha.0", + "version": "1.0.0-alpha.1", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 1994533bfe..b7fb30260e 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "1.0.0-alpha.0", + "version": "1.0.0-alpha.1", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 935c62e665..7ee0daaf2e 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "1.0.0-alpha.0", + "version": "1.0.0-alpha.1", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 418710f046b71e6d12740dd990f2244416f2c769 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 25 Nov 2020 23:14:44 -0500 Subject: [PATCH 148/481] sst start: generate stub.zip and store in dist folder --- packages/resources/package.json | 2 +- packages/resources/src/Function.ts | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/resources/package.json b/packages/resources/package.json index 31cad64494..cce3656605 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -7,7 +7,7 @@ "types": "dist/index.d.ts", "scripts": { "watch": "tsc --watch --rootDir src --outDir dist", - "build": "tsc --rootDir src --outDir dist && cd lambda/stub && yarn", + "build": "tsc --rootDir src --outDir dist && cd lambda/stub && yarn && zip -r ../../dist/stub.zip .", "clean": "rm -rf dist", "prepare": "./bin/aws-cdk-version-check.js && npm run build" }, diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index 9647296e6b..1c5000b07f 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -34,7 +34,9 @@ export class Function extends lambda.Function { if (root.local) { super(scope, id, { ...props, - code: lambda.Code.fromAsset(path.resolve(__dirname, "../lambda/stub")), + code: lambda.Code.fromAsset( + path.resolve(__dirname, "../dist/stub.zip") + ), handler: "index.main", environment: { ...(props.environment || {}), From 176300145739e5f3b593b65fc854a4dbbb9cb85d Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 25 Nov 2020 23:20:30 -0500 Subject: [PATCH 149/481] v1.0.0-alpha.2 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lerna.json b/lerna.json index bee8590a6c..38c134e0fa 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "1.0.0-alpha.1" + "version": "1.0.0-alpha.2" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 92e6800578..ee65735902 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "1.0.0-alpha.1", + "version": "1.0.0-alpha.2", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -46,8 +46,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^1.0.0-alpha.1", - "@serverless-stack/resources": "^1.0.0-alpha.1", + "@serverless-stack/core": "^1.0.0-alpha.2", + "@serverless-stack/resources": "^1.0.0-alpha.2", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/core/package.json b/packages/core/package.json index 5aaeb34fe8..dc11c4027e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "1.0.0-alpha.1", + "version": "1.0.0-alpha.2", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index b7fb30260e..906b53a461 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "1.0.0-alpha.1", + "version": "1.0.0-alpha.2", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index d839507533..be4ea559f4 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "1.0.0-alpha.1", + "version": "1.0.0-alpha.2", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 8389a0808bf21b0b685c3959dc39aec2281d085f Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 25 Nov 2020 23:22:39 -0500 Subject: [PATCH 150/481] Fixing cdk versions script --- packages/cli/bin/sync-cdk-version.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/cli/bin/sync-cdk-version.js b/packages/cli/bin/sync-cdk-version.js index 378504351c..1127c2d898 100755 --- a/packages/cli/bin/sync-cdk-version.js +++ b/packages/cli/bin/sync-cdk-version.js @@ -9,16 +9,14 @@ const path = require("path"); const replace = require("replace-in-file"); -const sstCdkVersion = require(path.join( - __dirname, - "../../../core/package.json" -)).dependencies["sst-cdk"]; +const sstCdkVersion = require(path.join(__dirname, "../../core/package.json")) + .dependencies["sst-cdk"]; const cdkVersion = sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; /** * Check for cdk command */ -const packageJson = require(path.join(__dirname, "../../package.json")); +const packageJson = require(path.join(__dirname, "../package.json")); if (packageJson.dependencies["aws-cdk"] !== cdkVersion) { console.log( From fe1437a252ba94a1b3cadb5dfaf7c7f9add60663 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 4 Dec 2020 14:18:37 -0500 Subject: [PATCH 151/481] Using CLI args instead of environment variables to handle Windows --- packages/cli/assets/debug-stack/bin/index.js | 6 +++--- packages/cli/scripts/start.js | 8 ++------ 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/packages/cli/assets/debug-stack/bin/index.js b/packages/cli/assets/debug-stack/bin/index.js index 0458ba0192..13e06d174a 100644 --- a/packages/cli/assets/debug-stack/bin/index.js +++ b/packages/cli/assets/debug-stack/bin/index.js @@ -3,9 +3,9 @@ const cdk = require("@aws-cdk/core"); const { DebugStack } = require("../lib/DebugStack"); -const stage = process.env.SST_DEBUG_STAGE; -const region = process.env.SST_DEBUG_REGION; -const stackName = process.env.SST_DEBUG_STACK; +const stage = process.argv[3]; +const region = process.argv[4]; +const stackName = process.argv[2]; const app = new cdk.App(); diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index c1c15a393d..153a5e7720 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -269,18 +269,14 @@ module.exports = async function (argv, cliInfo) { logger.log(" Deploying debug stack"); logger.log("======================="); logger.log(""); - const debugAppEnvs = [ - `SST_DEBUG_STACK=${stackName}`, - `SST_DEBUG_STAGE=${config.stage}`, - `SST_DEBUG_REGION=${config.region}`, - ]; + const debugAppArgs = [stackName, config.stage, config.region]; // Note: When deploying the debug stack, the current working directory is user's app. // Setting the current working directory to debug stack cdk app directory to allow // Lambda Function construct be able to reference code with relative path. process.chdir(path.join(paths.ownPath, "assets", "debug-stack")); const debugStackRet = await cdkDeploy({ ...cliInfo.cdkOptions, - app: `${debugAppEnvs.join(" ")} node bin/index.js`, + app: `node bin/index.js ${debugAppArgs.join(" ")}`, output: "cdk.out", }); // Note: Restore working directory From 002a0b16f0ef2a051c39a1323f4d82595a8927e8 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 4 Dec 2020 14:20:03 -0500 Subject: [PATCH 152/481] v1.0.0-alpha.3 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lerna.json b/lerna.json index 38c134e0fa..97119db9a0 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "1.0.0-alpha.2" + "version": "1.0.0-alpha.3" } diff --git a/packages/cli/package.json b/packages/cli/package.json index ee65735902..6ca56ee970 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "1.0.0-alpha.2", + "version": "1.0.0-alpha.3", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -46,8 +46,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^1.0.0-alpha.2", - "@serverless-stack/resources": "^1.0.0-alpha.2", + "@serverless-stack/core": "^1.0.0-alpha.3", + "@serverless-stack/resources": "^1.0.0-alpha.3", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/core/package.json b/packages/core/package.json index dc11c4027e..917b83aebb 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "1.0.0-alpha.2", + "version": "1.0.0-alpha.3", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 906b53a461..4efb18905a 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "1.0.0-alpha.2", + "version": "1.0.0-alpha.3", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index be4ea559f4..6d825a192f 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "1.0.0-alpha.2", + "version": "1.0.0-alpha.3", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From fb13b776c9fc8cb743f5da53f3a19c7dcbabe955 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 18 Dec 2020 14:21:36 -0500 Subject: [PATCH 153/481] Updating CDK --- package.json | 2 +- packages/cli/package.json | 2 +- packages/cli/test/base-ts/package.json | 6 +- packages/cli/test/base-ts/yarn.lock | 327 +- packages/cli/test/base/package.json | 6 +- packages/cli/test/base/yarn.lock | 676 ++-- packages/cli/test/config/package.json | 2 +- packages/cli/test/config/yarn.lock | 601 +-- packages/cli/test/context/package.json | 2 +- packages/cli/test/context/yarn.lock | 601 +-- packages/cli/test/jest-ts/package.json | 12 +- packages/cli/test/jest-ts/yarn.lock | 3490 +++++++++-------- packages/cli/test/jest/package.json | 6 +- packages/cli/test/jest/yarn.lock | 768 ++-- .../cli/test/stack-no-prefix/package.json | 2 +- packages/cli/test/stack-no-prefix/yarn.lock | 98 +- packages/core/package.json | 2 +- packages/resources/package.json | 2 +- yarn.lock | 619 +-- 19 files changed, 3982 insertions(+), 3242 deletions(-) diff --git a/package.json b/package.json index ab7139a723..bb9c1f17fe 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "lint": "eslint . --fix --ext .js,.ts", "npm-publish": "lerna publish --force-publish", "clean": "lerna run clean", - "postinstall": "lerna run prepare --scope='{@serverless-stack/resources,create-serverless-stack}'", + "postinstall": "lerna run prepare --scope='{@serverless-stack/resources,@serverless-stack/cli,create-serverless-stack}'", "test": "lerna run test --stream --scope=@serverless-stack/cli" }, "devDependencies": { diff --git a/packages/cli/package.json b/packages/cli/package.json index 92271ae66a..cf83a65a92 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -47,7 +47,7 @@ "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", "@typescript-eslint/parser": "^3.9.1", - "aws-cdk": "1.61.0", + "aws-cdk": "1.79.0", "chalk": "^4.1.0", "core-js": "^3.6.5", "cross-spawn": "^7.0.3", diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index 519628d1ba..44f2fb44ac 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -9,12 +9,12 @@ "keywords": [], "author": "", "dependencies": { - "@aws-cdk/aws-s3": "1.61.0", - "@aws-cdk/core": "1.61.0", + "@aws-cdk/aws-s3": "1.79.0", + "@aws-cdk/core": "1.79.0", "@serverless-stack/resources": "../../../resources" }, "license": "ISC", "devDependencies": { - "@aws-cdk/assert": "1.61.0" + "@aws-cdk/assert": "1.79.0" } } diff --git a/packages/cli/test/base-ts/yarn.lock b/packages/cli/test/base-ts/yarn.lock index 8f3ca49b15..c9d90256d7 100644 --- a/packages/cli/test/base-ts/yarn.lock +++ b/packages/cli/test/base-ts/yarn.lock @@ -2,142 +2,146 @@ # yarn lockfile v1 -"@aws-cdk/assert@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.61.0.tgz#c1dbbf71fd64beb067a6e6237e03686319acaaa7" - integrity sha512-avvDVpyd8zLMT0HEW1K2ngP5U8CHu+BtPinUkLpLXVJ+Cr5K12plnk84+BOWe1NhM9/bqC4b1KA0c6MzIzgREA== +"@aws-cdk/assert@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.79.0.tgz#c30e904bff8dbabcc3ca6ee01904da1fc7a980e7" + integrity sha512-wCiMyxhtUz82blUlSnfoqpHdSjgFOkjpunjgxT2aG5Y6RTN0ExOOm9pdKDdXnul0zml6ZvfOL51wDG0Udg7zFg== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cloudformation-diff" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-events@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" - integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cloudformation-diff" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-events@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.79.0.tgz#fa676d751de3aceb4bb408f00dab6e085ca90ea6" + integrity sha512-9fyvKqSC/Sa5cVe2SyvTrTBNw8MuZ8w29JX6O9McMff1i50ZMpdSFh/r/Hq4ImfcoRJvZcyXDYJmTUI8PYR6Fg== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-iam@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" - integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-iam@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.79.0.tgz#456f0cc824c6e248378fcddfecb49637d7656089" + integrity sha512-lGgmOpdE2f05vQ3oT3pWlybTNb/PQcqkbdiBfvBPRYrg5p3lCGBDFSI3bv7Bjvl7lHhFRnxHnRb4CJRAXcUQqw== dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-kms@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" - integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== + "@aws-cdk/core" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-kms@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.79.0.tgz#7c358ecd3823a7f965a7a091929c0afbc472d4d5" + integrity sha512-vYZUYO9GdOaalkVdJ8/7/f9KzCQh1XtU+MsKgxvXbjhLcjpt1mhPuxs0T+7fNuXbW8YVz1d6Y+BNjv4lEHz2Jw== dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" - integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.79.0.tgz#2de74f669d9cd058679c98c701f640412e2de3da" + integrity sha512-hJM+5jZWoOS4kJ8kXLLOVwjTkWY/BvpkOxuZSLcQV3eq2RFUCwtakx+NTnu+M98eezzme9wAXnKzDFsBcocuHQ== dependencies: - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/cfnspec@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.61.0.tgz#69e998ab83c0a478b76e1c5deb8484171dfd95f9" - integrity sha512-Ss5N3unY6iVh9SjYAYvTyvhdb7Kaz6dVFeV8K68UGewiFcHpC5tQi3YmlVBw3HCgKoRt20emiHAfmdfeGO/PUQ== + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/cfnspec@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.79.0.tgz#b5fe241290f20ed1a3911ba8f0a9807aab0ec749" + integrity sha512-rbBhox7hzXPXk2n+1BDjsmiz/0W9ZHv3NeCKiq94WfHW6Jj4mSjtGs7ZUBFq8JkkgYVsE9ktH1634wt9A9fbRg== dependencies: md5 "^2.3.0" -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== +"@aws-cdk/cloud-assembly-schema@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.79.0.tgz#e089ed386f47b4e24e12e398b66d1df7894e5109" + integrity sha512-n2ARtOXIUq3FdJ1EBuHzsM0DQau6ZwHprPhpk1xc5bv21s7D5X5ECe06eC0K5xC5ZyfC13BDWu1f+xFh+krnYA== dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" + jsonschema "^1.4.0" + semver "^7.3.2" -"@aws-cdk/cloudformation-diff@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.61.0.tgz#8acb549fd1dd819aa61dfed47e011b44827045a8" - integrity sha512-TrrmywhYkXxGNTmDd1k2biJMVtEvb0QcbZ/IGM6biMXIJ+wsjw/n5snvwciQ8/PHZmsUYk67qulGdso1rpy06Q== +"@aws-cdk/cloudformation-diff@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.79.0.tgz#e26f2eaf93b26df14240c8704e056790aa0abe9b" + integrity sha512-GsX8Br7E0/2W2ugntO4zXodbApVi2C+AP/6QtTX6fasZbgZSwe8gjiXYPQ6EvtgjlWnYxPTn6vHRlb53vDFzMg== dependencies: - "@aws-cdk/cfnspec" "1.61.0" + "@aws-cdk/cfnspec" "1.79.0" colors "^1.4.0" - diff "^4.0.2" + diff "^5.0.0" fast-deep-equal "^3.1.3" string-width "^4.2.0" - table "^5.4.6" + table "^6.0.4" -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== +"@aws-cdk/core@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.79.0.tgz#164b2f01877259eeb1ba16617be103522ae934d6" + integrity sha512-I+2GbQfbPy6TewnGbviE1W8cUhgBEA1mQLYm5gBj/Rzix1tCyaNvfYsBU3ipg3jIATpHsg1CzUq0zrumUnmnTg== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + "@balena/dockerignore" "^1.0.2" + constructs "^3.2.0" fs-extra "^9.0.1" + ignore "^5.1.8" minimatch "^3.0.4" -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== +"@aws-cdk/cx-api@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.79.0.tgz#c9770fdd9b14a64e7ef350aa020969902b8a182d" + integrity sha512-ymQOqHcPzYhrcQ4swMgw5JzAaOm+PehH1cepsxi/Wq2zNOXkyN9o6Hw6l+eDpezFvNIKFy4mMAo6FR9xRCUiow== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + semver "^7.3.2" -"@aws-cdk/region-info@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" - integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== +"@aws-cdk/region-info@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.79.0.tgz#2a47339ca2dd48b9ecae46e985c8c3dcb83de577" + integrity sha512-klnXCc1Cd/krE4VOXJ1Blvey8ucPRzuwgGacPsCV2ugMSlaJSbdGqKzTUNxcK2o8g9PaEuJ5lNjfwqqyvp571g== + +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== "@serverless-stack/resources@../../../resources": - version "0.1.3" + version "0.4.3" dependencies: - "@aws-cdk/core" "1.61.0" + "@aws-cdk/core" "1.79.0" -ajv@^6.10.2: - version "6.12.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" - integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== -ansi-styles@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== +ansi-styles@^4.0.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 "^1.9.0" + color-convert "^2.0.1" -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== at-least-node@^1.0.0: version "1.0.0" @@ -162,17 +166,17 @@ charenc@0.0.2: resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== +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.3" + color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +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== colors@^1.4.0: version "1.4.0" @@ -184,25 +188,20 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== +constructs@^3.2.0: + version "3.2.74" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.74.tgz#e5650eed2451ca264178a6798c343e3b63fa14fe" + integrity sha512-kINDYW5Xnv/FY+4fbg3G34jvS/kfZ0Th2j/nPPG08peUkXExkY6CB/tarmYmkLIsHGI25x83pQHGDoFl7L8JLA== crypt@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= -diff@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +diff@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== emoji-regex@^8.0.0: version "8.0.0" @@ -234,16 +233,16 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +ignore@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - 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" @@ -263,16 +262,23 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== +jsonschema@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== -lodash@^4.17.14: +lodash@^4.17.20: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== +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" + md5@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" @@ -294,28 +300,21 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -semver@^7.2.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== +semver@^7.3.2: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + lru-cache "^6.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" string-width@^4.2.0: version "4.2.0" @@ -326,13 +325,6 @@ string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -340,15 +332,15 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" -table@^5.4.6: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== +table@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.4.tgz#c523dd182177e926c723eb20e1b341238188aa0d" + integrity sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw== dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" + ajv "^6.12.4" + lodash "^4.17.20" + slice-ansi "^4.0.0" + string-width "^4.2.0" universalify@^1.0.0: version "1.0.0" @@ -361,3 +353,8 @@ uri-js@^4.2.2: integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== dependencies: punycode "^2.1.0" + +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== diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index b22cc68627..7b867828dd 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -13,9 +13,9 @@ "keywords": [], "author": "", "dependencies": { - "@aws-cdk/aws-cognito": "1.61.0", - "@aws-cdk/aws-dynamodb": "1.61.0", - "@aws-cdk/core": "1.61.0", + "@aws-cdk/aws-cognito": "1.79.0", + "@aws-cdk/aws-dynamodb": "1.79.0", + "@aws-cdk/core": "1.79.0", "@serverless-stack/resources": "../../../resources" }, "license": "ISC" diff --git a/packages/cli/test/base/yarn.lock b/packages/cli/test/base/yarn.lock index 5fc447868c..27e00a95f9 100644 --- a/packages/cli/test/base/yarn.lock +++ b/packages/cli/test/base/yarn.lock @@ -2,309 +2,349 @@ # yarn lockfile v1 -"@aws-cdk/assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.61.0.tgz#9702ba8ef5b3c45ec47e0530006d63dc0685a5ff" - integrity sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA== - dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-applicationautoscaling@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz#8129984ba0185bbb525fd8ef6328c5c84e51e4e5" - integrity sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-autoscaling-common@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz#9e7f6a8669b36001b846d90fa8cb65d8b4edb27b" - integrity sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-certificatemanager@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.61.0.tgz#2362854c86f7b7f8344aec6dda9e84eb7017acc0" - integrity sha512-sTLmDyh8aER9ovvXuK1Q8Jcs1PY1H0W5Rg2ueCZvCNO5NktGsbt5oYZZiDFyIEtuASuArGp0XjkLP+qtPC6J3w== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-route53" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudformation@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.61.0.tgz#6810e5327aa53b6d73cb337af340db152284aad7" - integrity sha512-e7mti0sWR6Sf4tav36bu379kkG5E33VMPLZaT8RkhXkIl97c1OaGHVx5G1Oe5DiHka08c+PA6da8ahkrR1wSkQ== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudwatch@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz#3c0171ca76d086da424c1b4148a53c4d68dd885a" - integrity sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-codeguruprofiler@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz#1ace4c61a4a7b916f4dbe28070b5b914949e6f06" - integrity sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - -"@aws-cdk/aws-cognito@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.61.0.tgz#0fd460e4bfae70d335c02befd4f997de9f9d8ded" - integrity sha512-MiZxDVdStTX1uD6NOpeMoKtL/DMyYONG6Hh8t851bLgxjZDQw8W7ZCWTLBjDIymt7m/seFNF3bWdYD883S17fQ== - dependencies: - "@aws-cdk/aws-certificatemanager" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/custom-resources" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-dynamodb@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.61.0.tgz#3d9b1ffd6eb965152a2456de1b08625d3f3ee907" - integrity sha512-Qd87xJNTjCRBQ//H4WA6Lif3VuA9QuyKyterlmTGnmrUsAqubkKtxu/lLvMp0gQb9LzjQ5Hn9238v1s8rDBDlw== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/custom-resources" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ec2@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz#d39b1f5356c57089b963bbe4644adc02fd12a4bf" - integrity sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-ssm" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-efs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz#c4d66d0d928c01c8018c1c8bc75a1c5097d649ce" - integrity sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg== - dependencies: - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-events@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" - integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-iam@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" - integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== - dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-kms@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" - integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-lambda@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz#65b2fb456f6c2d0566401bd3d265f5bae47d6346" - integrity sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-codeguruprofiler" "1.61.0" - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-efs" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-logs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz#430bb5fc87ec606416ffb0869f04754185092a21" - integrity sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-route53@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.61.0.tgz#f4b50ba975f687dcbc763b1cb98eaf0c6ac22b36" - integrity sha512-VKfEtqEMXXPBel3/QQMET0jmw7qyAXWOywzSPQ1/8J6th2q9hMzLQOr6fkuf1rTdVMNjLXhHqXq/W+JinfCUqw== - dependencies: - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3-assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz#8512ac0e16818bc78eff010d15d6cc99a7d8fccf" - integrity sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA== - dependencies: - "@aws-cdk/assets" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" - integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== - dependencies: - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sns@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.61.0.tgz#c82f9b224b7ebf3e48cd9433456156e5d3f1df89" - integrity sha512-jmJmZXidJAJTg4lPnxMm26QR3ovMYb/89NBWnIRwGdVGcZ7nrWUkC0JNPQMbP+EvUFdh/9xdFVP4JvvzZzoy0w== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sqs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz#b2d1d7a5d27d36d1580a3cb500daf417037da492" - integrity sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ssm@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz#229308cfce757f8b3f75d12bf276ce4f8042076f" - integrity sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - fs-extra "^9.0.1" +"@aws-cdk/assets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.79.0.tgz#e97548a20e7fe9af8ebda8639ff275058211b128" + integrity sha512-h4FVseJK2lZ+FB8reFm0V37x0HEyg4mD8DGTb0akIz2A3U0ltmML+PN8EPANxLpSDOPYg2OLNAgPw5MOqXNC5A== + dependencies: + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-applicationautoscaling@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.79.0.tgz#1211274a8c4a2a15e7a97cacc096eb775b9c207d" + integrity sha512-ctgfkgKorVui7xF01U9djVCnhMrtvnSl0B7LUAnI6gy6uFrzpg9rfaW845c8O+6211OP2v9zrBl06GGPeACkCQ== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-autoscaling-common@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.79.0.tgz#aa0516cafe8a5d9cf9ca642d05cf8fa0ce5fb79a" + integrity sha512-ZgprhHWRVvBz8Vh0sXYGdRiUm7cga4IzwHftuVu4MUWYu3IlQSm92tj9wv7dfttIT8v4z5idXsDzu3Og91lcjA== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-certificatemanager@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.79.0.tgz#7989b7553c059d0d96814832badaaf49b32b3d87" + integrity sha512-8uBXTQXunDZlO2hvMZTnPr3tLM8ayPu/VuMX/Uh1deRf/UmlHyplT/ePwKoyRpeZcHfrGcTTVoQgli2saQxCtg== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-route53" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudformation@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.79.0.tgz#9f15101c3e1230d2ee1111d0e9ea9cade851b8ee" + integrity sha512-Rayo5xGbfE1gtsgXDcxun1vJJRDbA7VPJtfuMdh0cikpTeTA0/iMfpmg96Rgg+Ry/cxkHV8AFQAU0Va6uHiR2w== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudwatch@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.79.0.tgz#3bbeb41369d250470e87adc7e78d9f3d12a442ff" + integrity sha512-lbcrfUwI/9rvFCMyRa7g8DskqAXThDVrRM4SAdHAX/MCV5cBcb3GA1HzFfnILsq5RXPwoC4WT7hhxMibM4A0iA== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-codeguruprofiler@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.79.0.tgz#5aee986accca91b966e1a91ddc69d75d6c15721e" + integrity sha512-DF7MCJOCSGy9RV6X1ebhHOIggXOsJ21pQUs0mAClTt3/DPNEr0EQuiN30VhaiPxgUnbN3FTppLSLUzjIJSWbQA== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cognito@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.79.0.tgz#b9263085c64415205ec07959ef34db47bbc01d66" + integrity sha512-m/Xu9VFXetB5DEtxM5irN0NsZK0p1RNh7WgIIoRoym1nQ8pwPvBegQTMaRVgNBnINSyyUtV/GtpArayey5V5Sg== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/custom-resources" "1.79.0" + constructs "^3.2.0" + punycode "^2.1.1" + +"@aws-cdk/aws-dynamodb@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.79.0.tgz#a7c03b3d28dddcb7430fbc3ef813dbb94796b214" + integrity sha512-4JYtuN67hdmyAVd0vcG8QkfxBf8RA4hv5sMwFRmxG0GuN2/iTa6Acp2XQstVk/nK8bE3BUioRRRNRK1/5amlDw== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/custom-resources" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ec2@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.79.0.tgz#9c1ae84f374980f2456acdc57985a6612c1ae897" + integrity sha512-A2pbynk5o18gKeCy/epMiaD9R4OKrXlWzaqAOvUlHOom+SkxIyZMcALdxgU26nCty0DxGfgQiNHWTgNttLuRJQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/aws-ssm" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ecr-assets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.79.0.tgz#1367783f50fc0974ee3f1f99e881b8682ac91221" + integrity sha512-pM6X3Q+Uybq9RlX5DSAKfLygyZqYA9eNFvQKmTtuiwt9A+SDAonHrv6xT9EvFQaPHpFnxESpBiuspJTr9hZggQ== + dependencies: + "@aws-cdk/assets" "1.79.0" + "@aws-cdk/aws-ecr" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" minimatch "^3.0.4" -"@aws-cdk/custom-resources@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.61.0.tgz#03749f4122e46504fd1b3b3b9a11aa3578f269bf" - integrity sha512-etnHE7A0+J5w1L/m+KxEbPQ7LgtVYvEUV6naqRp5uIsTBaJ9sCQ+q43Y3Fj+g3NMigm8C2fKg5FmiFE6kiymDQ== +"@aws-cdk/aws-ecr@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr/-/aws-ecr-1.79.0.tgz#2257475e7a8ef103e9f9f7c7eff389430b4494e3" + integrity sha512-ZidVw6sdwNvMp+y75aH5k4IFMiIDCgpJ11d7tkSk1WKwoVu/pU/ZYLih/clTvFwzqzmh2A63rIyeC4+t5ziAvQ== + dependencies: + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-efs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.79.0.tgz#429163c5334977ea4d63fec70b8f076dc8432647" + integrity sha512-iWjyRFKMIvf1tcwFhwcHaLhmLFeC+iknE36t1UvRFxcBV4K8mrHxkXCsJzqZTHpaAFP/LU0pFX04o03508NRWQ== + dependencies: + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-events@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.79.0.tgz#fa676d751de3aceb4bb408f00dab6e085ca90ea6" + integrity sha512-9fyvKqSC/Sa5cVe2SyvTrTBNw8MuZ8w29JX6O9McMff1i50ZMpdSFh/r/Hq4ImfcoRJvZcyXDYJmTUI8PYR6Fg== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-iam@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.79.0.tgz#456f0cc824c6e248378fcddfecb49637d7656089" + integrity sha512-lGgmOpdE2f05vQ3oT3pWlybTNb/PQcqkbdiBfvBPRYrg5p3lCGBDFSI3bv7Bjvl7lHhFRnxHnRb4CJRAXcUQqw== + dependencies: + "@aws-cdk/core" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-kms@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.79.0.tgz#7c358ecd3823a7f965a7a091929c0afbc472d4d5" + integrity sha512-vYZUYO9GdOaalkVdJ8/7/f9KzCQh1XtU+MsKgxvXbjhLcjpt1mhPuxs0T+7fNuXbW8YVz1d6Y+BNjv4lEHz2Jw== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.79.0.tgz#dfdfd699d376d79a04e399a023b126e2904f5117" + integrity sha512-K6A0nnYRO5MGq+0UdAXk1DRcOELWSPri4f6SNaWu0zhOEBKSAzcVRTJi/cNDs5VniGbGik4/3C5Hd6+8bp5nxA== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-codeguruprofiler" "1.79.0" + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-ecr" "1.79.0" + "@aws-cdk/aws-ecr-assets" "1.79.0" + "@aws-cdk/aws-efs" "1.79.0" + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/aws-sqs" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-logs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.79.0.tgz#b7ac08de2e1c3872a6bdf49488d92bf6b7425d55" + integrity sha512-J3iYGun//JsqpMl75/b6c+yxA5nY+Dxn0s72TA/BBYzaU4wI2NohwVaqe2X4HIuHniRBVVHBfJ36B3GMKdi4cQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-route53@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.79.0.tgz#877e568089f397989f0be59e7eb57742e9f03399" + integrity sha512-IJ32fcC6l1aKhI46wGH7HMUBRMQi8R8Cy9re3kmY4cVdAAfh8UJhIdr8jpaLs2iU0mrJPc4R0tHiCka4aNo2dQ== + dependencies: + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/custom-resources" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3-assets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.79.0.tgz#9351a396125a4a24227e071e29228c3ff9710d0b" + integrity sha512-P5ktD44LadqqX86IO/5q+cc38BsEeEaUBVCtymagCqYgZvDnkicuSMulcrbMefxUgQ6GLy+F7FuI4o9DHGb0nA== + dependencies: + "@aws-cdk/assets" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.79.0.tgz#2de74f669d9cd058679c98c701f640412e2de3da" + integrity sha512-hJM+5jZWoOS4kJ8kXLLOVwjTkWY/BvpkOxuZSLcQV3eq2RFUCwtakx+NTnu+M98eezzme9wAXnKzDFsBcocuHQ== + dependencies: + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sns@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.79.0.tgz#e5ebfa22f344e8eaab29045e1e19b78c364d5228" + integrity sha512-Kmmj0A4anar8JUk8+SZZVJqyqMfsu+9jCMhU3AkKkfpHsnDTj+qz4aPKH+36XIijCQa9A55pjgy5v+k/8WJ81A== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-sqs" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sqs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.79.0.tgz#237f16f8e18ca99e65d2909c91a7815022fa88d0" + integrity sha512-+rWIIHvygEwKmI2hyBXmoYo2sATpwzJw604Bp7stTQKcfp43vls5oq4SKjt87Gld2BO4cavF/ZCaEJO3pXMXyg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ssm@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.79.0.tgz#0731a8681b072e720d430365fb7000c8e313a3f9" + integrity sha512-92DAyXS7sZa58LMDz9Or3IlmjgS1etHCBAHM5ombbKOFFwkBdd7A41y2QNXmtv2b61yJYcyetkLkDtmjEwNMaw== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/cloud-assembly-schema@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.79.0.tgz#e089ed386f47b4e24e12e398b66d1df7894e5109" + integrity sha512-n2ARtOXIUq3FdJ1EBuHzsM0DQau6ZwHprPhpk1xc5bv21s7D5X5ECe06eC0K5xC5ZyfC13BDWu1f+xFh+krnYA== + dependencies: + jsonschema "^1.4.0" + semver "^7.3.2" + +"@aws-cdk/core@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.79.0.tgz#164b2f01877259eeb1ba16617be103522ae934d6" + integrity sha512-I+2GbQfbPy6TewnGbviE1W8cUhgBEA1mQLYm5gBj/Rzix1tCyaNvfYsBU3ipg3jIATpHsg1CzUq0zrumUnmnTg== dependencies: - "@aws-cdk/aws-cloudformation" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + "@balena/dockerignore" "^1.0.2" + constructs "^3.2.0" + fs-extra "^9.0.1" + ignore "^5.1.8" + minimatch "^3.0.4" -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== +"@aws-cdk/custom-resources@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.79.0.tgz#2b68ee4e03a7d517693d0009e8380c045b968e90" + integrity sha512-+F4dpo/vju7kfNnajw9Fl2XwTmVG7qzYZ6weuKtfr0iFDHrBCZ5auGP45u8gHeNebnCdq51TNG9gskQ3ct5Aiw== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" + "@aws-cdk/aws-cloudformation" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/cx-api@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.79.0.tgz#c9770fdd9b14a64e7ef350aa020969902b8a182d" + integrity sha512-ymQOqHcPzYhrcQ4swMgw5JzAaOm+PehH1cepsxi/Wq2zNOXkyN9o6Hw6l+eDpezFvNIKFy4mMAo6FR9xRCUiow== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.79.0" + semver "^7.3.2" + +"@aws-cdk/region-info@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.79.0.tgz#2a47339ca2dd48b9ecae46e985c8c3dcb83de577" + integrity sha512-klnXCc1Cd/krE4VOXJ1Blvey8ucPRzuwgGacPsCV2ugMSlaJSbdGqKzTUNxcK2o8g9PaEuJ5lNjfwqqyvp571g== -"@aws-cdk/region-info@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" - integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== "@serverless-stack/resources@../../../resources": - version "0.1.10" + version "0.4.3" dependencies: - "@aws-cdk/core" "1.61.0" + "@aws-cdk/core" "1.79.0" at-least-node@^1.0.0: version "1.0.0" @@ -329,10 +369,10 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== +constructs@^3.2.0: + version "3.2.74" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.74.tgz#e5650eed2451ca264178a6798c343e3b63fa14fe" + integrity sha512-kINDYW5Xnv/FY+4fbg3G34jvS/kfZ0Th2j/nPPG08peUkXExkY6CB/tarmYmkLIsHGI25x83pQHGDoFl7L8JLA== fs-extra@^9.0.1: version "9.0.1" @@ -349,6 +389,11 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +ignore@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + jsonfile@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" @@ -358,10 +403,17 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== +jsonschema@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== + +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" minimatch@^3.0.4: version "3.0.4" @@ -370,12 +422,24 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -semver@^7.2.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== +punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +semver@^7.3.2: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" universalify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +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== diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index 42af884e7f..72e5b4dc2d 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -12,7 +12,7 @@ "author": "", "dependencies": { "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-dynamodb": "1.61.0" + "@aws-cdk/aws-dynamodb": "1.79.0" }, "license": "ISC" } diff --git a/packages/cli/test/config/yarn.lock b/packages/cli/test/config/yarn.lock index bd5fb40701..49b678899e 100644 --- a/packages/cli/test/config/yarn.lock +++ b/packages/cli/test/config/yarn.lock @@ -2,275 +2,313 @@ # yarn lockfile v1 -"@aws-cdk/assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.61.0.tgz#9702ba8ef5b3c45ec47e0530006d63dc0685a5ff" - integrity sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA== - dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-applicationautoscaling@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz#8129984ba0185bbb525fd8ef6328c5c84e51e4e5" - integrity sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-autoscaling-common@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz#9e7f6a8669b36001b846d90fa8cb65d8b4edb27b" - integrity sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudformation@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.61.0.tgz#6810e5327aa53b6d73cb337af340db152284aad7" - integrity sha512-e7mti0sWR6Sf4tav36bu379kkG5E33VMPLZaT8RkhXkIl97c1OaGHVx5G1Oe5DiHka08c+PA6da8ahkrR1wSkQ== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudwatch@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz#3c0171ca76d086da424c1b4148a53c4d68dd885a" - integrity sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-codeguruprofiler@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz#1ace4c61a4a7b916f4dbe28070b5b914949e6f06" - integrity sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - -"@aws-cdk/aws-dynamodb@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.61.0.tgz#3d9b1ffd6eb965152a2456de1b08625d3f3ee907" - integrity sha512-Qd87xJNTjCRBQ//H4WA6Lif3VuA9QuyKyterlmTGnmrUsAqubkKtxu/lLvMp0gQb9LzjQ5Hn9238v1s8rDBDlw== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/custom-resources" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ec2@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz#d39b1f5356c57089b963bbe4644adc02fd12a4bf" - integrity sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-ssm" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-efs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz#c4d66d0d928c01c8018c1c8bc75a1c5097d649ce" - integrity sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg== - dependencies: - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-events@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" - integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-iam@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" - integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== - dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-kms@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" - integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-lambda@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz#65b2fb456f6c2d0566401bd3d265f5bae47d6346" - integrity sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-codeguruprofiler" "1.61.0" - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-efs" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-logs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz#430bb5fc87ec606416ffb0869f04754185092a21" - integrity sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3-assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz#8512ac0e16818bc78eff010d15d6cc99a7d8fccf" - integrity sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA== - dependencies: - "@aws-cdk/assets" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" - integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== - dependencies: - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sns@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.61.0.tgz#c82f9b224b7ebf3e48cd9433456156e5d3f1df89" - integrity sha512-jmJmZXidJAJTg4lPnxMm26QR3ovMYb/89NBWnIRwGdVGcZ7nrWUkC0JNPQMbP+EvUFdh/9xdFVP4JvvzZzoy0w== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sqs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz#b2d1d7a5d27d36d1580a3cb500daf417037da492" - integrity sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ssm@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz#229308cfce757f8b3f75d12bf276ce4f8042076f" - integrity sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - fs-extra "^9.0.1" +"@aws-cdk/assets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.79.0.tgz#e97548a20e7fe9af8ebda8639ff275058211b128" + integrity sha512-h4FVseJK2lZ+FB8reFm0V37x0HEyg4mD8DGTb0akIz2A3U0ltmML+PN8EPANxLpSDOPYg2OLNAgPw5MOqXNC5A== + dependencies: + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-applicationautoscaling@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.79.0.tgz#1211274a8c4a2a15e7a97cacc096eb775b9c207d" + integrity sha512-ctgfkgKorVui7xF01U9djVCnhMrtvnSl0B7LUAnI6gy6uFrzpg9rfaW845c8O+6211OP2v9zrBl06GGPeACkCQ== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-autoscaling-common@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.79.0.tgz#aa0516cafe8a5d9cf9ca642d05cf8fa0ce5fb79a" + integrity sha512-ZgprhHWRVvBz8Vh0sXYGdRiUm7cga4IzwHftuVu4MUWYu3IlQSm92tj9wv7dfttIT8v4z5idXsDzu3Og91lcjA== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudformation@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.79.0.tgz#9f15101c3e1230d2ee1111d0e9ea9cade851b8ee" + integrity sha512-Rayo5xGbfE1gtsgXDcxun1vJJRDbA7VPJtfuMdh0cikpTeTA0/iMfpmg96Rgg+Ry/cxkHV8AFQAU0Va6uHiR2w== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudwatch@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.79.0.tgz#3bbeb41369d250470e87adc7e78d9f3d12a442ff" + integrity sha512-lbcrfUwI/9rvFCMyRa7g8DskqAXThDVrRM4SAdHAX/MCV5cBcb3GA1HzFfnILsq5RXPwoC4WT7hhxMibM4A0iA== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-codeguruprofiler@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.79.0.tgz#5aee986accca91b966e1a91ddc69d75d6c15721e" + integrity sha512-DF7MCJOCSGy9RV6X1ebhHOIggXOsJ21pQUs0mAClTt3/DPNEr0EQuiN30VhaiPxgUnbN3FTppLSLUzjIJSWbQA== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-dynamodb@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.79.0.tgz#a7c03b3d28dddcb7430fbc3ef813dbb94796b214" + integrity sha512-4JYtuN67hdmyAVd0vcG8QkfxBf8RA4hv5sMwFRmxG0GuN2/iTa6Acp2XQstVk/nK8bE3BUioRRRNRK1/5amlDw== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/custom-resources" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ec2@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.79.0.tgz#9c1ae84f374980f2456acdc57985a6612c1ae897" + integrity sha512-A2pbynk5o18gKeCy/epMiaD9R4OKrXlWzaqAOvUlHOom+SkxIyZMcALdxgU26nCty0DxGfgQiNHWTgNttLuRJQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/aws-ssm" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ecr-assets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.79.0.tgz#1367783f50fc0974ee3f1f99e881b8682ac91221" + integrity sha512-pM6X3Q+Uybq9RlX5DSAKfLygyZqYA9eNFvQKmTtuiwt9A+SDAonHrv6xT9EvFQaPHpFnxESpBiuspJTr9hZggQ== + dependencies: + "@aws-cdk/assets" "1.79.0" + "@aws-cdk/aws-ecr" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" minimatch "^3.0.4" -"@aws-cdk/custom-resources@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.61.0.tgz#03749f4122e46504fd1b3b3b9a11aa3578f269bf" - integrity sha512-etnHE7A0+J5w1L/m+KxEbPQ7LgtVYvEUV6naqRp5uIsTBaJ9sCQ+q43Y3Fj+g3NMigm8C2fKg5FmiFE6kiymDQ== +"@aws-cdk/aws-ecr@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr/-/aws-ecr-1.79.0.tgz#2257475e7a8ef103e9f9f7c7eff389430b4494e3" + integrity sha512-ZidVw6sdwNvMp+y75aH5k4IFMiIDCgpJ11d7tkSk1WKwoVu/pU/ZYLih/clTvFwzqzmh2A63rIyeC4+t5ziAvQ== + dependencies: + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-efs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.79.0.tgz#429163c5334977ea4d63fec70b8f076dc8432647" + integrity sha512-iWjyRFKMIvf1tcwFhwcHaLhmLFeC+iknE36t1UvRFxcBV4K8mrHxkXCsJzqZTHpaAFP/LU0pFX04o03508NRWQ== + dependencies: + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-events@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.79.0.tgz#fa676d751de3aceb4bb408f00dab6e085ca90ea6" + integrity sha512-9fyvKqSC/Sa5cVe2SyvTrTBNw8MuZ8w29JX6O9McMff1i50ZMpdSFh/r/Hq4ImfcoRJvZcyXDYJmTUI8PYR6Fg== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-iam@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.79.0.tgz#456f0cc824c6e248378fcddfecb49637d7656089" + integrity sha512-lGgmOpdE2f05vQ3oT3pWlybTNb/PQcqkbdiBfvBPRYrg5p3lCGBDFSI3bv7Bjvl7lHhFRnxHnRb4CJRAXcUQqw== + dependencies: + "@aws-cdk/core" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-kms@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.79.0.tgz#7c358ecd3823a7f965a7a091929c0afbc472d4d5" + integrity sha512-vYZUYO9GdOaalkVdJ8/7/f9KzCQh1XtU+MsKgxvXbjhLcjpt1mhPuxs0T+7fNuXbW8YVz1d6Y+BNjv4lEHz2Jw== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.79.0.tgz#dfdfd699d376d79a04e399a023b126e2904f5117" + integrity sha512-K6A0nnYRO5MGq+0UdAXk1DRcOELWSPri4f6SNaWu0zhOEBKSAzcVRTJi/cNDs5VniGbGik4/3C5Hd6+8bp5nxA== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-codeguruprofiler" "1.79.0" + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-ecr" "1.79.0" + "@aws-cdk/aws-ecr-assets" "1.79.0" + "@aws-cdk/aws-efs" "1.79.0" + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/aws-sqs" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-logs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.79.0.tgz#b7ac08de2e1c3872a6bdf49488d92bf6b7425d55" + integrity sha512-J3iYGun//JsqpMl75/b6c+yxA5nY+Dxn0s72TA/BBYzaU4wI2NohwVaqe2X4HIuHniRBVVHBfJ36B3GMKdi4cQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3-assets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.79.0.tgz#9351a396125a4a24227e071e29228c3ff9710d0b" + integrity sha512-P5ktD44LadqqX86IO/5q+cc38BsEeEaUBVCtymagCqYgZvDnkicuSMulcrbMefxUgQ6GLy+F7FuI4o9DHGb0nA== + dependencies: + "@aws-cdk/assets" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.79.0.tgz#2de74f669d9cd058679c98c701f640412e2de3da" + integrity sha512-hJM+5jZWoOS4kJ8kXLLOVwjTkWY/BvpkOxuZSLcQV3eq2RFUCwtakx+NTnu+M98eezzme9wAXnKzDFsBcocuHQ== + dependencies: + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sns@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.79.0.tgz#e5ebfa22f344e8eaab29045e1e19b78c364d5228" + integrity sha512-Kmmj0A4anar8JUk8+SZZVJqyqMfsu+9jCMhU3AkKkfpHsnDTj+qz4aPKH+36XIijCQa9A55pjgy5v+k/8WJ81A== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-sqs" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sqs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.79.0.tgz#237f16f8e18ca99e65d2909c91a7815022fa88d0" + integrity sha512-+rWIIHvygEwKmI2hyBXmoYo2sATpwzJw604Bp7stTQKcfp43vls5oq4SKjt87Gld2BO4cavF/ZCaEJO3pXMXyg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ssm@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.79.0.tgz#0731a8681b072e720d430365fb7000c8e313a3f9" + integrity sha512-92DAyXS7sZa58LMDz9Or3IlmjgS1etHCBAHM5ombbKOFFwkBdd7A41y2QNXmtv2b61yJYcyetkLkDtmjEwNMaw== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/cloud-assembly-schema@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.79.0.tgz#e089ed386f47b4e24e12e398b66d1df7894e5109" + integrity sha512-n2ARtOXIUq3FdJ1EBuHzsM0DQau6ZwHprPhpk1xc5bv21s7D5X5ECe06eC0K5xC5ZyfC13BDWu1f+xFh+krnYA== + dependencies: + jsonschema "^1.4.0" + semver "^7.3.2" + +"@aws-cdk/core@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.79.0.tgz#164b2f01877259eeb1ba16617be103522ae934d6" + integrity sha512-I+2GbQfbPy6TewnGbviE1W8cUhgBEA1mQLYm5gBj/Rzix1tCyaNvfYsBU3ipg3jIATpHsg1CzUq0zrumUnmnTg== dependencies: - "@aws-cdk/aws-cloudformation" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + "@balena/dockerignore" "^1.0.2" + constructs "^3.2.0" + fs-extra "^9.0.1" + ignore "^5.1.8" + minimatch "^3.0.4" -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== +"@aws-cdk/custom-resources@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.79.0.tgz#2b68ee4e03a7d517693d0009e8380c045b968e90" + integrity sha512-+F4dpo/vju7kfNnajw9Fl2XwTmVG7qzYZ6weuKtfr0iFDHrBCZ5auGP45u8gHeNebnCdq51TNG9gskQ3ct5Aiw== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" + "@aws-cdk/aws-cloudformation" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/cx-api@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.79.0.tgz#c9770fdd9b14a64e7ef350aa020969902b8a182d" + integrity sha512-ymQOqHcPzYhrcQ4swMgw5JzAaOm+PehH1cepsxi/Wq2zNOXkyN9o6Hw6l+eDpezFvNIKFy4mMAo6FR9xRCUiow== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.79.0" + semver "^7.3.2" + +"@aws-cdk/region-info@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.79.0.tgz#2a47339ca2dd48b9ecae46e985c8c3dcb83de577" + integrity sha512-klnXCc1Cd/krE4VOXJ1Blvey8ucPRzuwgGacPsCV2ugMSlaJSbdGqKzTUNxcK2o8g9PaEuJ5lNjfwqqyvp571g== -"@aws-cdk/region-info@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" - integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== "@serverless-stack/resources@../../../resources": - version "0.1.3" + version "0.4.3" dependencies: - "@aws-cdk/core" "1.61.0" + "@aws-cdk/core" "1.79.0" at-least-node@^1.0.0: version "1.0.0" @@ -295,10 +333,10 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== +constructs@^3.2.0: + version "3.2.74" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.74.tgz#e5650eed2451ca264178a6798c343e3b63fa14fe" + integrity sha512-kINDYW5Xnv/FY+4fbg3G34jvS/kfZ0Th2j/nPPG08peUkXExkY6CB/tarmYmkLIsHGI25x83pQHGDoFl7L8JLA== fs-extra@^9.0.1: version "9.0.1" @@ -315,6 +353,11 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +ignore@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + jsonfile@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" @@ -324,10 +367,17 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== +jsonschema@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== + +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" minimatch@^3.0.4: version "3.0.4" @@ -336,12 +386,19 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -semver@^7.2.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== +semver@^7.3.2: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" universalify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +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== diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index ccab7f2b9f..de8d2bf662 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -10,7 +10,7 @@ "author": "", "dependencies": { "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-dynamodb": "1.61.0" + "@aws-cdk/aws-dynamodb": "1.79.0" }, "license": "ISC" } diff --git a/packages/cli/test/context/yarn.lock b/packages/cli/test/context/yarn.lock index bd5fb40701..49b678899e 100644 --- a/packages/cli/test/context/yarn.lock +++ b/packages/cli/test/context/yarn.lock @@ -2,275 +2,313 @@ # yarn lockfile v1 -"@aws-cdk/assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.61.0.tgz#9702ba8ef5b3c45ec47e0530006d63dc0685a5ff" - integrity sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA== - dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-applicationautoscaling@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz#8129984ba0185bbb525fd8ef6328c5c84e51e4e5" - integrity sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-autoscaling-common@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz#9e7f6a8669b36001b846d90fa8cb65d8b4edb27b" - integrity sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudformation@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.61.0.tgz#6810e5327aa53b6d73cb337af340db152284aad7" - integrity sha512-e7mti0sWR6Sf4tav36bu379kkG5E33VMPLZaT8RkhXkIl97c1OaGHVx5G1Oe5DiHka08c+PA6da8ahkrR1wSkQ== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudwatch@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz#3c0171ca76d086da424c1b4148a53c4d68dd885a" - integrity sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-codeguruprofiler@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz#1ace4c61a4a7b916f4dbe28070b5b914949e6f06" - integrity sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - -"@aws-cdk/aws-dynamodb@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.61.0.tgz#3d9b1ffd6eb965152a2456de1b08625d3f3ee907" - integrity sha512-Qd87xJNTjCRBQ//H4WA6Lif3VuA9QuyKyterlmTGnmrUsAqubkKtxu/lLvMp0gQb9LzjQ5Hn9238v1s8rDBDlw== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/custom-resources" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ec2@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz#d39b1f5356c57089b963bbe4644adc02fd12a4bf" - integrity sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-ssm" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-efs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz#c4d66d0d928c01c8018c1c8bc75a1c5097d649ce" - integrity sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg== - dependencies: - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-events@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" - integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-iam@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" - integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== - dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-kms@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" - integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-lambda@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz#65b2fb456f6c2d0566401bd3d265f5bae47d6346" - integrity sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-codeguruprofiler" "1.61.0" - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-efs" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-logs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz#430bb5fc87ec606416ffb0869f04754185092a21" - integrity sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3-assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz#8512ac0e16818bc78eff010d15d6cc99a7d8fccf" - integrity sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA== - dependencies: - "@aws-cdk/assets" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" - integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== - dependencies: - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sns@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.61.0.tgz#c82f9b224b7ebf3e48cd9433456156e5d3f1df89" - integrity sha512-jmJmZXidJAJTg4lPnxMm26QR3ovMYb/89NBWnIRwGdVGcZ7nrWUkC0JNPQMbP+EvUFdh/9xdFVP4JvvzZzoy0w== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sqs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz#b2d1d7a5d27d36d1580a3cb500daf417037da492" - integrity sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ssm@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz#229308cfce757f8b3f75d12bf276ce4f8042076f" - integrity sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - fs-extra "^9.0.1" +"@aws-cdk/assets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.79.0.tgz#e97548a20e7fe9af8ebda8639ff275058211b128" + integrity sha512-h4FVseJK2lZ+FB8reFm0V37x0HEyg4mD8DGTb0akIz2A3U0ltmML+PN8EPANxLpSDOPYg2OLNAgPw5MOqXNC5A== + dependencies: + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-applicationautoscaling@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.79.0.tgz#1211274a8c4a2a15e7a97cacc096eb775b9c207d" + integrity sha512-ctgfkgKorVui7xF01U9djVCnhMrtvnSl0B7LUAnI6gy6uFrzpg9rfaW845c8O+6211OP2v9zrBl06GGPeACkCQ== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-autoscaling-common@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.79.0.tgz#aa0516cafe8a5d9cf9ca642d05cf8fa0ce5fb79a" + integrity sha512-ZgprhHWRVvBz8Vh0sXYGdRiUm7cga4IzwHftuVu4MUWYu3IlQSm92tj9wv7dfttIT8v4z5idXsDzu3Og91lcjA== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudformation@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.79.0.tgz#9f15101c3e1230d2ee1111d0e9ea9cade851b8ee" + integrity sha512-Rayo5xGbfE1gtsgXDcxun1vJJRDbA7VPJtfuMdh0cikpTeTA0/iMfpmg96Rgg+Ry/cxkHV8AFQAU0Va6uHiR2w== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudwatch@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.79.0.tgz#3bbeb41369d250470e87adc7e78d9f3d12a442ff" + integrity sha512-lbcrfUwI/9rvFCMyRa7g8DskqAXThDVrRM4SAdHAX/MCV5cBcb3GA1HzFfnILsq5RXPwoC4WT7hhxMibM4A0iA== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-codeguruprofiler@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.79.0.tgz#5aee986accca91b966e1a91ddc69d75d6c15721e" + integrity sha512-DF7MCJOCSGy9RV6X1ebhHOIggXOsJ21pQUs0mAClTt3/DPNEr0EQuiN30VhaiPxgUnbN3FTppLSLUzjIJSWbQA== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-dynamodb@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.79.0.tgz#a7c03b3d28dddcb7430fbc3ef813dbb94796b214" + integrity sha512-4JYtuN67hdmyAVd0vcG8QkfxBf8RA4hv5sMwFRmxG0GuN2/iTa6Acp2XQstVk/nK8bE3BUioRRRNRK1/5amlDw== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/custom-resources" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ec2@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.79.0.tgz#9c1ae84f374980f2456acdc57985a6612c1ae897" + integrity sha512-A2pbynk5o18gKeCy/epMiaD9R4OKrXlWzaqAOvUlHOom+SkxIyZMcALdxgU26nCty0DxGfgQiNHWTgNttLuRJQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/aws-ssm" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ecr-assets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.79.0.tgz#1367783f50fc0974ee3f1f99e881b8682ac91221" + integrity sha512-pM6X3Q+Uybq9RlX5DSAKfLygyZqYA9eNFvQKmTtuiwt9A+SDAonHrv6xT9EvFQaPHpFnxESpBiuspJTr9hZggQ== + dependencies: + "@aws-cdk/assets" "1.79.0" + "@aws-cdk/aws-ecr" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" minimatch "^3.0.4" -"@aws-cdk/custom-resources@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.61.0.tgz#03749f4122e46504fd1b3b3b9a11aa3578f269bf" - integrity sha512-etnHE7A0+J5w1L/m+KxEbPQ7LgtVYvEUV6naqRp5uIsTBaJ9sCQ+q43Y3Fj+g3NMigm8C2fKg5FmiFE6kiymDQ== +"@aws-cdk/aws-ecr@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr/-/aws-ecr-1.79.0.tgz#2257475e7a8ef103e9f9f7c7eff389430b4494e3" + integrity sha512-ZidVw6sdwNvMp+y75aH5k4IFMiIDCgpJ11d7tkSk1WKwoVu/pU/ZYLih/clTvFwzqzmh2A63rIyeC4+t5ziAvQ== + dependencies: + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-efs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.79.0.tgz#429163c5334977ea4d63fec70b8f076dc8432647" + integrity sha512-iWjyRFKMIvf1tcwFhwcHaLhmLFeC+iknE36t1UvRFxcBV4K8mrHxkXCsJzqZTHpaAFP/LU0pFX04o03508NRWQ== + dependencies: + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-events@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.79.0.tgz#fa676d751de3aceb4bb408f00dab6e085ca90ea6" + integrity sha512-9fyvKqSC/Sa5cVe2SyvTrTBNw8MuZ8w29JX6O9McMff1i50ZMpdSFh/r/Hq4ImfcoRJvZcyXDYJmTUI8PYR6Fg== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-iam@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.79.0.tgz#456f0cc824c6e248378fcddfecb49637d7656089" + integrity sha512-lGgmOpdE2f05vQ3oT3pWlybTNb/PQcqkbdiBfvBPRYrg5p3lCGBDFSI3bv7Bjvl7lHhFRnxHnRb4CJRAXcUQqw== + dependencies: + "@aws-cdk/core" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-kms@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.79.0.tgz#7c358ecd3823a7f965a7a091929c0afbc472d4d5" + integrity sha512-vYZUYO9GdOaalkVdJ8/7/f9KzCQh1XtU+MsKgxvXbjhLcjpt1mhPuxs0T+7fNuXbW8YVz1d6Y+BNjv4lEHz2Jw== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.79.0.tgz#dfdfd699d376d79a04e399a023b126e2904f5117" + integrity sha512-K6A0nnYRO5MGq+0UdAXk1DRcOELWSPri4f6SNaWu0zhOEBKSAzcVRTJi/cNDs5VniGbGik4/3C5Hd6+8bp5nxA== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-codeguruprofiler" "1.79.0" + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-ecr" "1.79.0" + "@aws-cdk/aws-ecr-assets" "1.79.0" + "@aws-cdk/aws-efs" "1.79.0" + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/aws-sqs" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-logs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.79.0.tgz#b7ac08de2e1c3872a6bdf49488d92bf6b7425d55" + integrity sha512-J3iYGun//JsqpMl75/b6c+yxA5nY+Dxn0s72TA/BBYzaU4wI2NohwVaqe2X4HIuHniRBVVHBfJ36B3GMKdi4cQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3-assets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.79.0.tgz#9351a396125a4a24227e071e29228c3ff9710d0b" + integrity sha512-P5ktD44LadqqX86IO/5q+cc38BsEeEaUBVCtymagCqYgZvDnkicuSMulcrbMefxUgQ6GLy+F7FuI4o9DHGb0nA== + dependencies: + "@aws-cdk/assets" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.79.0.tgz#2de74f669d9cd058679c98c701f640412e2de3da" + integrity sha512-hJM+5jZWoOS4kJ8kXLLOVwjTkWY/BvpkOxuZSLcQV3eq2RFUCwtakx+NTnu+M98eezzme9wAXnKzDFsBcocuHQ== + dependencies: + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sns@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.79.0.tgz#e5ebfa22f344e8eaab29045e1e19b78c364d5228" + integrity sha512-Kmmj0A4anar8JUk8+SZZVJqyqMfsu+9jCMhU3AkKkfpHsnDTj+qz4aPKH+36XIijCQa9A55pjgy5v+k/8WJ81A== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-sqs" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sqs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.79.0.tgz#237f16f8e18ca99e65d2909c91a7815022fa88d0" + integrity sha512-+rWIIHvygEwKmI2hyBXmoYo2sATpwzJw604Bp7stTQKcfp43vls5oq4SKjt87Gld2BO4cavF/ZCaEJO3pXMXyg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ssm@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.79.0.tgz#0731a8681b072e720d430365fb7000c8e313a3f9" + integrity sha512-92DAyXS7sZa58LMDz9Or3IlmjgS1etHCBAHM5ombbKOFFwkBdd7A41y2QNXmtv2b61yJYcyetkLkDtmjEwNMaw== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/cloud-assembly-schema@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.79.0.tgz#e089ed386f47b4e24e12e398b66d1df7894e5109" + integrity sha512-n2ARtOXIUq3FdJ1EBuHzsM0DQau6ZwHprPhpk1xc5bv21s7D5X5ECe06eC0K5xC5ZyfC13BDWu1f+xFh+krnYA== + dependencies: + jsonschema "^1.4.0" + semver "^7.3.2" + +"@aws-cdk/core@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.79.0.tgz#164b2f01877259eeb1ba16617be103522ae934d6" + integrity sha512-I+2GbQfbPy6TewnGbviE1W8cUhgBEA1mQLYm5gBj/Rzix1tCyaNvfYsBU3ipg3jIATpHsg1CzUq0zrumUnmnTg== dependencies: - "@aws-cdk/aws-cloudformation" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + "@balena/dockerignore" "^1.0.2" + constructs "^3.2.0" + fs-extra "^9.0.1" + ignore "^5.1.8" + minimatch "^3.0.4" -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== +"@aws-cdk/custom-resources@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.79.0.tgz#2b68ee4e03a7d517693d0009e8380c045b968e90" + integrity sha512-+F4dpo/vju7kfNnajw9Fl2XwTmVG7qzYZ6weuKtfr0iFDHrBCZ5auGP45u8gHeNebnCdq51TNG9gskQ3ct5Aiw== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" + "@aws-cdk/aws-cloudformation" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/cx-api@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.79.0.tgz#c9770fdd9b14a64e7ef350aa020969902b8a182d" + integrity sha512-ymQOqHcPzYhrcQ4swMgw5JzAaOm+PehH1cepsxi/Wq2zNOXkyN9o6Hw6l+eDpezFvNIKFy4mMAo6FR9xRCUiow== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.79.0" + semver "^7.3.2" + +"@aws-cdk/region-info@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.79.0.tgz#2a47339ca2dd48b9ecae46e985c8c3dcb83de577" + integrity sha512-klnXCc1Cd/krE4VOXJ1Blvey8ucPRzuwgGacPsCV2ugMSlaJSbdGqKzTUNxcK2o8g9PaEuJ5lNjfwqqyvp571g== -"@aws-cdk/region-info@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" - integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== "@serverless-stack/resources@../../../resources": - version "0.1.3" + version "0.4.3" dependencies: - "@aws-cdk/core" "1.61.0" + "@aws-cdk/core" "1.79.0" at-least-node@^1.0.0: version "1.0.0" @@ -295,10 +333,10 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== +constructs@^3.2.0: + version "3.2.74" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.74.tgz#e5650eed2451ca264178a6798c343e3b63fa14fe" + integrity sha512-kINDYW5Xnv/FY+4fbg3G34jvS/kfZ0Th2j/nPPG08peUkXExkY6CB/tarmYmkLIsHGI25x83pQHGDoFl7L8JLA== fs-extra@^9.0.1: version "9.0.1" @@ -315,6 +353,11 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +ignore@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + jsonfile@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" @@ -324,10 +367,17 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== +jsonschema@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== + +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" minimatch@^3.0.4: version "3.0.4" @@ -336,12 +386,19 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -semver@^7.2.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== +semver@^7.3.2: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" universalify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +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== diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index 1a8e6d624c..4edf6c0eb2 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -17,14 +17,14 @@ "dependencies": { "@serverless-stack/cli": "../../../cli", "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-dynamodb": "1.61.0", - "@aws-cdk/aws-sns": "1.61.0", - "@aws-cdk/aws-sns-subscriptions": "1.61.0", - "@aws-cdk/aws-sqs": "1.61.0", - "@aws-cdk/core": "1.61.0" + "@aws-cdk/aws-dynamodb": "1.79.0", + "@aws-cdk/aws-sns": "1.79.0", + "@aws-cdk/aws-sns-subscriptions": "1.79.0", + "@aws-cdk/aws-sqs": "1.79.0", + "@aws-cdk/core": "1.79.0" }, "license": "ISC", "devDependencies": { - "@aws-cdk/assert": "1.61.0" + "@aws-cdk/assert": "1.79.0" } } diff --git a/packages/cli/test/jest-ts/yarn.lock b/packages/cli/test/jest-ts/yarn.lock index e59b6b93ae..133ab69cb9 100644 --- a/packages/cli/test/jest-ts/yarn.lock +++ b/packages/cli/test/jest-ts/yarn.lock @@ -2,248 +2,278 @@ # yarn lockfile v1 -"@aws-cdk/assert@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.61.0.tgz#c1dbbf71fd64beb067a6e6237e03686319acaaa7" - integrity sha512-avvDVpyd8zLMT0HEW1K2ngP5U8CHu+BtPinUkLpLXVJ+Cr5K12plnk84+BOWe1NhM9/bqC4b1KA0c6MzIzgREA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cloudformation-diff" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.61.0.tgz#9702ba8ef5b3c45ec47e0530006d63dc0685a5ff" - integrity sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA== - dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-applicationautoscaling@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz#8129984ba0185bbb525fd8ef6328c5c84e51e4e5" - integrity sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-autoscaling-common@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz#9e7f6a8669b36001b846d90fa8cb65d8b4edb27b" - integrity sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudformation@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.61.0.tgz#6810e5327aa53b6d73cb337af340db152284aad7" - integrity sha512-e7mti0sWR6Sf4tav36bu379kkG5E33VMPLZaT8RkhXkIl97c1OaGHVx5G1Oe5DiHka08c+PA6da8ahkrR1wSkQ== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudwatch@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz#3c0171ca76d086da424c1b4148a53c4d68dd885a" - integrity sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-codeguruprofiler@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz#1ace4c61a4a7b916f4dbe28070b5b914949e6f06" - integrity sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - -"@aws-cdk/aws-dynamodb@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.61.0.tgz#3d9b1ffd6eb965152a2456de1b08625d3f3ee907" - integrity sha512-Qd87xJNTjCRBQ//H4WA6Lif3VuA9QuyKyterlmTGnmrUsAqubkKtxu/lLvMp0gQb9LzjQ5Hn9238v1s8rDBDlw== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/custom-resources" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ec2@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz#d39b1f5356c57089b963bbe4644adc02fd12a4bf" - integrity sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-ssm" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-efs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz#c4d66d0d928c01c8018c1c8bc75a1c5097d649ce" - integrity sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg== - dependencies: - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-events@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" - integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-iam@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" - integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== - dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-kms@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" - integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-lambda@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz#65b2fb456f6c2d0566401bd3d265f5bae47d6346" - integrity sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-codeguruprofiler" "1.61.0" - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-efs" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-logs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz#430bb5fc87ec606416ffb0869f04754185092a21" - integrity sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3-assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz#8512ac0e16818bc78eff010d15d6cc99a7d8fccf" - integrity sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA== - dependencies: - "@aws-cdk/assets" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" - integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== - dependencies: - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sns-subscriptions@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.61.0.tgz#839f37ae5b206a6c9b773775dbed7439425eeb0c" - integrity sha512-XhRJlbaNKrl5+cIhSf8fIeV1gcWyg25O86k5j6dt4KOGYWa4fpYkxF4KwUKKYtugk0F887K7F4/DmDOtqm5JuQ== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sns@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.61.0.tgz#c82f9b224b7ebf3e48cd9433456156e5d3f1df89" - integrity sha512-jmJmZXidJAJTg4lPnxMm26QR3ovMYb/89NBWnIRwGdVGcZ7nrWUkC0JNPQMbP+EvUFdh/9xdFVP4JvvzZzoy0w== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sqs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz#b2d1d7a5d27d36d1580a3cb500daf417037da492" - integrity sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" +"@aws-cdk/assert@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.79.0.tgz#c30e904bff8dbabcc3ca6ee01904da1fc7a980e7" + integrity sha512-wCiMyxhtUz82blUlSnfoqpHdSjgFOkjpunjgxT2aG5Y6RTN0ExOOm9pdKDdXnul0zml6ZvfOL51wDG0Udg7zFg== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cloudformation-diff" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/assets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.79.0.tgz#e97548a20e7fe9af8ebda8639ff275058211b128" + integrity sha512-h4FVseJK2lZ+FB8reFm0V37x0HEyg4mD8DGTb0akIz2A3U0ltmML+PN8EPANxLpSDOPYg2OLNAgPw5MOqXNC5A== + dependencies: + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-applicationautoscaling@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.79.0.tgz#1211274a8c4a2a15e7a97cacc096eb775b9c207d" + integrity sha512-ctgfkgKorVui7xF01U9djVCnhMrtvnSl0B7LUAnI6gy6uFrzpg9rfaW845c8O+6211OP2v9zrBl06GGPeACkCQ== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-autoscaling-common@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.79.0.tgz#aa0516cafe8a5d9cf9ca642d05cf8fa0ce5fb79a" + integrity sha512-ZgprhHWRVvBz8Vh0sXYGdRiUm7cga4IzwHftuVu4MUWYu3IlQSm92tj9wv7dfttIT8v4z5idXsDzu3Og91lcjA== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudformation@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.79.0.tgz#9f15101c3e1230d2ee1111d0e9ea9cade851b8ee" + integrity sha512-Rayo5xGbfE1gtsgXDcxun1vJJRDbA7VPJtfuMdh0cikpTeTA0/iMfpmg96Rgg+Ry/cxkHV8AFQAU0Va6uHiR2w== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudwatch@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.79.0.tgz#3bbeb41369d250470e87adc7e78d9f3d12a442ff" + integrity sha512-lbcrfUwI/9rvFCMyRa7g8DskqAXThDVrRM4SAdHAX/MCV5cBcb3GA1HzFfnILsq5RXPwoC4WT7hhxMibM4A0iA== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-codeguruprofiler@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.79.0.tgz#5aee986accca91b966e1a91ddc69d75d6c15721e" + integrity sha512-DF7MCJOCSGy9RV6X1ebhHOIggXOsJ21pQUs0mAClTt3/DPNEr0EQuiN30VhaiPxgUnbN3FTppLSLUzjIJSWbQA== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-dynamodb@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.79.0.tgz#a7c03b3d28dddcb7430fbc3ef813dbb94796b214" + integrity sha512-4JYtuN67hdmyAVd0vcG8QkfxBf8RA4hv5sMwFRmxG0GuN2/iTa6Acp2XQstVk/nK8bE3BUioRRRNRK1/5amlDw== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/custom-resources" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ec2@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.79.0.tgz#9c1ae84f374980f2456acdc57985a6612c1ae897" + integrity sha512-A2pbynk5o18gKeCy/epMiaD9R4OKrXlWzaqAOvUlHOom+SkxIyZMcALdxgU26nCty0DxGfgQiNHWTgNttLuRJQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/aws-ssm" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ecr-assets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.79.0.tgz#1367783f50fc0974ee3f1f99e881b8682ac91221" + integrity sha512-pM6X3Q+Uybq9RlX5DSAKfLygyZqYA9eNFvQKmTtuiwt9A+SDAonHrv6xT9EvFQaPHpFnxESpBiuspJTr9hZggQ== + dependencies: + "@aws-cdk/assets" "1.79.0" + "@aws-cdk/aws-ecr" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + minimatch "^3.0.4" -"@aws-cdk/aws-ssm@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz#229308cfce757f8b3f75d12bf276ce4f8042076f" - integrity sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" +"@aws-cdk/aws-ecr@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr/-/aws-ecr-1.79.0.tgz#2257475e7a8ef103e9f9f7c7eff389430b4494e3" + integrity sha512-ZidVw6sdwNvMp+y75aH5k4IFMiIDCgpJ11d7tkSk1WKwoVu/pU/ZYLih/clTvFwzqzmh2A63rIyeC4+t5ziAvQ== + dependencies: + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-efs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.79.0.tgz#429163c5334977ea4d63fec70b8f076dc8432647" + integrity sha512-iWjyRFKMIvf1tcwFhwcHaLhmLFeC+iknE36t1UvRFxcBV4K8mrHxkXCsJzqZTHpaAFP/LU0pFX04o03508NRWQ== + dependencies: + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-events@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.79.0.tgz#fa676d751de3aceb4bb408f00dab6e085ca90ea6" + integrity sha512-9fyvKqSC/Sa5cVe2SyvTrTBNw8MuZ8w29JX6O9McMff1i50ZMpdSFh/r/Hq4ImfcoRJvZcyXDYJmTUI8PYR6Fg== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-iam@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.79.0.tgz#456f0cc824c6e248378fcddfecb49637d7656089" + integrity sha512-lGgmOpdE2f05vQ3oT3pWlybTNb/PQcqkbdiBfvBPRYrg5p3lCGBDFSI3bv7Bjvl7lHhFRnxHnRb4CJRAXcUQqw== + dependencies: + "@aws-cdk/core" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-kms@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.79.0.tgz#7c358ecd3823a7f965a7a091929c0afbc472d4d5" + integrity sha512-vYZUYO9GdOaalkVdJ8/7/f9KzCQh1XtU+MsKgxvXbjhLcjpt1mhPuxs0T+7fNuXbW8YVz1d6Y+BNjv4lEHz2Jw== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.79.0.tgz#dfdfd699d376d79a04e399a023b126e2904f5117" + integrity sha512-K6A0nnYRO5MGq+0UdAXk1DRcOELWSPri4f6SNaWu0zhOEBKSAzcVRTJi/cNDs5VniGbGik4/3C5Hd6+8bp5nxA== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-codeguruprofiler" "1.79.0" + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-ecr" "1.79.0" + "@aws-cdk/aws-ecr-assets" "1.79.0" + "@aws-cdk/aws-efs" "1.79.0" + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/aws-sqs" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-logs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.79.0.tgz#b7ac08de2e1c3872a6bdf49488d92bf6b7425d55" + integrity sha512-J3iYGun//JsqpMl75/b6c+yxA5nY+Dxn0s72TA/BBYzaU4wI2NohwVaqe2X4HIuHniRBVVHBfJ36B3GMKdi4cQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3-assets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.79.0.tgz#9351a396125a4a24227e071e29228c3ff9710d0b" + integrity sha512-P5ktD44LadqqX86IO/5q+cc38BsEeEaUBVCtymagCqYgZvDnkicuSMulcrbMefxUgQ6GLy+F7FuI4o9DHGb0nA== + dependencies: + "@aws-cdk/assets" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.79.0.tgz#2de74f669d9cd058679c98c701f640412e2de3da" + integrity sha512-hJM+5jZWoOS4kJ8kXLLOVwjTkWY/BvpkOxuZSLcQV3eq2RFUCwtakx+NTnu+M98eezzme9wAXnKzDFsBcocuHQ== + dependencies: + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sns-subscriptions@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.79.0.tgz#c61248808e7aef9f49cdfdd4409336cc4af0e4b4" + integrity sha512-FeLsdUnwMCqyWP0ymQqa3VwLpFReAO8Hp5rihLsHI7dFXNaRflyaeXXbLbffn9AjeqbvqPhwIjTk3fb11STf6A== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/aws-sqs" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sns@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.79.0.tgz#e5ebfa22f344e8eaab29045e1e19b78c364d5228" + integrity sha512-Kmmj0A4anar8JUk8+SZZVJqyqMfsu+9jCMhU3AkKkfpHsnDTj+qz4aPKH+36XIijCQa9A55pjgy5v+k/8WJ81A== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-sqs" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sqs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.79.0.tgz#237f16f8e18ca99e65d2909c91a7815022fa88d0" + integrity sha512-+rWIIHvygEwKmI2hyBXmoYo2sATpwzJw604Bp7stTQKcfp43vls5oq4SKjt87Gld2BO4cavF/ZCaEJO3pXMXyg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ssm@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.79.0.tgz#0731a8681b072e720d430365fb7000c8e313a3f9" + integrity sha512-92DAyXS7sZa58LMDz9Or3IlmjgS1etHCBAHM5ombbKOFFwkBdd7A41y2QNXmtv2b61yJYcyetkLkDtmjEwNMaw== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" "@aws-cdk/cfnspec@1.61.0": version "1.61.0" @@ -252,6 +282,13 @@ dependencies: md5 "^2.3.0" +"@aws-cdk/cfnspec@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.79.0.tgz#b5fe241290f20ed1a3911ba8f0a9807aab0ec749" + integrity sha512-rbBhox7hzXPXk2n+1BDjsmiz/0W9ZHv3NeCKiq94WfHW6Jj4mSjtGs7ZUBFq8JkkgYVsE9ktH1634wt9A9fbRg== + dependencies: + md5 "^2.3.0" + "@aws-cdk/cloud-assembly-schema@1.61.0": version "1.61.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" @@ -260,6 +297,14 @@ jsonschema "^1.2.5" semver "^7.2.2" +"@aws-cdk/cloud-assembly-schema@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.79.0.tgz#e089ed386f47b4e24e12e398b66d1df7894e5109" + integrity sha512-n2ARtOXIUq3FdJ1EBuHzsM0DQau6ZwHprPhpk1xc5bv21s7D5X5ECe06eC0K5xC5ZyfC13BDWu1f+xFh+krnYA== + dependencies: + jsonschema "^1.4.0" + semver "^7.3.2" + "@aws-cdk/cloudformation-diff@1.61.0": version "1.61.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.61.0.tgz#8acb549fd1dd819aa61dfed47e011b44827045a8" @@ -272,6 +317,18 @@ string-width "^4.2.0" table "^5.4.6" +"@aws-cdk/cloudformation-diff@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.79.0.tgz#e26f2eaf93b26df14240c8704e056790aa0abe9b" + integrity sha512-GsX8Br7E0/2W2ugntO4zXodbApVi2C+AP/6QtTX6fasZbgZSwe8gjiXYPQ6EvtgjlWnYxPTn6vHRlb53vDFzMg== + dependencies: + "@aws-cdk/cfnspec" "1.79.0" + colors "^1.4.0" + diff "^5.0.0" + fast-deep-equal "^3.1.3" + string-width "^4.2.0" + table "^6.0.4" + "@aws-cdk/core@1.61.0": version "1.61.0" resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" @@ -283,18 +340,32 @@ fs-extra "^9.0.1" minimatch "^3.0.4" -"@aws-cdk/custom-resources@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.61.0.tgz#03749f4122e46504fd1b3b3b9a11aa3578f269bf" - integrity sha512-etnHE7A0+J5w1L/m+KxEbPQ7LgtVYvEUV6naqRp5uIsTBaJ9sCQ+q43Y3Fj+g3NMigm8C2fKg5FmiFE6kiymDQ== - dependencies: - "@aws-cdk/aws-cloudformation" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" +"@aws-cdk/core@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.79.0.tgz#164b2f01877259eeb1ba16617be103522ae934d6" + integrity sha512-I+2GbQfbPy6TewnGbviE1W8cUhgBEA1mQLYm5gBj/Rzix1tCyaNvfYsBU3ipg3jIATpHsg1CzUq0zrumUnmnTg== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + "@balena/dockerignore" "^1.0.2" + constructs "^3.2.0" + fs-extra "^9.0.1" + ignore "^5.1.8" + minimatch "^3.0.4" + +"@aws-cdk/custom-resources@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.79.0.tgz#2b68ee4e03a7d517693d0009e8380c045b968e90" + integrity sha512-+F4dpo/vju7kfNnajw9Fl2XwTmVG7qzYZ6weuKtfr0iFDHrBCZ5auGP45u8gHeNebnCdq51TNG9gskQ3ct5Aiw== + dependencies: + "@aws-cdk/aws-cloudformation" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" "@aws-cdk/cx-api@1.61.0": version "1.61.0" @@ -304,15 +375,35 @@ "@aws-cdk/cloud-assembly-schema" "1.61.0" semver "^7.2.2" +"@aws-cdk/cx-api@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.79.0.tgz#c9770fdd9b14a64e7ef350aa020969902b8a182d" + integrity sha512-ymQOqHcPzYhrcQ4swMgw5JzAaOm+PehH1cepsxi/Wq2zNOXkyN9o6Hw6l+eDpezFvNIKFy4mMAo6FR9xRCUiow== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.79.0" + semver "^7.3.2" + "@aws-cdk/region-info@1.61.0": version "1.61.0" resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== +"@aws-cdk/region-info@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.79.0.tgz#2a47339ca2dd48b9ecae46e985c8c3dcb83de577" + integrity sha512-klnXCc1Cd/krE4VOXJ1Blvey8ucPRzuwgGacPsCV2ugMSlaJSbdGqKzTUNxcK2o8g9PaEuJ5lNjfwqqyvp571g== + +"@aws-cdk/yaml-cfn@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/yaml-cfn/-/yaml-cfn-1.79.0.tgz#6d888417e8bd94bf192acfae19f7ab5e3ab75519" + integrity sha512-ABi7TSKtKl9iCN9F4OqxyDCJYGhKea8/QjLkGpZTFzi1wa512rAQBGSOrHxLvpdJFx7RH59oszrSd/kAGHwrgQ== + dependencies: + yaml "1.10.0" + "@babel/cli@^7.10.5": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.5.tgz#57df2987c8cf89d0fc7d4b157ec59d7619f1b77a" - integrity sha512-j9H9qSf3kLdM0Ao3aGPbGZ73mEA9XazuupcS6cDGWuiyAcANoguhP0r2Lx32H5JGw4sSSoHG3x/mxVnHgvOoyA== + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.12.10.tgz#67a1015b1cd505bde1696196febf910c4c339a48" + integrity sha512-+y4ZnePpvWs1fc/LhZRTHkTesbXkyBYuOB+5CyodZqrEuETXi3zOVfpAQIdgC3lXbHLTDG9dQosxR9BhvLKDLQ== dependencies: commander "^4.0.1" convert-source-map "^1.1.0" @@ -323,77 +414,73 @@ slash "^2.0.0" source-map "^0.5.0" optionalDependencies: - chokidar "^2.1.8" + "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents" + chokidar "^3.4.0" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== dependencies: "@babel/highlight" "^7.10.4" -"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" - integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ== - dependencies: - browserslist "^4.12.0" - invariant "^2.2.4" - semver "^5.5.0" +"@babel/compat-data@^7.12.5", "@babel/compat-data@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" + integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== "@babel/core@^7.1.0", "@babel/core@^7.10.5", "@babel/core@^7.7.5": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.1.tgz#2c55b604e73a40dc21b0e52650b11c65cf276643" - integrity sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ== + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" + integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== dependencies: "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.0" - "@babel/helper-module-transforms" "^7.11.0" - "@babel/helpers" "^7.10.4" - "@babel/parser" "^7.11.1" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.11.0" - "@babel/types" "^7.11.0" + "@babel/generator" "^7.12.10" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.10" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" json5 "^2.1.2" lodash "^4.17.19" - resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" "@babel/eslint-parser@^7.11.3": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.11.5.tgz#398192b8d1cd3678efb709f5ab09d9aa2a2218fd" - integrity sha512-DZ3maD3ciwRg1pOzEpJ1outlV1DA/A8XHDQoyL69fC3RIJMlMq1UPudgfRkW0YFqmQPR6OPvu8chaT7Yq2Mm8A== + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.12.1.tgz#b3ae38e6174d2d0d2d00d2dcd919b4086b6bb8f0" + integrity sha512-cc7WQHnHQY3++/bghgbDtPx+5bf6xTsokyGzV6Qzh65NLz/unv+mPQuACkQ9GFhIhcTFv6yqwNaEcfX7EkOEsg== dependencies: eslint-scope "5.1.0" eslint-visitor-keys "^1.3.0" semver "^6.3.0" "@babel/eslint-plugin@^7.11.3": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/eslint-plugin/-/eslint-plugin-7.11.5.tgz#651fed485493cee8ae803d6a22e3b4f21315f328" - integrity sha512-klliWjB6CeMeqZ7IeJporPr7raD3Ttc8MF9HPNyTvddmBB9Bg7gbiN43rZvaqvsYiktPQLHZrD/Of7vtl6EYpw== + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/eslint-plugin/-/eslint-plugin-7.12.1.tgz#67626a16312dfe7c5dd7685a1a8af7b03c43985b" + integrity sha512-rOjrD5yupTYCO4x0kEbQmi/NsaD+VGOD/9Cvso64WMVPY2y6o5Nvw2sqFWdeSEBdR1Dsa07YjplBs067x5YbXg== dependencies: eslint-rule-composer "^0.3.0" -"@babel/generator@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.0.tgz#4b90c78d8c12825024568cbe83ee6c9af193585c" - integrity sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ== +"@babel/generator@^7.12.10": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" + integrity sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA== dependencies: - "@babel/types" "^7.11.0" + "@babel/types" "^7.12.11" jsesc "^2.5.1" source-map "^0.5.0" "@babel/helper-annotate-as-pure@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" - integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz#54ab9b000e60a93644ce17b3f37d313aaf1d115d" + integrity sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ== dependencies: - "@babel/types" "^7.10.4" + "@babel/types" "^7.12.10" "@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": version "7.10.4" @@ -403,37 +490,34 @@ "@babel/helper-explode-assignable-expression" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helper-compilation-targets@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" - integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== +"@babel/helper-compilation-targets@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz#cb470c76198db6a24e9dbc8987275631e5d29831" + integrity sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw== dependencies: - "@babel/compat-data" "^7.10.4" - browserslist "^4.12.0" - invariant "^2.2.4" - levenary "^1.1.1" + "@babel/compat-data" "^7.12.5" + "@babel/helper-validator-option" "^7.12.1" + browserslist "^4.14.5" semver "^5.5.0" -"@babel/helper-create-class-features-plugin@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" - integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== +"@babel/helper-create-class-features-plugin@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" + integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w== dependencies: "@babel/helper-function-name" "^7.10.4" - "@babel/helper-member-expression-to-functions" "^7.10.5" + "@babel/helper-member-expression-to-functions" "^7.12.1" "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" "@babel/helper-split-export-declaration" "^7.10.4" -"@babel/helper-create-regexp-features-plugin@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" - integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== +"@babel/helper-create-regexp-features-plugin@^7.12.1": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz#2084172e95443fa0a09214ba1bb328f9aea1278f" + integrity sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ== dependencies: "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-regex" "^7.10.4" - regexpu-core "^4.7.0" + regexpu-core "^4.7.1" "@babel/helper-define-map@^7.10.4": version "7.10.5" @@ -445,28 +529,27 @@ lodash "^4.17.19" "@babel/helper-explode-assignable-expression@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c" - integrity sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A== + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633" + integrity sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA== dependencies: - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/types" "^7.12.1" "@babel/helper-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" - integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz#1fd7738aee5dcf53c3ecff24f1da9c511ec47b42" + integrity sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA== dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/helper-get-function-arity" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/types" "^7.12.11" -"@babel/helper-get-function-arity@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" - integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== +"@babel/helper-get-function-arity@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" + integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== dependencies: - "@babel/types" "^7.10.4" + "@babel/types" "^7.12.10" "@babel/helper-hoist-variables@^7.10.4": version "7.10.4" @@ -475,118 +558,115 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" - integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== +"@babel/helper-member-expression-to-functions@^7.12.1", "@babel/helper-member-expression-to-functions@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" + integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== dependencies: - "@babel/types" "^7.11.0" + "@babel/types" "^7.12.7" -"@babel/helper-module-imports@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" - integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== +"@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" + integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== dependencies: - "@babel/types" "^7.10.4" + "@babel/types" "^7.12.5" -"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" - integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== +"@babel/helper-module-transforms@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" "@babel/template" "^7.10.4" - "@babel/types" "^7.11.0" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" lodash "^4.17.19" -"@babel/helper-optimise-call-expression@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" - integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== +"@babel/helper-optimise-call-expression@^7.10.4", "@babel/helper-optimise-call-expression@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d" + integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== dependencies: - "@babel/types" "^7.10.4" + "@babel/types" "^7.12.10" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-regex@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" - integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== - dependencies: - lodash "^4.17.19" - -"@babel/helper-remap-async-to-generator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz#fce8bea4e9690bbe923056ded21e54b4e8b68ed5" - integrity sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg== +"@babel/helper-remap-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd" + integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A== dependencies: "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/helper-wrap-function" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/types" "^7.12.1" -"@babel/helper-replace-supers@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" - integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== +"@babel/helper-replace-supers@^7.12.1": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz#ea511658fc66c7908f923106dd88e08d1997d60d" + integrity sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA== dependencies: - "@babel/helper-member-expression-to-functions" "^7.10.4" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.12.7" + "@babel/helper-optimise-call-expression" "^7.12.10" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.11" -"@babel/helper-simple-access@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" - integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== +"@babel/helper-simple-access@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== dependencies: - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/types" "^7.12.1" -"@babel/helper-skip-transparent-expression-wrappers@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" - integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q== +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== dependencies: - "@babel/types" "^7.11.0" + "@babel/types" "^7.12.1" "@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" - integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz#1b4cc424458643c47d37022223da33d76ea4603a" + integrity sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g== dependencies: - "@babel/types" "^7.11.0" + "@babel/types" "^7.12.11" -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== +"@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + +"@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f" + integrity sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw== "@babel/helper-wrap-function@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" - integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9" + integrity sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow== dependencies: "@babel/helper-function-name" "^7.10.4" "@babel/template" "^7.10.4" "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helpers@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" - integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== +"@babel/helpers@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" + integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== dependencies: "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" "@babel/highlight@^7.10.4": version "7.10.4" @@ -597,116 +677,116 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.0", "@babel/parser@^7.11.1": - version "7.11.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.3.tgz#9e1eae46738bcd08e23e867bab43e7b95299a8f9" - integrity sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.7": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" + integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== -"@babel/plugin-proposal-async-generator-functions@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" - integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== +"@babel/plugin-proposal-async-generator-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e" + integrity sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A== dependencies: "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-remap-async-to-generator" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/plugin-proposal-class-properties@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" - integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== +"@babel/plugin-proposal-class-properties@^7.10.4", "@babel/plugin-proposal-class-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" + integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-create-class-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-dynamic-import@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" - integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== +"@babel/plugin-proposal-dynamic-import@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" + integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-dynamic-import" "^7.8.0" -"@babel/plugin-proposal-export-namespace-from@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" - integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg== +"@babel/plugin-proposal-export-namespace-from@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz#8b9b8f376b2d88f5dd774e4d24a5cc2e3679b6d4" + integrity sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" - integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== +"@babel/plugin-proposal-json-strings@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" + integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.0" -"@babel/plugin-proposal-logical-assignment-operators@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8" - integrity sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q== +"@babel/plugin-proposal-logical-assignment-operators@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751" + integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" - integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" + integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" - integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== +"@babel/plugin-proposal-numeric-separator@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz#8bf253de8139099fea193b297d23a9d406ef056b" + integrity sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" - integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== +"@babel/plugin-proposal-object-rest-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.12.1" -"@babel/plugin-proposal-optional-catch-binding@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" - integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== +"@babel/plugin-proposal-optional-catch-binding@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" + integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" - integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA== +"@babel/plugin-proposal-optional-chaining@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz#e02f0ea1b5dc59d401ec16fb824679f683d3303c" + integrity sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-private-methods@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" - integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== +"@babel/plugin-proposal-private-methods@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz#86814f6e7a21374c980c10d38b4493e703f4a389" + integrity sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w== dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-create-class-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" - integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== +"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072" + integrity sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-create-regexp-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": @@ -723,10 +803,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.10.4", "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" - integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== +"@babel/plugin-syntax-class-properties@^7.12.1", "@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" + integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -800,288 +880,287 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" - integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== +"@babel/plugin-syntax-top-level-await@^7.12.1", "@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" + integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-arrow-functions@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" - integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== +"@babel/plugin-transform-arrow-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3" + integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-async-to-generator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" - integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== +"@babel/plugin-transform-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" + integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A== dependencies: - "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-module-imports" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-remap-async-to-generator" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" -"@babel/plugin-transform-block-scoped-functions@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" - integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== +"@babel/plugin-transform-block-scoped-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" + integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-block-scoping@^7.10.4": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" - integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew== +"@babel/plugin-transform-block-scoping@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.11.tgz#83ae92a104dbb93a7d6c6dd1844f351083c46b4f" + integrity sha512-atR1Rxc3hM+VPg/NvNvfYw0npQEAcHuJ+MGZnFn6h3bo+1U3BWXMdFMlvVRApBTWKQMX7SOwRJZA5FBF/JQbvA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-classes@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" - integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== +"@babel/plugin-transform-classes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" + integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog== dependencies: "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/helper-define-map" "^7.10.4" "@babel/helper-function-name" "^7.10.4" "@babel/helper-optimise-call-expression" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" "@babel/helper-split-export-declaration" "^7.10.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" - integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== +"@babel/plugin-transform-computed-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" + integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-destructuring@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" - integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== +"@babel/plugin-transform-destructuring@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" + integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" - integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== +"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975" + integrity sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-create-regexp-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-duplicate-keys@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" - integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== +"@babel/plugin-transform-duplicate-keys@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" + integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-exponentiation-operator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" - integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== +"@babel/plugin-transform-exponentiation-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" + integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug== dependencies: "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-for-of@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" - integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== +"@babel/plugin-transform-for-of@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" + integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" - integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== +"@babel/plugin-transform-function-name@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" + integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw== dependencies: "@babel/helper-function-name" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-literals@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" - integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== +"@babel/plugin-transform-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" + integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" - integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== +"@babel/plugin-transform-member-expression-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" + integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-modules-amd@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" - integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== +"@babel/plugin-transform-modules-amd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" + integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ== dependencies: - "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-module-transforms" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" - integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== +"@babel/plugin-transform-modules-commonjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" + integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag== dependencies: - "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-module-transforms" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-simple-access" "^7.12.1" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" - integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== +"@babel/plugin-transform-modules-systemjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086" + integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q== dependencies: "@babel/helper-hoist-variables" "^7.10.4" - "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-module-transforms" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-identifier" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" - integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== +"@babel/plugin-transform-modules-umd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" + integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q== dependencies: - "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-module-transforms" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" - integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" + integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-create-regexp-features-plugin" "^7.12.1" -"@babel/plugin-transform-new-target@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" - integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== +"@babel/plugin-transform-new-target@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" + integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-object-super@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" - integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== +"@babel/plugin-transform-object-super@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e" + integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" -"@babel/plugin-transform-parameters@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" - integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== +"@babel/plugin-transform-parameters@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" + integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== dependencies: - "@babel/helper-get-function-arity" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-property-literals@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" - integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== +"@babel/plugin-transform-property-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" + integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-regenerator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" - integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== +"@babel/plugin-transform-regenerator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753" + integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" - integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== +"@babel/plugin-transform-reserved-words@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" + integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-shorthand-properties@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" - integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== +"@babel/plugin-transform-shorthand-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3" + integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-spread@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" - integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== +"@babel/plugin-transform-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" + integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng== dependencies: "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" -"@babel/plugin-transform-sticky-regex@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" - integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== +"@babel/plugin-transform-sticky-regex@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz#560224613ab23987453948ed21d0b0b193fa7fad" + integrity sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-regex" "^7.10.4" -"@babel/plugin-transform-template-literals@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" - integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== +"@babel/plugin-transform-template-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" + integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw== dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-typeof-symbol@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" - integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== +"@babel/plugin-transform-typeof-symbol@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b" + integrity sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-unicode-escapes@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" - integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== +"@babel/plugin-transform-unicode-escapes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz#5232b9f81ccb07070b7c3c36c67a1b78f1845709" + integrity sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-unicode-regex@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" - integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== +"@babel/plugin-transform-unicode-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" + integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-create-regexp-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" "@babel/preset-env@^7.10.4": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.0.tgz#860ee38f2ce17ad60480c2021ba9689393efb796" - integrity sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg== + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.11.tgz#55d5f7981487365c93dbbc84507b1c7215e857f9" + integrity sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw== dependencies: - "@babel/compat-data" "^7.11.0" - "@babel/helper-compilation-targets" "^7.10.4" - "@babel/helper-module-imports" "^7.10.4" + "@babel/compat-data" "^7.12.7" + "@babel/helper-compilation-targets" "^7.12.5" + "@babel/helper-module-imports" "^7.12.5" "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-proposal-async-generator-functions" "^7.10.4" - "@babel/plugin-proposal-class-properties" "^7.10.4" - "@babel/plugin-proposal-dynamic-import" "^7.10.4" - "@babel/plugin-proposal-export-namespace-from" "^7.10.4" - "@babel/plugin-proposal-json-strings" "^7.10.4" - "@babel/plugin-proposal-logical-assignment-operators" "^7.11.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" - "@babel/plugin-proposal-numeric-separator" "^7.10.4" - "@babel/plugin-proposal-object-rest-spread" "^7.11.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" - "@babel/plugin-proposal-optional-chaining" "^7.11.0" - "@babel/plugin-proposal-private-methods" "^7.10.4" - "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" + "@babel/helper-validator-option" "^7.12.11" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-dynamic-import" "^7.12.1" + "@babel/plugin-proposal-export-namespace-from" "^7.12.1" + "@babel/plugin-proposal-json-strings" "^7.12.1" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-numeric-separator" "^7.12.7" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.7" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-class-properties" "^7.10.4" + "@babel/plugin-syntax-class-properties" "^7.12.1" "@babel/plugin-syntax-dynamic-import" "^7.8.0" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.0" @@ -1091,51 +1170,48 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.10.4" - "@babel/plugin-transform-arrow-functions" "^7.10.4" - "@babel/plugin-transform-async-to-generator" "^7.10.4" - "@babel/plugin-transform-block-scoped-functions" "^7.10.4" - "@babel/plugin-transform-block-scoping" "^7.10.4" - "@babel/plugin-transform-classes" "^7.10.4" - "@babel/plugin-transform-computed-properties" "^7.10.4" - "@babel/plugin-transform-destructuring" "^7.10.4" - "@babel/plugin-transform-dotall-regex" "^7.10.4" - "@babel/plugin-transform-duplicate-keys" "^7.10.4" - "@babel/plugin-transform-exponentiation-operator" "^7.10.4" - "@babel/plugin-transform-for-of" "^7.10.4" - "@babel/plugin-transform-function-name" "^7.10.4" - "@babel/plugin-transform-literals" "^7.10.4" - "@babel/plugin-transform-member-expression-literals" "^7.10.4" - "@babel/plugin-transform-modules-amd" "^7.10.4" - "@babel/plugin-transform-modules-commonjs" "^7.10.4" - "@babel/plugin-transform-modules-systemjs" "^7.10.4" - "@babel/plugin-transform-modules-umd" "^7.10.4" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" - "@babel/plugin-transform-new-target" "^7.10.4" - "@babel/plugin-transform-object-super" "^7.10.4" - "@babel/plugin-transform-parameters" "^7.10.4" - "@babel/plugin-transform-property-literals" "^7.10.4" - "@babel/plugin-transform-regenerator" "^7.10.4" - "@babel/plugin-transform-reserved-words" "^7.10.4" - "@babel/plugin-transform-shorthand-properties" "^7.10.4" - "@babel/plugin-transform-spread" "^7.11.0" - "@babel/plugin-transform-sticky-regex" "^7.10.4" - "@babel/plugin-transform-template-literals" "^7.10.4" - "@babel/plugin-transform-typeof-symbol" "^7.10.4" - "@babel/plugin-transform-unicode-escapes" "^7.10.4" - "@babel/plugin-transform-unicode-regex" "^7.10.4" + "@babel/plugin-syntax-top-level-await" "^7.12.1" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.11" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-computed-properties" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-dotall-regex" "^7.12.1" + "@babel/plugin-transform-duplicate-keys" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-function-name" "^7.12.1" + "@babel/plugin-transform-literals" "^7.12.1" + "@babel/plugin-transform-member-expression-literals" "^7.12.1" + "@babel/plugin-transform-modules-amd" "^7.12.1" + "@babel/plugin-transform-modules-commonjs" "^7.12.1" + "@babel/plugin-transform-modules-systemjs" "^7.12.1" + "@babel/plugin-transform-modules-umd" "^7.12.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" + "@babel/plugin-transform-new-target" "^7.12.1" + "@babel/plugin-transform-object-super" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-property-literals" "^7.12.1" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/plugin-transform-reserved-words" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-sticky-regex" "^7.12.7" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.10" + "@babel/plugin-transform-unicode-escapes" "^7.12.1" + "@babel/plugin-transform-unicode-regex" "^7.12.1" "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.11.0" - browserslist "^4.12.0" - core-js-compat "^3.6.2" - invariant "^2.2.2" - levenary "^1.1.1" + "@babel/types" "^7.12.11" + core-js-compat "^3.8.0" semver "^5.5.0" "@babel/preset-modules@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" - integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" @@ -1144,45 +1220,50 @@ esutils "^2.0.2" "@babel/runtime@^7.8.4": - version "7.11.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" - integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" + integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.10.4", "@babel/template@^7.3.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" - integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== +"@babel/template@^7.10.4", "@babel/template@^7.12.7", "@babel/template@^7.3.3": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" + integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== dependencies: "@babel/code-frame" "^7.10.4" - "@babel/parser" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.0.tgz#9b996ce1b98f53f7c3e4175115605d56ed07dd24" - integrity sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.10.tgz#2d1f4041e8bf42ea099e5b2dc48d6a594c00017a" + integrity sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg== dependencies: "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.0" + "@babel/generator" "^7.12.10" "@babel/helper-function-name" "^7.10.4" "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.11.0" - "@babel/types" "^7.11.0" + "@babel/parser" "^7.12.10" + "@babel/types" "^7.12.10" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d" - integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA== +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.11.tgz#a86e4d71e30a9b6ee102590446c98662589283ce" + integrity sha512-ukA9SQtKThINm++CX1CwmliMrE54J6nIYB5XTwL5f/CLFW9owfls+YSU8tVW15RQ2w+a3fSbPjC6HdQNtWZkiA== dependencies: - "@babel/helper-validator-identifier" "^7.10.4" + "@babel/helper-validator-identifier" "^7.12.11" lodash "^4.17.19" to-fast-properties "^2.0.0" +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1196,6 +1277,22 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@eslint/eslintrc@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.2.tgz#d01fc791e2fc33e88a29d6f3dc7e93d0cd784b76" + integrity sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.19" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -1212,93 +1309,93 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@jest/console@^26.2.0": - version "26.2.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.2.0.tgz#d18f2659b90930e7ec3925fb7209f1ba2cf463f0" - integrity sha512-mXQfx3nSLwiHm1i7jbu+uvi+vvpVjNGzIQYLCfsat9rapC+MJkS4zBseNrgJE0vU921b3P67bQzhduphjY3Tig== +"@jest/console@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.6.2" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^26.2.0" - jest-util "^26.2.0" + jest-message-util "^26.6.2" + jest-util "^26.6.2" slash "^3.0.0" -"@jest/core@^26.2.2": - version "26.2.2" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.2.2.tgz#63de01ffce967618003dd7a0164b05c8041b81a9" - integrity sha512-UwA8gNI8aeV4FHGfGAUfO/DHjrFVvlBravF1Tm9Kt6qFE+6YHR47kFhgdepOFpADEKstyO+MVdPvkV6/dyt9sA== +"@jest/core@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== dependencies: - "@jest/console" "^26.2.0" - "@jest/reporters" "^26.2.2" - "@jest/test-result" "^26.2.0" - "@jest/transform" "^26.2.2" - "@jest/types" "^26.2.0" + "@jest/console" "^26.6.2" + "@jest/reporters" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" - jest-changed-files "^26.2.0" - jest-config "^26.2.2" - jest-haste-map "^26.2.2" - jest-message-util "^26.2.0" + jest-changed-files "^26.6.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" jest-regex-util "^26.0.0" - jest-resolve "^26.2.2" - jest-resolve-dependencies "^26.2.2" - jest-runner "^26.2.2" - jest-runtime "^26.2.2" - jest-snapshot "^26.2.2" - jest-util "^26.2.0" - jest-validate "^26.2.0" - jest-watcher "^26.2.0" + jest-resolve "^26.6.2" + jest-resolve-dependencies "^26.6.3" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + jest-watcher "^26.6.2" micromatch "^4.0.2" p-each-series "^2.1.0" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^26.2.0": - version "26.2.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.2.0.tgz#f6faee1630fcc2fad208953164bccb31dbe0e45f" - integrity sha512-oCgp9NmEiJ5rbq9VI/v/yYLDpladAAVvFxZgNsnJxOETuzPZ0ZcKKHYjKYwCtPOP1WCrM5nmyuOhMStXFGHn+g== +"@jest/environment@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== dependencies: - "@jest/fake-timers" "^26.2.0" - "@jest/types" "^26.2.0" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" - jest-mock "^26.2.0" + jest-mock "^26.6.2" -"@jest/fake-timers@^26.2.0": - version "26.2.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.2.0.tgz#b485c57dc4c74d61406a339807a9af4bac74b75a" - integrity sha512-45Gfe7YzYTKqTayBrEdAF0qYyAsNRBzfkV0IyVUm3cx7AsCWlnjilBM4T40w7IXT5VspOgMPikQlV0M6gHwy/g== +"@jest/fake-timers@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.6.2" "@sinonjs/fake-timers" "^6.0.1" "@types/node" "*" - jest-message-util "^26.2.0" - jest-mock "^26.2.0" - jest-util "^26.2.0" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" -"@jest/globals@^26.2.0": - version "26.2.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.2.0.tgz#ad78f1104f250c1a4bf5184a2ba51facc59b23f6" - integrity sha512-Hoc6ScEIPaym7RNytIL2ILSUWIGKlwEv+JNFof9dGYOdvPjb2evEURSslvCMkNuNg1ECEClTE8PH7ULlMJntYA== +"@jest/globals@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== dependencies: - "@jest/environment" "^26.2.0" - "@jest/types" "^26.2.0" - expect "^26.2.0" + "@jest/environment" "^26.6.2" + "@jest/types" "^26.6.2" + expect "^26.6.2" -"@jest/reporters@^26.2.2": - version "26.2.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.2.2.tgz#5a8632ab410f4fc57782bc05dcf115e91818e869" - integrity sha512-7854GPbdFTAorWVh+RNHyPO9waRIN6TcvCezKVxI1khvFq9YjINTW7J3WU+tbR038Ynn6WjYred6vtT0YmIWVQ== +"@jest/reporters@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.2.0" - "@jest/test-result" "^26.2.0" - "@jest/transform" "^26.2.2" - "@jest/types" "^26.2.0" + "@jest/console" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" @@ -1309,92 +1406,99 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.0.2" - jest-haste-map "^26.2.2" - jest-resolve "^26.2.2" - jest-util "^26.2.0" - jest-worker "^26.2.1" + jest-haste-map "^26.6.2" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" terminal-link "^2.0.0" - v8-to-istanbul "^4.1.3" + v8-to-istanbul "^7.0.0" optionalDependencies: - node-notifier "^7.0.0" + node-notifier "^8.0.0" -"@jest/source-map@^26.1.0": - version "26.1.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.1.0.tgz#a6a020d00e7d9478f4b690167c5e8b77e63adb26" - integrity sha512-XYRPYx4eEVX15cMT9mstnO7hkHP3krNtKfxUYd8L7gbtia8JvZZ6bMzSwa6IQJENbudTwKMw5R1BePRD+bkEmA== +"@jest/source-map@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== dependencies: callsites "^3.0.0" graceful-fs "^4.2.4" source-map "^0.6.0" -"@jest/test-result@^26.2.0": - version "26.2.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.2.0.tgz#51c9b165c8851cfcf7a3466019114785e154f76b" - integrity sha512-kgPlmcVafpmfyQEu36HClK+CWI6wIaAWDHNxfQtGuKsgoa2uQAYdlxjMDBEa3CvI40+2U3v36gQF6oZBkoKatw== +"@jest/test-result@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== dependencies: - "@jest/console" "^26.2.0" - "@jest/types" "^26.2.0" + "@jest/console" "^26.6.2" + "@jest/types" "^26.6.2" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^26.2.2": - version "26.2.2" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.2.2.tgz#5e8091f2e6c61fdf242af566cb820a4eadc6c4af" - integrity sha512-SliZWon5LNqV/lVXkeowSU6L8++FGOu3f43T01L1Gv6wnFDP00ER0utV9jyK9dVNdXqfMNCN66sfcyar/o7BNw== +"@jest/test-sequencer@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== dependencies: - "@jest/test-result" "^26.2.0" + "@jest/test-result" "^26.6.2" graceful-fs "^4.2.4" - jest-haste-map "^26.2.2" - jest-runner "^26.2.2" - jest-runtime "^26.2.2" + jest-haste-map "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" -"@jest/transform@^26.2.2": - version "26.2.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.2.2.tgz#86c005c8d5d749ac54d8df53ea58675fffe7a97e" - integrity sha512-c1snhvi5wRVre1XyoO3Eef5SEWpuBCH/cEbntBUd9tI5sNYiBDmO0My/lc5IuuGYKp/HFIHV1eZpSx5yjdkhKw== +"@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^26.2.0" + "@jest/types" "^26.6.2" babel-plugin-istanbul "^6.0.0" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.2.4" - jest-haste-map "^26.2.2" + jest-haste-map "^26.6.2" jest-regex-util "^26.0.0" - jest-util "^26.2.0" + jest-util "^26.6.2" micromatch "^4.0.2" pirates "^4.0.1" slash "^3.0.0" source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/types@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" - integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" - -"@jest/types@^26.2.0": - version "26.2.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.2.0.tgz#b28ca1fb517a4eb48c0addea7fcd9edc4ab45721" - integrity sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA== +"@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" + "@types/istanbul-reports" "^3.0.0" "@types/node" "*" "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents": + version "2.1.8-no-fsevents" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz#da7c3996b8e6e19ebd14d82eaced2313e7769f9b" + integrity sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + "@serverless-stack/cli@../../../cli": - version "0.4.1" + version "0.4.3" dependencies: "@babel/cli" "^7.10.5" "@babel/core" "^7.10.5" @@ -1402,13 +1506,13 @@ "@babel/eslint-plugin" "^7.11.3" "@babel/plugin-proposal-class-properties" "^7.10.4" "@babel/preset-env" "^7.10.4" - "@serverless-stack/core" "^0.4.1" - "@serverless-stack/resources" "^0.4.1" + "@serverless-stack/core" "^0.4.3" + "@serverless-stack/resources" "^0.4.3" "@types/jest" "^26.0.7" "@types/node" "^14.0.27" "@typescript-eslint/eslint-plugin" "^3.9.1" "@typescript-eslint/parser" "^3.9.1" - aws-cdk "1.61.0" + aws-cdk "1.79.0" chalk "^4.1.0" core-js "^3.6.5" cross-spawn "^7.0.3" @@ -1420,24 +1524,24 @@ typescript "^3.9.7" yargs "^15.4.1" -"@serverless-stack/core@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@serverless-stack/core/-/core-0.4.1.tgz#c3099627eb891696cd0321a28ed8df3df995c2f7" - integrity sha512-Fkqv/prAwNHG4Plf/HcL0VV1S5i0/q3z1K4LevS0PObM6S90jczLWLYoWmq0OGIffX/ARvHJWAxNT0F5BMCJ5A== +"@serverless-stack/core@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@serverless-stack/core/-/core-0.4.3.tgz#1f9c8b0221c718250dbadd3a7081e2e8fbef28bb" + integrity sha512-R+iUsOKMYFof+nu4O9VhZrNmiJs3ap6sxuKjXfiUwTI6Iy8wCFE5aIb3Wu0EIBmfeVe7vR4PPH9TYjh3kJ4UdA== dependencies: aws-sdk "^2.761.0" chalk "^4.1.0" sst-cdk "1.61.0-rc.25" "@serverless-stack/resources@../../../resources": - version "0.4.1" + version "0.4.3" dependencies: - "@aws-cdk/core" "1.61.0" + "@aws-cdk/core" "1.79.0" -"@serverless-stack/resources@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@serverless-stack/resources/-/resources-0.4.1.tgz#fb5f2a4459b2139661b19e750e8af2bf214d3b41" - integrity sha512-oDPFeyUo3KQN/x7FuEcmIoDDJmJnXId18g/1EkdG8nCWnbGF28tAsfT95Qv6qLjxBPlgV5rKW6b6z6djJkYwKQ== +"@serverless-stack/resources@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@serverless-stack/resources/-/resources-0.4.3.tgz#1a9143ccedb1e5458d6c3cd32e8be531ee27e4a6" + integrity sha512-cYE2aTHbToj71xZyEbCMH5+5jZEHx2ebL/gA5eEC0JUnlrfCIt6K3buO4nIKvOY01hQD/kS6OLM40x6keV2F3A== dependencies: "@aws-cdk/core" "1.61.0" @@ -1455,10 +1559,15 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": - version "7.1.9" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d" - integrity sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw== + version "7.1.12" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" + integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1467,41 +1576,36 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.1" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04" - integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew== + version "7.6.2" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" + integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" - integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + version "7.4.0" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" + integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.13" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.13.tgz#1874914be974a492e1b4cb00585cabb274e8ba18" - integrity sha512-i+zS7t6/s9cdQvbqKDARrcbrPvtJGlbYsMkazo03nTAK3RX9FNrLllXys22uiTGJapPOTZTQ35nHh4ISph4SLQ== +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0" + integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg== dependencies: "@babel/types" "^7.3.0" -"@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== - "@types/eslint-visitor-keys@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== "@types/graceful-fs@^4.1.2": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.3.tgz#039af35fe26bec35003e8d86d2ee9c586354348f" - integrity sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ== + version "4.1.4" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.4.tgz#4ff9f641a7c6d1a3508ff88bc3141b152772e753" + integrity sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg== dependencies: "@types/node" "*" @@ -1517,31 +1621,30 @@ dependencies: "@types/istanbul-lib-coverage" "*" -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== +"@types/istanbul-reports@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" + integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== dependencies: - "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" -"@types/jest@^26.0.7": - version "26.0.9" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.9.tgz#0543b57da5f0cd949c5f423a00c56c492289c989" - integrity sha512-k4qFfJ5AUKrWok5KYXp2EPm89b0P/KZpl7Vg4XuOTVVQEhLDBDBU3iBFrjjdgd8fLw96aAtmnwhXHl63bWeBQQ== +"@types/jest@26.x", "@types/jest@^26.0.7": + version "26.0.19" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.19.tgz#e6fa1e3def5842ec85045bd5210e9bb8289de790" + integrity sha512-jqHoirTG61fee6v6rwbnEuKhpSKih0tuhqeFbCmMmErhtu3BYlOZaXWjffgOstMM4S/3iQD31lI5bGLTrs97yQ== dependencies: - jest-diff "^25.2.1" - pretty-format "^25.2.1" + jest-diff "^26.0.0" + pretty-format "^26.0.0" "@types/json-schema@^7.0.3": - version "7.0.5" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" - integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== "@types/node@*", "@types/node@^14.0.27": - version "14.0.27" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1" - integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g== + version "14.14.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.14.tgz#f7fd5f3cc8521301119f63910f0fb965c7d761ae" + integrity sha512-UHnOPWVWV1z+VV8k6L1HhG7UbGBgIdghqF3l9Ny9ApPghbjICXkUJSd/b9gOgQfjM1r+37cipdw/HJ3F6ICEnQ== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -1549,14 +1652,14 @@ integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== "@types/prettier@^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.0.2.tgz#5bb52ee68d0f8efa9cc0099920e56be6cc4e37f3" - integrity sha512-IkVfat549ggtkZUthUzEX49562eGikhSYeVGX97SkMFn+sTZrgRewXjQ4tPKFPCykZHkX1Zfd9OoELGqKU2jJA== + version "2.1.5" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.5.tgz#b6ab3bba29e16b821d84e09ecfaded462b816b00" + integrity sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ== -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== +"@types/stack-utils@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" + integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== "@types/yargs-parser@*": version "15.0.0" @@ -1564,9 +1667,9 @@ integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== "@types/yargs@^15.0.0": - version "15.0.5" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79" - integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w== + version "15.0.12" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.12.tgz#6234ce3e3e3fa32c5db301a170f96a599c960d74" + integrity sha512-f+fD/fQAo3BCbCDlrUpznF1A5Zp9rB0noS5vnoormHSIPFKL0Z2DcUJ3Gxp5ytH4uLRNxy7AwYUC9exZzqGMAw== dependencies: "@types/yargs-parser" "*" @@ -1631,9 +1734,9 @@ eslint-visitor-keys "^1.1.0" abab@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.4.tgz#6dfa57b417ca06d21b2478f0e638302f99c2405c" - integrity sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ== + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== acorn-globals@^6.0.0: version "6.0.0" @@ -1643,10 +1746,10 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-jsx@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" - integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== +acorn-jsx@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== acorn-walk@^7.1.1: version "7.2.0" @@ -1654,9 +1757,9 @@ acorn-walk@^7.1.1: integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== acorn@^7.1.1, acorn@^7.4.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" - integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== agent-base@4, agent-base@^4.2.0, agent-base@^4.3.0: version "4.3.0" @@ -1665,6 +1768,13 @@ agent-base@4, agent-base@^4.2.0, agent-base@^4.3.0: dependencies: es6-promisify "^5.0.0" +agent-base@6, agent-base@^6.0.0: + 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" + agent-base@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" @@ -1672,20 +1782,10 @@ agent-base@~4.2.1: dependencies: es6-promisify "^5.0.0" -ajv@^6.10.0: - version "6.12.4" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" - integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^6.10.2, ajv@^6.12.3: - version "6.12.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" - integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -1722,11 +1822,10 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: - "@types/color-name" "^1.1.1" color-convert "^2.0.1" anymatch@^2.0.0: @@ -1737,7 +1836,7 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.3: +anymatch@^3.0.3, anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== @@ -1774,6 +1873,19 @@ archiver@^4.0.2: tar-stream "^2.1.2" zip-stream "^3.0.1" +archiver@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.1.0.tgz#05b0f6f7836f3e6356a0532763d2bb91017a7e37" + integrity sha512-iKuQUP1nuKzBC2PFlGet5twENzCfyODmvkxwDV0cEFXavwcLrIW5ssTuHi9dyTPvpWr6Faweo2eQaQiLIwyXTA== + dependencies: + archiver-utils "^2.1.0" + async "^3.2.0" + buffer-crc32 "^0.2.1" + readable-stream "^3.6.0" + readdir-glob "^1.0.0" + tar-stream "^2.1.4" + zip-stream "^4.0.4" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1819,15 +1931,29 @@ assign-symbols@^1.0.0: integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= ast-types@0.x.x: - version "0.13.3" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.3.tgz#50da3f28d17bdbc7969a3a2d83a0e4a72ae755a7" - integrity sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA== + version "0.14.2" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" + integrity sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA== + dependencies: + tslib "^2.0.1" + +ast-types@^0.13.2: + version "0.13.4" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" + integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== + dependencies: + tslib "^2.0.1" astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" @@ -1853,54 +1979,39 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -aws-cdk@1.61.0: - version "1.61.0" - resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-1.61.0.tgz#b1e1a55c64dff5825b3961b56c2b5fcb7ac472e9" - integrity sha512-deLtRq3DkiUB/5EN8ZCWLdXY0Uhm+fUvA1WSO8lzEhl71SmD7dyEHqvl7k96WPrIhUkS0nbiz6a+WC0QadIthg== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cloudformation-diff" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - archiver "^4.0.2" - aws-sdk "^2.739.0" - camelcase "^6.0.0" - cdk-assets "1.61.0" +aws-cdk@1.79.0: + version "1.79.0" + resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-1.79.0.tgz#56521f87a6e9e6eafc940b39f9632d3bd95f4174" + integrity sha512-7cnEk963IUKbk0SiLEBH86MBl7TFvzYiJLaY/gyWp0hFGayd5C9RmJ/QDkw/caT5GIjYiGSnoyFWyMSV0o47fQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cloudformation-diff" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + "@aws-cdk/yaml-cfn" "1.79.0" + archiver "^5.1.0" + aws-sdk "^2.804.0" + camelcase "^6.2.0" + cdk-assets "1.79.0" colors "^1.4.0" decamelize "^4.0.0" fs-extra "^9.0.1" glob "^7.1.6" json-diff "^0.5.4" minimatch ">=3.0" - promptly "^3.0.3" - proxy-agent "^3.1.1" - semver "^7.2.2" + promptly "^3.2.0" + proxy-agent "^4.0.0" + semver "^7.3.2" source-map-support "^0.5.19" - table "^5.4.6" - uuid "^8.3.0" + table "^6.0.4" + uuid "^8.3.1" wrap-ansi "^7.0.0" - yaml "^1.10.0" - yargs "^15.4.1" - -aws-sdk@^2.739.0: - version "2.743.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.743.0.tgz#c72a471c80cf88d78d854c780de861fb8475ae34" - integrity sha512-xujZGeA5gnbPBIlq6w/b+WYDKLXYiPWeVHvR0LKcvLLAr8IgzYYInmLx+7CU6ynXuBwVQtqGl2lZ2JSZbnMydg== - dependencies: - buffer "4.9.2" - events "1.1.1" - ieee754 "1.1.13" - jmespath "0.15.0" - querystring "0.2.0" - sax "1.2.1" - url "0.10.3" - uuid "3.3.2" - xml2js "0.4.19" + yargs "^16.2.0" -aws-sdk@^2.761.0: - version "2.774.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.774.0.tgz#1d9512ae42f0cfb9b98d0d6e0d7df7634cf4e680" - integrity sha512-3a/fM1E3nCPwT4AVbysOWCMmsu/TOdJDD3urjywWE/qO1JShxRwLSdRLD1xRkacR9JcnydfkmdU0qk+VsM3nqg== +aws-sdk@^2.739.0, aws-sdk@^2.761.0, aws-sdk@^2.804.0: + version "2.813.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.813.0.tgz#16104b91a286c1fc8ca6480ac32ccebb955f6148" + integrity sha512-uOeJ6DgsImQLv0eC0KHloFgDP788A1MEYTKdSV+1Bjv1iqQHH3bJcH5DPPX2NSyeaXJAjkVSVT2Fqe4s5Vf9TA== dependencies: buffer "4.9.2" events "1.1.1" @@ -1918,20 +2029,20 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" - integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -babel-jest@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.2.2.tgz#70f618f2d7016ed71b232241199308985462f812" - integrity sha512-JmLuePHgA+DSOdOL8lPxCgD2LhPPm+rdw1vnxR73PpIrnmKCS2/aBhtkAcxQWuUcW2hBrH8MJ3LKXE7aWpNZyA== +babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== dependencies: - "@jest/transform" "^26.2.2" - "@jest/types" "^26.2.0" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" "@types/babel__core" "^7.1.7" babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.2.0" + babel-preset-jest "^26.6.2" chalk "^4.0.0" graceful-fs "^4.2.4" slash "^3.0.0" @@ -1954,20 +2065,20 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^4.0.0" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.2.0.tgz#bdd0011df0d3d513e5e95f76bd53b51147aca2dd" - integrity sha512-B/hVMRv8Nh1sQ1a3EY8I0n4Y1Wty3NrR5ebOyVT302op+DOAau+xNEImGMsUWOC3++ZlMooCytKz+NgN8aKGbA== +babel-plugin-jest-hoist@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-preset-current-node-syntax@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.3.tgz#b4b547acddbf963cba555ba9f9cbbb70bfd044da" - integrity sha512-uyexu1sVwcdFnyq9o8UQYsXwXflIh8LvrF5+cKrYam93ned1CStffB3+BEcsxGSgagoA3GEyjDqO4a/58hyPYQ== +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" @@ -1980,24 +2091,25 @@ babel-preset-current-node-syntax@^0.1.2: "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.2.0.tgz#f198201a4e543a43eb40bc481e19736e095fd3e0" - integrity sha512-R1k8kdP3R9phYQugXeNnK/nvCGlBzG4m3EoIIukC80GXb6wCv2XiwPhK6K9MAkQcMszWBYvl2Wm+yigyXFQqXg== +babel-preset-jest@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== dependencies: - babel-plugin-jest-hoist "^26.2.0" - babel-preset-current-node-syntax "^0.1.2" + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== +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== base@^0.11.1: version "0.11.2" @@ -2024,17 +2136,15 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== -bl@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a" - integrity sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ== +bl@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" + integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== dependencies: buffer "^5.5.0" inherits "^2.0.4" @@ -2064,7 +2174,7 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1: +braces@^3.0.1, 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== @@ -2076,15 +2186,16 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.12.0, browserslist@^4.8.5: - version "4.14.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.0.tgz#2908951abfe4ec98737b72f34c3bcedc8d43b000" - integrity sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ== +browserslist@^4.14.5, browserslist@^4.15.0: + version "4.16.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.0.tgz#410277627500be3cb28a1bfe037586fbedf9488b" + integrity sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ== dependencies: - caniuse-lite "^1.0.30001111" - electron-to-chromium "^1.3.523" - escalade "^3.0.2" - node-releases "^1.1.60" + caniuse-lite "^1.0.30001165" + colorette "^1.2.1" + electron-to-chromium "^1.3.621" + escalade "^3.1.1" + node-releases "^1.1.67" bs-logger@0.x: version "0.2.6" @@ -2120,12 +2231,12 @@ buffer@4.9.2: isarray "^1.0.0" buffer@^5.1.0, buffer@^5.5.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" - integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" + base64-js "^1.3.1" + ieee754 "^1.1.13" bytes@3.1.0: version "3.1.0" @@ -2147,6 +2258,14 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +call-bind@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" + integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.0" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -2157,15 +2276,15 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" - integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== +camelcase@^6.0.0, camelcase@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== -caniuse-lite@^1.0.30001111: - version "1.0.30001112" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001112.tgz#0fffc3b934ff56ff0548c37bc9dad7d882bcf672" - integrity sha512-J05RTQlqsatidif/38aN3PGULCLrg8OYQOlJUKbeYVzC2mGZkZLIztwRlB3MtrfLmawUmjFlNJvy/uhwniIe1Q== +caniuse-lite@^1.0.30001165: + version "1.0.30001168" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001168.tgz#6fcd098c139d003b9bd484cbb9ca26cb89907f9a" + integrity sha512-P2zmX7swIXKu+GMMR01TWa4csIKELTNnZKc+f1CjebmZJQtTAEXmpQSoKVJVVcvPGAA0TEYTOUp3VehavZSFPQ== capture-exit@^2.0.0: version "2.0.0" @@ -2191,6 +2310,18 @@ cdk-assets@1.61.0: glob "^7.1.6" yargs "^15.4.1" +cdk-assets@1.79.0: + version "1.79.0" + resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.79.0.tgz#e786037816823a46a1beb8cd66f29598122b6bd5" + integrity sha512-sV0dD5KF16CYuJ38Paori/jVP1ORTTB3gnv2Gw8VqA3nTK0F8JyfzIxNLNuUKsKBl7ASvlt5ldDiA7RDQHmQBA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + archiver "^5.1.0" + aws-sdk "^2.804.0" + glob "^7.1.6" + yargs "^16.2.0" + chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -2200,14 +2331,6 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@^4.0.0, chalk@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" @@ -2226,30 +2349,31 @@ charenc@0.0.2: resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" +chokidar@^3.4.0: + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" optionalDependencies: - fsevents "^1.2.7" + fsevents "~2.1.2" ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +cjs-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -2276,6 +2400,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +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" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -2318,6 +2451,11 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + colors@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" @@ -2350,15 +2488,25 @@ compress-commons@^3.0.0: normalize-path "^3.0.0" readable-stream "^2.3.7" +compress-commons@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.0.2.tgz#d6896be386e52f37610cef9e6fa5defc58c31bd7" + integrity sha512-qhd32a9xgzmpfoga1VQEiLEwdKZ6Plnpx5UCgIsf89FSolyJ7WnifY4Gtjgv5WR6hWAyRaHxC5MiEhU/38U70A== + dependencies: + buffer-crc32 "^0.2.13" + crc32-stream "^4.0.1" + 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 sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== +constructs@^3.0.4, constructs@^3.2.0: + version "3.2.74" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.74.tgz#e5650eed2451ca264178a6798c343e3b63fa14fe" + integrity sha512-kINDYW5Xnv/FY+4fbg3G34jvS/kfZ0Th2j/nPPG08peUkXExkY6CB/tarmYmkLIsHGI25x83pQHGDoFl7L8JLA== convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" @@ -2372,24 +2520,32 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.6.2: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" - integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== +core-js-compat@^3.8.0: + version "3.8.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.1.tgz#8d1ddd341d660ba6194cbe0ce60f4c794c87a36e" + integrity sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ== dependencies: - browserslist "^4.8.5" + browserslist "^4.15.0" semver "7.0.0" core-js@^3.6.5: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" - integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== + version "3.8.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.1.tgz#f51523668ac8a294d1285c3b9db44025fda66d47" + integrity sha512-9Id2xHY1W7m8hCl8NkhQn5CufmF/WuR30BTRewvCXc1aZd3kMECwNZ69ndLbekKfakw9Rf2Xyc+QR6E7Gg+obg== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +crc-32@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" + integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== + dependencies: + exit-on-epipe "~1.0.1" + printj "~1.1.0" + crc32-stream@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85" @@ -2398,6 +2554,14 @@ crc32-stream@^3.0.1: crc "^3.4.4" readable-stream "^3.4.0" +crc32-stream@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.1.tgz#0f047d74041737f8a55e86837a1b826bd8ab0067" + integrity sha512-FN5V+weeO/8JaXsamelVYO1PHyeCsuL3HcG4cqsj0ceARcocxalaShCsohZMSAF+db7UYFwBy1rARK/0oFItUw== + dependencies: + crc-32 "^1.2.0" + readable-stream "^3.4.0" + crc@^3.4.4: version "3.8.0" resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" @@ -2459,6 +2623,11 @@ data-uri-to-buffer@1: resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" integrity sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ== +data-uri-to-buffer@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" + integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== + data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -2483,16 +2652,16 @@ debug@3.1.0: ms "2.0.0" debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: - ms "^2.1.1" + ms "2.1.2" debug@^3.1.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" @@ -2507,9 +2676,9 @@ decamelize@^4.0.0: integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== decimal.js@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.0.tgz#39466113a9e036111d02f82489b5fd6b0b5ed231" - integrity sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw== + version "10.2.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" + integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== decode-uri-component@^0.2.0: version "0.2.0" @@ -2526,7 +2695,7 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== -define-properties@^1.1.2: +define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -2564,6 +2733,15 @@ degenerator@^1.0.4: escodegen "1.x.x" esprima "3.x.x" +degenerator@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-2.2.0.tgz#49e98c11fa0293c5b26edfbb52f15729afcdb254" + integrity sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg== + dependencies: + ast-types "^0.13.2" + escodegen "^1.8.1" + esprima "^4.0.0" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -2579,21 +2757,21 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" - integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== - -diff-sequences@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.0.0.tgz#0760059a5c287637b842bd7085311db7060e88a6" - integrity sha512-JC/eHYEC3aSS0vZGjuoc4vHA0yAQTzhQQldXMeMF+JlxLGJlCO38Gma82NV9gk1jGFz8mDzUMeaKXvjRRdJ2dg== +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== diff@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +diff@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + difflib@~0.2.1: version "0.2.4" resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" @@ -2630,15 +2808,15 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron-to-chromium@^1.3.523: - version "1.3.526" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.526.tgz#0e004899edf75afc172cce1b8189aac5dca646aa" - integrity sha512-HiroW5ZbGwgT8kCnoEO8qnGjoTPzJxduvV/Vv/wH63eo2N6Zj3xT5fmmaSPAPUM05iN9/5fIEkIg3owTtV6QZg== +electron-to-chromium@^1.3.621: + version "1.3.629" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.629.tgz#a08d13b64d90e3c77ec5b9bffa3efbc5b4a00969" + integrity sha512-iSPPJtPvHrMAvYOt+9cdbDmTasPqwnwz4lkP8Dn200gDNUBQOLQ96xUsWXBwXslAo5XxdoXAoQQ3RAy4uao9IQ== emittery@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.1.tgz#c02375a927a40948c0345cc903072597f5270451" - integrity sha512-d34LN4L6h18Bzz9xpoku2nPwKxCPlPMr3EEKTkoEBi+1/+b0lcRkRJ1UVyyZaKNeqGR3swcGl6s390DNO4YVgQ== + version "0.7.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" + integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== emoji-regex@^7.0.1: version "7.0.3" @@ -2688,10 +2866,10 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -escalade@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" - integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== +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.5: version "1.0.5" @@ -2703,7 +2881,7 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@1.x.x, escodegen@^1.14.1: +escodegen@1.x.x, escodegen@^1.14.1, escodegen@^1.8.1: version "1.14.3" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== @@ -2720,7 +2898,7 @@ eslint-rule-composer@^0.3.0: resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== -eslint-scope@5.1.0, eslint-scope@^5.0.0, eslint-scope@^5.1.0: +eslint-scope@5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== @@ -2728,6 +2906,14 @@ eslint-scope@5.1.0, eslint-scope@^5.0.0, eslint-scope@^5.1.0: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint-scope@^5.0.0, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + eslint-utils@^2.0.0, eslint-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" @@ -2740,25 +2926,31 @@ eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + eslint@^7.7.0: - version "7.7.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.7.0.tgz#18beba51411927c4b64da0a8ceadefe4030d6073" - integrity sha512-1KUxLzos0ZVsyL81PnRN335nDtQ8/vZUD6uMtWbF+5zDtjKcsklIi78XoE0MVL93QvWTu+E5y44VyyCsOMBrIg== + version "7.15.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.15.0.tgz#eb155fb8ed0865fcf5d903f76be2e5b6cd7e0bc7" + integrity sha512-Vr64xFDT8w30wFll643e7cGrIkPEU50yIiI36OdSIDoSGguIeaLzBo0vpGvzo9RECUqq7htURfwEtKqwytkqzA== dependencies: "@babel/code-frame" "^7.0.0" + "@eslint/eslintrc" "^0.2.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.0.1" doctrine "^3.0.0" enquirer "^2.3.5" - eslint-scope "^5.1.0" + eslint-scope "^5.1.1" eslint-utils "^2.1.0" - eslint-visitor-keys "^1.3.0" - espree "^7.2.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" esquery "^1.2.0" esutils "^2.0.2" - file-entry-cache "^5.0.1" + file-entry-cache "^6.0.0" functional-red-black-tree "^1.0.1" glob-parent "^5.0.0" globals "^12.1.0" @@ -2782,13 +2974,13 @@ eslint@^7.7.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^7.2.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" - integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== dependencies: acorn "^7.4.0" - acorn-jsx "^5.2.0" + acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" esprima@3.x.x: @@ -2808,7 +3000,7 @@ esquery@^1.2.0: dependencies: estraverse "^5.1.0" -esrecurse@^4.1.0: +esrecurse@^4.1.0, esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== @@ -2854,9 +3046,9 @@ execa@^1.0.0: strip-eof "^1.0.0" execa@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2" - integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A== + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== dependencies: cross-spawn "^7.0.0" get-stream "^5.0.0" @@ -2868,6 +3060,11 @@ execa@^4.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +exit-on-epipe@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" + integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -2886,16 +3083,16 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.2.0.tgz#0140dd9cc7376d7833852e9cda88c05414f1efba" - integrity sha512-8AMBQ9UVcoUXt0B7v+5/U5H6yiUR87L6eKCfjE3spx7Ya5lF+ebUo37MCFBML2OiLfkX1sxmQOZhIDonyVTkcw== +expect@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.6.2" ansi-styles "^4.0.0" - jest-get-type "^26.0.0" - jest-matcher-utils "^26.2.0" - jest-message-util "^26.2.0" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" jest-regex-util "^26.0.0" extend-shallow@^2.0.1: @@ -2964,18 +3161,23 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== +file-entry-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" + integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== dependencies: - flat-cache "^2.0.1" + flat-cache "^3.0.4" -file-uri-to-path@1, file-uri-to-path@1.0.0: +file-uri-to-path@1: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +file-uri-to-path@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba" + integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg== + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -3001,19 +3203,18 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" + flatted "^3.1.0" + rimraf "^3.0.2" -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== +flatted@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067" + integrity sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA== for-in@^1.0.2: version "1.0.2" @@ -3046,6 +3247,15 @@ fs-constants@^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@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-extra@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" @@ -3066,20 +3276,17 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - fsevents@^2.1.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.2.1.tgz#1fb02ded2036a8ac288d507a65962bd87b97628d" + integrity sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA== + +fsevents@~2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== -ftp@~0.3.10: +ftp@^0.3.10, ftp@~0.3.10: version "0.3.10" resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0= @@ -3098,15 +3305,24 @@ functional-red-black-tree@^1.0.1: integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= gensync@^1.0.0-beta.1: - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" - integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, 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.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" + integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" @@ -3120,12 +3336,24 @@ get-stream@^4.0.0: pump "^3.0.0" get-stream@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" - integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + 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-uri@3: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c" + integrity sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg== + dependencies: + "@tootallnate/once" "1" + data-uri-to-buffer "3" + debug "4" + file-uri-to-path "2" + fs-extra "^8.1.0" + ftp "^0.3.10" + get-uri@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.4.tgz#d4937ab819e218d4cb5ae18e4f5962bef169cc6a" @@ -3158,7 +3386,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0: +glob-parent@^5.0.0, glob-parent@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== @@ -3222,7 +3450,7 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.0: +has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== @@ -3258,6 +3486,13 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" +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" + "heap@>= 0.2.0": version "0.2.6" resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" @@ -3299,6 +3534,15 @@ http-proxy-agent@^2.1.0: agent-base "4" debug "3.1.0" +http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -3308,6 +3552,14 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +https-proxy-agent@5, https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + https-proxy-agent@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81" @@ -3328,20 +3580,30 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@1.1.13, ieee754@^1.1.4: +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: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -import-fresh@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== +ignore@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e" + integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -3372,13 +3634,6 @@ inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, i resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -invariant@^2.2.2, invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" @@ -3415,6 +3670,13 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +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-buffer@^1.1.5, is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -3427,6 +3689,13 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-core-module@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -3503,7 +3772,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -3634,77 +3903,67 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.2.0.tgz#b4946201defe0c919a2f3d601e9f98cb21dacc15" - integrity sha512-+RyJb+F1K/XBLIYiL449vo5D+CvlHv29QveJUWNPXuUicyZcq+tf1wNxmmFeRvAU1+TzhwqczSjxnCCFt7+8iA== +jest-changed-files@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.6.2" execa "^4.0.0" throat "^5.0.0" -jest-cli@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.2.2.tgz#4c273e5474baafac1eb15fd25aaafb4703f5ffbc" - integrity sha512-vVcly0n/ijZvdy6gPQiQt0YANwX2hLTPQZHtW7Vi3gcFdKTtif7YpI85F8R8JYy5DFSWz4x1OW0arnxlziu5Lw== +jest-cli@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== dependencies: - "@jest/core" "^26.2.2" - "@jest/test-result" "^26.2.0" - "@jest/types" "^26.2.0" + "@jest/core" "^26.6.3" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" is-ci "^2.0.0" - jest-config "^26.2.2" - jest-util "^26.2.0" - jest-validate "^26.2.0" + jest-config "^26.6.3" + jest-util "^26.6.2" + jest-validate "^26.6.2" prompts "^2.0.1" - yargs "^15.3.1" + yargs "^15.4.1" -jest-config@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.2.2.tgz#f3ebc7e2bc3f49de8ed3f8007152f345bb111917" - integrity sha512-2lhxH0y4YFOijMJ65usuf78m7+9/8+hAb1PZQtdRdgnQpAb4zP6KcVDDktpHEkspBKnc2lmFu+RQdHukUUbiTg== +jest-config@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.2.2" - "@jest/types" "^26.2.0" - babel-jest "^26.2.2" + "@jest/test-sequencer" "^26.6.3" + "@jest/types" "^26.6.2" + babel-jest "^26.6.3" chalk "^4.0.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" - jest-environment-jsdom "^26.2.0" - jest-environment-node "^26.2.0" - jest-get-type "^26.0.0" - jest-jasmine2 "^26.2.2" + jest-environment-jsdom "^26.6.2" + jest-environment-node "^26.6.2" + jest-get-type "^26.3.0" + jest-jasmine2 "^26.6.3" jest-regex-util "^26.0.0" - jest-resolve "^26.2.2" - jest-util "^26.2.0" - jest-validate "^26.2.0" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" micromatch "^4.0.2" - pretty-format "^26.2.0" + pretty-format "^26.6.2" -jest-diff@^25.2.1: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" - integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== - dependencies: - chalk "^3.0.0" - diff-sequences "^25.2.6" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - -jest-diff@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.2.0.tgz#dee62c771adbb23ae585f3f1bd289a6e8ef4f298" - integrity sha512-Wu4Aopi2nzCsHWLBlD48TgRy3Z7OsxlwvHNd1YSnHc7q1NJfrmyCPoUXrTIrydQOG5ApaYpsAsdfnMbJqV1/wQ== +jest-diff@^26.0.0, jest-diff@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== dependencies: chalk "^4.0.0" - diff-sequences "^26.0.0" - jest-get-type "^26.0.0" - pretty-format "^26.2.0" + diff-sequences "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" jest-docblock@^26.0.0: version "26.0.0" @@ -3713,135 +3972,131 @@ jest-docblock@^26.0.0: dependencies: detect-newline "^3.0.0" -jest-each@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.2.0.tgz#aec8efa01d072d7982c900e74940863385fa884e" - integrity sha512-gHPCaho1twWHB5bpcfnozlc6mrMi+VAewVPNgmwf81x2Gzr6XO4dl+eOrwPWxbkYlgjgrYjWK2xgKnixbzH3Ew== +jest-each@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.6.2" chalk "^4.0.0" - jest-get-type "^26.0.0" - jest-util "^26.2.0" - pretty-format "^26.2.0" - -jest-environment-jsdom@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.2.0.tgz#6443a6f3569297dcaa4371dddf93acaf167302dc" - integrity sha512-sDG24+5M4NuIGzkI3rJW8XUlrpkvIdE9Zz4jhD8OBnVxAw+Y1jUk9X+lAOD48nlfUTlnt3lbAI3k2Ox+WF3S0g== - dependencies: - "@jest/environment" "^26.2.0" - "@jest/fake-timers" "^26.2.0" - "@jest/types" "^26.2.0" + jest-get-type "^26.3.0" + jest-util "^26.6.2" + pretty-format "^26.6.2" + +jest-environment-jsdom@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" - jest-mock "^26.2.0" - jest-util "^26.2.0" - jsdom "^16.2.2" - -jest-environment-node@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.2.0.tgz#fee89e06bdd4bed3f75ee2978d73ede9bb57a681" - integrity sha512-4M5ExTYkJ19efBzkiXtBi74JqKLDciEk4CEsp5tTjWGYMrlKFQFtwIVG3tW1OGE0AlXhZjuHPwubuRYY4j4uOw== - dependencies: - "@jest/environment" "^26.2.0" - "@jest/fake-timers" "^26.2.0" - "@jest/types" "^26.2.0" + jest-mock "^26.6.2" + jest-util "^26.6.2" + jsdom "^16.4.0" + +jest-environment-node@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" - jest-mock "^26.2.0" - jest-util "^26.2.0" + jest-mock "^26.6.2" + jest-util "^26.6.2" -jest-get-type@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" - integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== - -jest-get-type@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.0.0.tgz#381e986a718998dbfafcd5ec05934be538db4039" - integrity sha512-zRc1OAPnnws1EVfykXOj19zo2EMw5Hi6HLbFCSjpuJiXtOWAYIjNsHVSbpQ8bDX7L5BGYGI8m+HmKdjHYFF0kg== +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== -jest-haste-map@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.2.2.tgz#6d4267b1903854bfdf6a871419f35a82f03ae71e" - integrity sha512-3sJlMSt+NHnzCB+0KhJ1Ut4zKJBiJOlbrqEYNdRQGlXTv8kqzZWjUKQRY3pkjmlf+7rYjAV++MQ4D6g4DhAyOg== +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.6.2" "@types/graceful-fs" "^4.1.2" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.4" jest-regex-util "^26.0.0" - jest-serializer "^26.2.0" - jest-util "^26.2.0" - jest-worker "^26.2.1" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" micromatch "^4.0.2" sane "^4.0.3" walker "^1.0.7" optionalDependencies: fsevents "^2.1.2" -jest-jasmine2@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.2.2.tgz#d82b1721fac2b153a4f8b3f0c95e81e702812de2" - integrity sha512-Q8AAHpbiZMVMy4Hz9j1j1bg2yUmPa1W9StBvcHqRaKa9PHaDUMwds8LwaDyzP/2fkybcTQE4+pTMDOG9826tEw== +jest-jasmine2@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.2.0" - "@jest/source-map" "^26.1.0" - "@jest/test-result" "^26.2.0" - "@jest/types" "^26.2.0" + "@jest/environment" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^26.2.0" + expect "^26.6.2" is-generator-fn "^2.0.0" - jest-each "^26.2.0" - jest-matcher-utils "^26.2.0" - jest-message-util "^26.2.0" - jest-runtime "^26.2.2" - jest-snapshot "^26.2.2" - jest-util "^26.2.0" - pretty-format "^26.2.0" + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" throat "^5.0.0" -jest-leak-detector@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.2.0.tgz#073ee6d8db7a9af043e7ce99d8eea17a4fb0cc50" - integrity sha512-aQdzTX1YiufkXA1teXZu5xXOJgy7wZQw6OJ0iH5CtQlOETe6gTSocaYKUNui1SzQ91xmqEUZ/WRavg9FD82rtQ== +jest-leak-detector@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== dependencies: - jest-get-type "^26.0.0" - pretty-format "^26.2.0" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" -jest-matcher-utils@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.2.0.tgz#b107af98c2b8c557ffd46c1adf06f794aa52d622" - integrity sha512-2cf/LW2VFb3ayPHrH36ZDjp9+CAeAe/pWBAwsV8t3dKcrINzXPVxq8qMWOxwt5BaeBCx4ZupVGH7VIgB8v66vQ== +jest-matcher-utils@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== dependencies: chalk "^4.0.0" - jest-diff "^26.2.0" - jest-get-type "^26.0.0" - pretty-format "^26.2.0" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" -jest-message-util@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.2.0.tgz#757fbc1323992297092bb9016a71a2eb12fd22ea" - integrity sha512-g362RhZaJuqeqG108n1sthz5vNpzTNy926eNDszo4ncRbmmcMRIUAZibnd6s5v2XSBCChAxQtCoN25gnzp7JbQ== +jest-message-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== dependencies: "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.2.0" - "@types/stack-utils" "^1.0.1" + "@jest/types" "^26.6.2" + "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.4" micromatch "^4.0.2" + pretty-format "^26.6.2" slash "^3.0.0" stack-utils "^2.0.2" -jest-mock@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.2.0.tgz#a1b3303ab38c34aa1dbbc16ab57cdc1a59ed50d1" - integrity sha512-XeC7yWtWmWByoyVOHSsE7NYsbXJLtJNgmhD7z4MKumKm6ET0si81bsSLbQ64L5saK3TgsHo2B/UqG5KNZ1Sp/Q== +jest-mock@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.6.2" "@types/node" "*" jest-pnp-resolver@^1.2.2: @@ -3854,185 +4109,187 @@ jest-regex-util@^26.0.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== -jest-resolve-dependencies@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.2.2.tgz#2ad3cd9281730e9a5c487cd846984c5324e47929" - integrity sha512-S5vufDmVbQXnpP7435gr710xeBGUFcKNpNswke7RmFvDQtmqPjPVU/rCeMlEU0p6vfpnjhwMYeaVjKZAy5QYJA== +jest-resolve-dependencies@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.6.2" jest-regex-util "^26.0.0" - jest-snapshot "^26.2.2" + jest-snapshot "^26.6.2" -jest-resolve@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.2.2.tgz#324a20a516148d61bffa0058ed0c77c510ecfd3e" - integrity sha512-ye9Tj/ILn/0OgFPE/3dGpQPUqt4dHwIocxt5qSBkyzxQD8PbL0bVxBogX2FHxsd3zJA7V2H/cHXnBnNyyT9YoQ== +jest-resolve@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" + integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.6.2" chalk "^4.0.0" graceful-fs "^4.2.4" jest-pnp-resolver "^1.2.2" - jest-util "^26.2.0" + jest-util "^26.6.2" read-pkg-up "^7.0.1" - resolve "^1.17.0" + resolve "^1.18.1" slash "^3.0.0" -jest-runner@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.2.2.tgz#6d03d057886e9c782e10b2cf37443f902fe0e39e" - integrity sha512-/qb6ptgX+KQ+aNMohJf1We695kaAfuu3u3ouh66TWfhTpLd9WbqcF6163d/tMoEY8GqPztXPLuyG0rHRVDLxCA== +jest-runner@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== dependencies: - "@jest/console" "^26.2.0" - "@jest/environment" "^26.2.0" - "@jest/test-result" "^26.2.0" - "@jest/types" "^26.2.0" + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" chalk "^4.0.0" emittery "^0.7.1" exit "^0.1.2" graceful-fs "^4.2.4" - jest-config "^26.2.2" + jest-config "^26.6.3" jest-docblock "^26.0.0" - jest-haste-map "^26.2.2" - jest-leak-detector "^26.2.0" - jest-message-util "^26.2.0" - jest-resolve "^26.2.2" - jest-runtime "^26.2.2" - jest-util "^26.2.0" - jest-worker "^26.2.1" + jest-haste-map "^26.6.2" + jest-leak-detector "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + jest-runtime "^26.6.3" + jest-util "^26.6.2" + jest-worker "^26.6.2" source-map-support "^0.5.6" throat "^5.0.0" -jest-runtime@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.2.2.tgz#2480ff79320680a643031dd21998d7c63d83ab68" - integrity sha512-a8VXM3DxCDnCIdl9+QucWFfQ28KdqmyVFqeKLigHdErtsx56O2ZIdQkhFSuP1XtVrG9nTNHbKxjh5XL1UaFDVQ== - dependencies: - "@jest/console" "^26.2.0" - "@jest/environment" "^26.2.0" - "@jest/fake-timers" "^26.2.0" - "@jest/globals" "^26.2.0" - "@jest/source-map" "^26.1.0" - "@jest/test-result" "^26.2.0" - "@jest/transform" "^26.2.2" - "@jest/types" "^26.2.0" +jest-runtime@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/globals" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" "@types/yargs" "^15.0.0" chalk "^4.0.0" + cjs-module-lexer "^0.6.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-config "^26.2.2" - jest-haste-map "^26.2.2" - jest-message-util "^26.2.0" - jest-mock "^26.2.0" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" jest-regex-util "^26.0.0" - jest-resolve "^26.2.2" - jest-snapshot "^26.2.2" - jest-util "^26.2.0" - jest-validate "^26.2.0" + jest-resolve "^26.6.2" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" slash "^3.0.0" strip-bom "^4.0.0" - yargs "^15.3.1" + yargs "^15.4.1" -jest-serializer@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.2.0.tgz#92dcae5666322410f4bf50211dd749274959ddac" - integrity sha512-V7snZI9IVmyJEu0Qy0inmuXgnMWDtrsbV2p9CRAcmlmPVwpC2ZM8wXyYpiugDQnwLHx0V4+Pnog9Exb3UO8M6Q== +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== dependencies: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.2.2.tgz#9d2eda083a4a1017b157e351868749bd63211799" - integrity sha512-NdjD8aJS7ePu268Wy/n/aR1TUisG0BOY+QOW4f6h46UHEKOgYmmkvJhh2BqdVZQ0BHSxTMt04WpCf9njzx8KtA== +jest-snapshot@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== dependencies: "@babel/types" "^7.0.0" - "@jest/types" "^26.2.0" + "@jest/types" "^26.6.2" + "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.0.0" chalk "^4.0.0" - expect "^26.2.0" + expect "^26.6.2" graceful-fs "^4.2.4" - jest-diff "^26.2.0" - jest-get-type "^26.0.0" - jest-haste-map "^26.2.2" - jest-matcher-utils "^26.2.0" - jest-message-util "^26.2.0" - jest-resolve "^26.2.2" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + jest-haste-map "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" natural-compare "^1.4.0" - pretty-format "^26.2.0" + pretty-format "^26.6.2" semver "^7.3.2" -jest-util@26.x, jest-util@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.2.0.tgz#0597d2a27c559340957609f106c408c17c1d88ac" - integrity sha512-YmDwJxLZ1kFxpxPfhSJ0rIkiZOM0PQbRcfH0TzJOhqCisCAsI1WcmoQqO83My9xeVA2k4n+rzg2UuexVKzPpig== +jest-util@^26.1.0, jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.6.2" "@types/node" "*" chalk "^4.0.0" graceful-fs "^4.2.4" is-ci "^2.0.0" micromatch "^4.0.2" -jest-validate@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.2.0.tgz#97fedf3e7984b7608854cbf925b9ca6ebcbdb78a" - integrity sha512-8XKn3hM6VIVmLNuyzYLCPsRCT83o8jMZYhbieh4dAyKLc4Ypr36rVKC+c8WMpWkfHHpGnEkvWUjjIAyobEIY/Q== +jest-validate@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== dependencies: - "@jest/types" "^26.2.0" + "@jest/types" "^26.6.2" camelcase "^6.0.0" chalk "^4.0.0" - jest-get-type "^26.0.0" + jest-get-type "^26.3.0" leven "^3.1.0" - pretty-format "^26.2.0" + pretty-format "^26.6.2" -jest-watcher@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.2.0.tgz#45bdf2fecadd19c0a501f3b071a474dca636825b" - integrity sha512-674Boco4Joe0CzgKPL6K4Z9LgyLx+ZvW2GilbpYb8rFEUkmDGgsZdv1Hv5rxsRpb1HLgKUOL/JfbttRCuFdZXQ== +jest-watcher@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== dependencies: - "@jest/test-result" "^26.2.0" - "@jest/types" "^26.2.0" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^26.2.0" + jest-util "^26.6.2" string-length "^4.0.1" -jest-worker@^26.2.1: - version "26.2.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.2.1.tgz#5d630ab93f666b53f911615bc13e662b382bd513" - integrity sha512-+XcGMMJDTeEGncRb5M5Zq9P7K4sQ1sirhjdOxsN1462h6lFo9w59bl2LVQmdGEEeU3m+maZCkS2Tcc9SfCHO4A== +jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^7.0.0" jest@^26.1.0: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.2.2.tgz#a022303887b145147204c5f66e6a5c832333c7e7" - integrity sha512-EkJNyHiAG1+A8pqSz7cXttoVa34hOEzN/MrnJhYnfp5VHxflVcf2pu3oJSrhiy6LfIutLdWo+n6q63tjcoIeig== + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" + integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== dependencies: - "@jest/core" "^26.2.2" + "@jest/core" "^26.6.3" import-local "^3.0.2" - jest-cli "^26.2.2" + jest-cli "^26.6.3" jmespath@0.15.0: version "0.15.0" resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc= -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: +js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + 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" @@ -4042,7 +4299,7 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsdom@^16.2.2: +jsdom@^16.4.0: version "16.4.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== @@ -4093,10 +4350,10 @@ json-diff@^0.5.4: difflib "~0.2.1" dreamopt "~0.6.0" -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" @@ -4125,19 +4382,26 @@ json5@2.x, json5@^2.1.2: dependencies: minimist "^1.2.5" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: - universalify "^1.0.0" + universalify "^2.0.0" optionalDependencies: graceful-fs "^4.1.6" -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== +jsonschema@^1.2.5, jsonschema@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== jsprim@^1.2.2: version "1.4.1" @@ -4190,13 +4454,6 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -levenary@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" - integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== - dependencies: - leven "^3.1.0" - levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -4260,23 +4517,11 @@ lodash.union@^4.6.0: resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= -lodash@^4.17.14, lodash@^4.17.19: - version "4.17.19" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" - integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== - -lodash@^4.17.15: +lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== -loose-envify@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -4284,6 +4529,13 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +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" + make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -4406,33 +4658,26 @@ mkdirp@1.x: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@^2.1.1: +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== +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nan@^2.12.1: - version "2.14.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" - integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== - nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -4475,22 +4720,22 @@ node-modules-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= -node-notifier@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-7.0.2.tgz#3a70b1b70aca5e919d0b1b022530697466d9c675" - integrity sha512-ux+n4hPVETuTL8+daJXTOC6uKLgMsl1RYfFv7DKRzyvzBapqco0rZZ9g72ZN8VS6V+gvNYHYa/ofcCY8fkJWsA== +node-notifier@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.1.tgz#f86e89bbc925f2b068784b31f382afdc6ca56be1" + integrity sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA== dependencies: growly "^1.3.0" is-wsl "^2.2.0" semver "^7.3.2" shellwords "^0.1.1" - uuid "^8.2.0" + uuid "^8.3.0" which "^2.0.2" -node-releases@^1.1.60: - version "1.1.60" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084" - integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA== +node-releases@^1.1.67: + version "1.1.67" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12" + integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg== normalize-package-data@^2.5.0: version "2.5.0" @@ -4509,7 +4754,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.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== @@ -4547,7 +4792,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-keys@^1.0.11, object-keys@^1.0.12: +object-keys@^1.0.12, 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== @@ -4560,14 +4805,14 @@ object-visit@^1.0.0: isobject "^3.0.0" object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" object.pick@^1.3.0: version "1.3.0" @@ -4584,9 +4829,9 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: wrappy "1" onetime@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.1.tgz#5c8016847b0d67fcedb7eef254751cfcdc7e9418" - integrity sha512-ZpZpjcJeugQfWsfyQlshVoowIIQ1qBGSVll4rfDq6JJVO//fesjoX808hXWfBjY+ROZgpKDI5TRSRBSoJiZ8eg== + 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" @@ -4615,9 +4860,9 @@ optionator@^0.9.1: word-wrap "^1.2.3" p-each-series@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" - integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== p-finally@^1.0.0: version "1.0.0" @@ -4657,6 +4902,21 @@ pac-proxy-agent@^3.0.1: raw-body "^2.2.0" socks-proxy-agent "^4.0.1" +pac-proxy-agent@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz#66883eeabadc915fc5e95457324cb0f0ac78defb" + integrity sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + get-uri "3" + http-proxy-agent "^4.0.1" + https-proxy-agent "5" + pac-resolver "^4.1.0" + raw-body "^2.2.0" + socks-proxy-agent "5" + pac-resolver@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26" @@ -4668,6 +4928,15 @@ pac-resolver@^3.0.0: netmask "^1.0.6" thunkify "^2.1.2" +pac-resolver@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-4.1.0.tgz#4b12e7d096b255a3b84e53f6831f32e9c7e5fe95" + integrity sha512-d6lf2IrZJJ7ooVHr7BfwSjRO1yKSJMaiiWYSHcrxSIUtZrCa4KKGwcztdkZ/E9LFleJfjoi1yl+XLR7AX24nbQ== + dependencies: + degenerator "^2.2.0" + ip "^1.1.5" + netmask "^1.0.6" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -4676,13 +4945,13 @@ parent-module@^1.0.0: callsites "^3.0.0" parse-json@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.1.tgz#7cfe35c1ccd641bce3981467e6c2ece61b3b3878" - integrity sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ== + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" + integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== dependencies: "@babel/code-frame" "^7.0.0" error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" + json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" parse5@5.1.1: @@ -4730,16 +4999,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.5: +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -4774,25 +5038,20 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -pretty-format@^25.2.1, pretty-format@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" - integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== +pretty-format@^26.0.0, pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== dependencies: - "@jest/types" "^25.5.0" + "@jest/types" "^26.6.2" ansi-regex "^5.0.0" ansi-styles "^4.0.0" - react-is "^16.12.0" + react-is "^17.0.1" -pretty-format@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.2.0.tgz#83ecc8d7de676ff224225055e72bd64821cec4f1" - integrity sha512-qi/8IuBu2clY9G7qCXgCdD1Bf9w+sXakdHTRToknzMtVy0g7c4MBWaZy7MfB7ndKZovRO6XRwJiAYqq+MC7SDA== - dependencies: - "@jest/types" "^26.2.0" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^16.12.0" +printj@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" + integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== process-nextick-args@~2.0.0: version "2.0.1" @@ -4804,21 +5063,20 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promptly@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/promptly/-/promptly-3.0.3.tgz#e178f722e73d82c60d019462044bccfdd9872f42" - integrity sha512-EWnzOsxVKUjqKeE6SStH1/cO4+DE44QolaoJ4ojGd9z6pcNkpgfJKr1ncwxrOFHSTIzoudo7jG8y0re30/LO1g== +promptly@^3.0.3, promptly@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/promptly/-/promptly-3.2.0.tgz#a5517fbbf59bd31c1751d4e1d9bef1714f42b9d8" + integrity sha512-WnR9obtgW+rG4oUV3hSnNGl1pHm3V1H/qD9iJBumGSmVsSC5HpZOLuu8qdMb6yCItGfT7dcRszejr/5P3i9Pug== dependencies: - pify "^3.0.0" read "^1.0.4" prompts@^2.0.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" - integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" + integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== dependencies: kleur "^3.0.3" - sisteransi "^1.0.4" + sisteransi "^1.0.5" proxy-agent@^3.1.1: version "3.1.1" @@ -4834,6 +5092,20 @@ proxy-agent@^3.1.1: proxy-from-env "^1.0.0" socks-proxy-agent "^4.0.1" +proxy-agent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-4.0.0.tgz#a92976af3fbc7d846f2e850e2ac5ac6ca3fb74c7" + integrity sha512-8P0Y2SkwvKjiGU1IkEfYuTteioMIDFxPL4/j49zzt5Mz3pG1KO+mIrDG1qH0PQUHTTczjwGcYl+EzfXiFj5vUQ== + dependencies: + agent-base "^6.0.0" + debug "4" + http-proxy-agent "^4.0.0" + https-proxy-agent "^5.0.0" + lru-cache "^5.1.1" + pac-proxy-agent "^4.1.0" + proxy-from-env "^1.0.0" + socks-proxy-agent "^5.0.0" + proxy-from-env@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -4882,10 +5154,10 @@ raw-body@^2.2.0: iconv-lite "0.4.24" unpipe "1.0.0" -react-is@^16.12.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-is@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" + integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== read-pkg-up@^7.0.1: version "7.0.1" @@ -4945,6 +5217,13 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdir-glob@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4" + integrity sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA== + dependencies: + minimatch "^3.0.4" + readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -4954,6 +5233,13 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + regenerate-unicode-properties@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" @@ -4962,9 +5248,9 @@ regenerate-unicode-properties@^8.2.0: regenerate "^1.4.0" regenerate@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" - integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.13.4: version "0.13.7" @@ -4991,10 +5277,10 @@ regexpp@^3.0.0, regexpp@^3.1.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== -regexpu-core@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" - integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== dependencies: regenerate "^1.4.0" regenerate-unicode-properties "^8.2.0" @@ -5104,11 +5390,12 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.10.0, resolve@^1.17.0, resolve@^1.3.2: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== +resolve@^1.10.0, resolve@^1.18.1: + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== dependencies: + is-core-module "^2.1.0" path-parse "^1.0.6" ret@~0.1.10: @@ -5116,14 +5403,7 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -5200,9 +5480,11 @@ semver@7.0.0: integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== semver@7.x, semver@^7.2.1, semver@^7.2.2, semver@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" semver@^6.0.0, semver@^6.3.0: version "6.3.0" @@ -5263,7 +5545,7 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -sisteransi@^1.0.4: +sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== @@ -5287,6 +5569,15 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + smart-buffer@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" @@ -5322,6 +5613,15 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +socks-proxy-agent@5, socks-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" + integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== + dependencies: + agent-base "6" + debug "4" + socks "^2.3.3" + socks-proxy-agent@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" @@ -5330,6 +5630,14 @@ socks-proxy-agent@^4.0.1: agent-base "~4.2.1" socks "~2.3.2" +socks@^2.3.3: + version "2.5.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.5.1.tgz#7720640b6b5ec9a07d556419203baa3f0596df5f" + integrity sha512-oZCsJJxapULAYJaEYBSzMcz8m3jqgGrHaGhkmU/o/PQfFWYWxkAaA0UMGImb6s6tEXfKi959X6VJjMMQ3P6TTQ== + dependencies: + ip "^1.1.5" + smart-buffer "^4.1.0" + socks@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" @@ -5399,9 +5707,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + version "3.0.7" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -5460,9 +5768,9 @@ sst-cdk@1.61.0-rc.25: yargs "^15.4.1" stack-utils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593" - integrity sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg== + version "2.0.3" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" + integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== dependencies: escape-string-regexp "^2.0.0" @@ -5558,7 +5866,7 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@^3.1.0: +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -5571,9 +5879,9 @@ supports-color@^5.3.0: has-flag "^3.0.0" supports-color@^7.0.0, supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + 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" @@ -5600,12 +5908,22 @@ table@^5.2.3, table@^5.4.6: slice-ansi "^2.1.0" string-width "^3.0.0" -tar-stream@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.3.tgz#1e2022559221b7866161660f118255e20fa79e41" - integrity sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA== +table@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.4.tgz#c523dd182177e926c723eb20e1b341238188aa0d" + integrity sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw== + dependencies: + ajv "^6.12.4" + lodash "^4.17.20" + slice-ansi "^4.0.0" + string-width "^4.2.0" + +tar-stream@^2.1.2, tar-stream@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.4.tgz#c4fb1a11eb0da29b893a5b25476397ba2d053bfa" + integrity sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw== dependencies: - bl "^4.0.1" + bl "^4.0.3" end-of-stream "^1.4.1" fs-constants "^1.0.0" inherits "^2.0.3" @@ -5715,25 +6033,31 @@ tr46@^2.0.2: punycode "^2.1.1" ts-jest@^26.1.4: - version "26.1.4" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.1.4.tgz#87d41a96016a8efe4b8cc14501d3785459af6fa6" - integrity sha512-Nd7diUX6NZWfWq6FYyvcIPR/c7GbEF75fH1R6coOp3fbNzbRJBZZAn0ueVS0r8r9ral1VcrpneAFAwB3TsVS1Q== + version "26.4.4" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.4.4.tgz#61f13fb21ab400853c532270e52cc0ed7e502c49" + integrity sha512-3lFWKbLxJm34QxyVNNCgXX1u4o/RV0myvA2y2Bxm46iGIjKlaY0own9gIckbjZJPn+WaJEnfPPJ20HHGpoq4yg== dependencies: + "@types/jest" "26.x" bs-logger "0.x" buffer-from "1.x" fast-json-stable-stringify "2.x" - jest-util "26.x" + jest-util "^26.1.0" json5 "2.x" lodash.memoize "4.x" make-error "1.x" mkdirp "1.x" semver "7.x" - yargs-parser "18.x" + yargs-parser "20.x" tslib@^1.8.1: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" - integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" + integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== tsutils@^3.17.1: version "3.17.1" @@ -5833,11 +6157,21 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + universalify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -5857,9 +6191,9 @@ upath@^1.1.1: integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== dependencies: punycode "^2.1.0" @@ -5896,20 +6230,20 @@ uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.2.0, uuid@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" - integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== +uuid@^8.3.0, uuid@^8.3.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8-compile-cache@^2.0.3: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" - integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== -v8-to-istanbul@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6" - integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ== +v8-to-istanbul@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz#b4fe00e35649ef7785a9b7fcebcea05f37c332fc" + integrity sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" @@ -5976,13 +6310,13 @@ whatwg-mimetype@^2.3.0: integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== whatwg-url@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.1.0.tgz#c628acdcf45b82274ce7281ee31dd3c839791771" - integrity sha512-vEIkwNi9Hqt4TV9RdnaBPNt+E2Sgmo3gePebCRgZ1R7g6d23+53zCTnuB0amKI4AXq6VM8jj2DUAa0S1vjJxkw== + version "8.4.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" + integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== dependencies: lodash.sortby "^4.7.0" tr46 "^2.0.2" - webidl-conversions "^5.0.0" + webidl-conversions "^6.1.0" which-module@^2.0.0: version "2.0.0" @@ -6046,17 +6380,10 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - ws@^7.2.3: - version "7.3.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" - integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== + version "7.4.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.1.tgz#a333be02696bd0e54cea0434e21dcc8a9ac294bb" + integrity sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ== xml-name-validator@^3.0.0: version "3.0.0" @@ -6087,21 +6414,36 @@ xregexp@2.0.0: integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + +y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yaml@^1.10.0: +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@1.10.0, yaml@^1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== -yargs-parser@18.x, yargs-parser@^18.1.2: +yargs-parser@20.x, yargs-parser@^20.2.2: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^18.1.2: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== @@ -6109,7 +6451,7 @@ yargs-parser@18.x, yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@^15.3.1, yargs@^15.4.1: +yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -6126,6 +6468,19 @@ yargs@^15.3.1, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" +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" + zip-stream@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-3.0.1.tgz#cb8db9d324a76c09f9b76b31a12a48638b0b9708" @@ -6134,3 +6489,12 @@ zip-stream@^3.0.1: archiver-utils "^2.1.0" compress-commons "^3.0.0" readable-stream "^3.6.0" + +zip-stream@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.0.4.tgz#3a8f100b73afaa7d1ae9338d910b321dec77ff3a" + integrity sha512-a65wQ3h5gcQ/nQGWV1mSZCEzCML6EK/vyVPcrPNynySP1j3VBbQKh3nhC8CbORb+jfl2vXvh56Ul5odP1bAHqw== + dependencies: + archiver-utils "^2.1.0" + compress-commons "^4.0.2" + readable-stream "^3.6.0" diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index 93351e19a8..25214e04f8 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -15,11 +15,11 @@ "author": "", "dependencies": { "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-dynamodb": "1.61.0", - "@aws-cdk/core": "1.61.0" + "@aws-cdk/aws-dynamodb": "1.79.0", + "@aws-cdk/core": "1.79.0" }, "license": "ISC", "devDependencies": { - "@aws-cdk/assert": "1.61.0" + "@aws-cdk/assert": "1.79.0" } } diff --git a/packages/cli/test/jest/yarn.lock b/packages/cli/test/jest/yarn.lock index df51708c58..d21b0ab62c 100644 --- a/packages/cli/test/jest/yarn.lock +++ b/packages/cli/test/jest/yarn.lock @@ -2,337 +2,370 @@ # yarn lockfile v1 -"@aws-cdk/assert@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.61.0.tgz#c1dbbf71fd64beb067a6e6237e03686319acaaa7" - integrity sha512-avvDVpyd8zLMT0HEW1K2ngP5U8CHu+BtPinUkLpLXVJ+Cr5K12plnk84+BOWe1NhM9/bqC4b1KA0c6MzIzgREA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cloudformation-diff" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.61.0.tgz#9702ba8ef5b3c45ec47e0530006d63dc0685a5ff" - integrity sha512-VJfH8oVAsIa5lo+SmDF5d6r1J9Fb9TrnQINrzr68shhdY/RAkys5cr9SXO4lcpWmGsNXB9z+tEtEz9IT79e2QA== - dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-applicationautoscaling@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.61.0.tgz#8129984ba0185bbb525fd8ef6328c5c84e51e4e5" - integrity sha512-KP2zJ2hJYZgrl2glfCFpK0l9PJderMNS2MAH7xr0JuiFwAPuJgNEmOkrtVAgrsTGFDBisvXQpqr6L84EQxBfyw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-autoscaling-common@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.61.0.tgz#9e7f6a8669b36001b846d90fa8cb65d8b4edb27b" - integrity sha512-Mc02ZTp6gGGOycYHygyTWfXMajOi5bEAq6d6nJOQdzZSj2oiRmtQeF/Fd4earXFcl+lhSFMyUPEQPvZyvngQWQ== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudformation@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.61.0.tgz#6810e5327aa53b6d73cb337af340db152284aad7" - integrity sha512-e7mti0sWR6Sf4tav36bu379kkG5E33VMPLZaT8RkhXkIl97c1OaGHVx5G1Oe5DiHka08c+PA6da8ahkrR1wSkQ== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-cloudwatch@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.61.0.tgz#3c0171ca76d086da424c1b4148a53c4d68dd885a" - integrity sha512-/Lp+8OU82m2+VX0GDeO8RIzyJDEvZQQaSQYflXRAFxFDrHiU6i4kXLbr1j4jebB9r+NSEAZ6XopBNg+JsAXGug== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-codeguruprofiler@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.61.0.tgz#1ace4c61a4a7b916f4dbe28070b5b914949e6f06" - integrity sha512-eS+evPzEOP2rODucLcNSIlXNozA+/6Pf2H0Igde5UiMmYSX3/ZRXm/EytKNtyF7pnWiWMymmBLwCue2V/FDV0w== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - -"@aws-cdk/aws-dynamodb@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.61.0.tgz#3d9b1ffd6eb965152a2456de1b08625d3f3ee907" - integrity sha512-Qd87xJNTjCRBQ//H4WA6Lif3VuA9QuyKyterlmTGnmrUsAqubkKtxu/lLvMp0gQb9LzjQ5Hn9238v1s8rDBDlw== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/custom-resources" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ec2@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.61.0.tgz#d39b1f5356c57089b963bbe4644adc02fd12a4bf" - integrity sha512-mW1tij3tuvHfgNlLQst1XkvSOoV/r3iUQFLhJ8QMG8h0KUiHRyY0i+kj3Ern4GxlwNUfM6RY3f12qtSpRpVPxQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-ssm" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-efs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.61.0.tgz#c4d66d0d928c01c8018c1c8bc75a1c5097d649ce" - integrity sha512-WeF3SF681V43E+u2j78om+y4r1Ay4JPTAns8y6SFcZOLqH+6qlXusGrwQoZcHpD4MTSU60NZKD8O0u1A111osg== - dependencies: - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-events@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.61.0.tgz#718fd427ee09a11e30c96b66c88bc9b6169f5dff" - integrity sha512-DBEi/XPnWvQJ42dv28JdQSHGUz9N6fqYjR8FSNc2s0oXgDqGQ+8rU1Hxcj6s2Qb7lBQ66pHsvlpUcqZANIoddw== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-iam@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.61.0.tgz#df38b5a3a33dd28f89d57884190fe429b2507bb9" - integrity sha512-CDFrRPkt4JR9iSVn+D18ThU201m2Ck2T5+E9044yJqkUgfbcMXO54ls2DlLbCg1RUrazRrqQ9Bu0IxDHbTwaKg== - dependencies: - "@aws-cdk/core" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-kms@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.61.0.tgz#a6b8429893e31be15b151ef7357e0560920d5527" - integrity sha512-taSQYpcPM705NN32W2UcgNfezTQbqx5YZDR+jp7A/E4OVdR1jojDJn6LKzsIo71s7DDG/k+77oNXEIJsaIhSRA== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-lambda@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.61.0.tgz#65b2fb456f6c2d0566401bd3d265f5bae47d6346" - integrity sha512-LhO/f50ovtsd2uUjLdeTEFdnQlbvXvC4VN5BEnX4X2kpdCpUXsnClVb9EQPEAFaDIE6VEpMnQ6rUR27kTerLCg== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.61.0" - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-codeguruprofiler" "1.61.0" - "@aws-cdk/aws-ec2" "1.61.0" - "@aws-cdk/aws-efs" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-logs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.61.0.tgz#430bb5fc87ec606416ffb0869f04754185092a21" - integrity sha512-swEkiF+VFfsfY2GiCO8o9vzAQVnDUghmCZmg2B1oi4QwG850CBiPzAz88QaZOzqX1YWWXTcGU20yADg6D5nRIw== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-s3-assets" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3-assets@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.61.0.tgz#8512ac0e16818bc78eff010d15d6cc99a7d8fccf" - integrity sha512-sipvqw0fJcpT3+Hxdzn2UkbBh/tr+jkzplLq2Jk5Jr0E/7+V5t2kmlEQgyG82ug1J2DERMAdlie8AgzGJ5CxhA== - dependencies: - "@aws-cdk/assets" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-s3" "1.61.0" - "@aws-cdk/core" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-s3@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.61.0.tgz#a16d697a26d02b6d25636a0606016fbc187eae86" - integrity sha512-tFemzJJtopsiDbcjwpqsSY9xm3wZLWKEg2/9iAAZ4VUEW4feoX7NQyVkYHGH2dfMVufXq/rMZPfbKq7f3cgzAg== - dependencies: - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sns@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.61.0.tgz#c82f9b224b7ebf3e48cd9433456156e5d3f1df89" - integrity sha512-jmJmZXidJAJTg4lPnxMm26QR3ovMYb/89NBWnIRwGdVGcZ7nrWUkC0JNPQMbP+EvUFdh/9xdFVP4JvvzZzoy0w== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-events" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/aws-sqs" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-sqs@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.61.0.tgz#b2d1d7a5d27d36d1580a3cb500daf417037da492" - integrity sha512-gyShf5rmUZCovSHL4PXvAD6TA/xmPESpsi+zx7HU/VXyeGgO6inq/sVzWM0OpCrNUnnoSct5p0yZJytRBnVYaA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/aws-ssm@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.61.0.tgz#229308cfce757f8b3f75d12bf276ce4f8042076f" - integrity sha512-fOr2g7V7pR9bP7CXWLznM3d0/8EW76pjKLe+uGeXpqnrtXaGCvFBjiAms10oZ2584bn2bWIzikGmzzxzpamJbg== - dependencies: - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-kms" "1.61.0" - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/cfnspec@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.61.0.tgz#69e998ab83c0a478b76e1c5deb8484171dfd95f9" - integrity sha512-Ss5N3unY6iVh9SjYAYvTyvhdb7Kaz6dVFeV8K68UGewiFcHpC5tQi3YmlVBw3HCgKoRt20emiHAfmdfeGO/PUQ== +"@aws-cdk/assert@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.79.0.tgz#c30e904bff8dbabcc3ca6ee01904da1fc7a980e7" + integrity sha512-wCiMyxhtUz82blUlSnfoqpHdSjgFOkjpunjgxT2aG5Y6RTN0ExOOm9pdKDdXnul0zml6ZvfOL51wDG0Udg7zFg== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cloudformation-diff" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/assets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.79.0.tgz#e97548a20e7fe9af8ebda8639ff275058211b128" + integrity sha512-h4FVseJK2lZ+FB8reFm0V37x0HEyg4mD8DGTb0akIz2A3U0ltmML+PN8EPANxLpSDOPYg2OLNAgPw5MOqXNC5A== + dependencies: + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-applicationautoscaling@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.79.0.tgz#1211274a8c4a2a15e7a97cacc096eb775b9c207d" + integrity sha512-ctgfkgKorVui7xF01U9djVCnhMrtvnSl0B7LUAnI6gy6uFrzpg9rfaW845c8O+6211OP2v9zrBl06GGPeACkCQ== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-autoscaling-common@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.79.0.tgz#aa0516cafe8a5d9cf9ca642d05cf8fa0ce5fb79a" + integrity sha512-ZgprhHWRVvBz8Vh0sXYGdRiUm7cga4IzwHftuVu4MUWYu3IlQSm92tj9wv7dfttIT8v4z5idXsDzu3Og91lcjA== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudformation@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.79.0.tgz#9f15101c3e1230d2ee1111d0e9ea9cade851b8ee" + integrity sha512-Rayo5xGbfE1gtsgXDcxun1vJJRDbA7VPJtfuMdh0cikpTeTA0/iMfpmg96Rgg+Ry/cxkHV8AFQAU0Va6uHiR2w== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudwatch@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.79.0.tgz#3bbeb41369d250470e87adc7e78d9f3d12a442ff" + integrity sha512-lbcrfUwI/9rvFCMyRa7g8DskqAXThDVrRM4SAdHAX/MCV5cBcb3GA1HzFfnILsq5RXPwoC4WT7hhxMibM4A0iA== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-codeguruprofiler@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.79.0.tgz#5aee986accca91b966e1a91ddc69d75d6c15721e" + integrity sha512-DF7MCJOCSGy9RV6X1ebhHOIggXOsJ21pQUs0mAClTt3/DPNEr0EQuiN30VhaiPxgUnbN3FTppLSLUzjIJSWbQA== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-dynamodb@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.79.0.tgz#a7c03b3d28dddcb7430fbc3ef813dbb94796b214" + integrity sha512-4JYtuN67hdmyAVd0vcG8QkfxBf8RA4hv5sMwFRmxG0GuN2/iTa6Acp2XQstVk/nK8bE3BUioRRRNRK1/5amlDw== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/custom-resources" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ec2@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.79.0.tgz#9c1ae84f374980f2456acdc57985a6612c1ae897" + integrity sha512-A2pbynk5o18gKeCy/epMiaD9R4OKrXlWzaqAOvUlHOom+SkxIyZMcALdxgU26nCty0DxGfgQiNHWTgNttLuRJQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/aws-ssm" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ecr-assets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.79.0.tgz#1367783f50fc0974ee3f1f99e881b8682ac91221" + integrity sha512-pM6X3Q+Uybq9RlX5DSAKfLygyZqYA9eNFvQKmTtuiwt9A+SDAonHrv6xT9EvFQaPHpFnxESpBiuspJTr9hZggQ== + dependencies: + "@aws-cdk/assets" "1.79.0" + "@aws-cdk/aws-ecr" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + minimatch "^3.0.4" + +"@aws-cdk/aws-ecr@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr/-/aws-ecr-1.79.0.tgz#2257475e7a8ef103e9f9f7c7eff389430b4494e3" + integrity sha512-ZidVw6sdwNvMp+y75aH5k4IFMiIDCgpJ11d7tkSk1WKwoVu/pU/ZYLih/clTvFwzqzmh2A63rIyeC4+t5ziAvQ== + dependencies: + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-efs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.79.0.tgz#429163c5334977ea4d63fec70b8f076dc8432647" + integrity sha512-iWjyRFKMIvf1tcwFhwcHaLhmLFeC+iknE36t1UvRFxcBV4K8mrHxkXCsJzqZTHpaAFP/LU0pFX04o03508NRWQ== + dependencies: + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-events@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.79.0.tgz#fa676d751de3aceb4bb408f00dab6e085ca90ea6" + integrity sha512-9fyvKqSC/Sa5cVe2SyvTrTBNw8MuZ8w29JX6O9McMff1i50ZMpdSFh/r/Hq4ImfcoRJvZcyXDYJmTUI8PYR6Fg== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-iam@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.79.0.tgz#456f0cc824c6e248378fcddfecb49637d7656089" + integrity sha512-lGgmOpdE2f05vQ3oT3pWlybTNb/PQcqkbdiBfvBPRYrg5p3lCGBDFSI3bv7Bjvl7lHhFRnxHnRb4CJRAXcUQqw== + dependencies: + "@aws-cdk/core" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-kms@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.79.0.tgz#7c358ecd3823a7f965a7a091929c0afbc472d4d5" + integrity sha512-vYZUYO9GdOaalkVdJ8/7/f9KzCQh1XtU+MsKgxvXbjhLcjpt1mhPuxs0T+7fNuXbW8YVz1d6Y+BNjv4lEHz2Jw== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.79.0.tgz#dfdfd699d376d79a04e399a023b126e2904f5117" + integrity sha512-K6A0nnYRO5MGq+0UdAXk1DRcOELWSPri4f6SNaWu0zhOEBKSAzcVRTJi/cNDs5VniGbGik4/3C5Hd6+8bp5nxA== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-codeguruprofiler" "1.79.0" + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-ecr" "1.79.0" + "@aws-cdk/aws-ecr-assets" "1.79.0" + "@aws-cdk/aws-efs" "1.79.0" + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/aws-sqs" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-logs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.79.0.tgz#b7ac08de2e1c3872a6bdf49488d92bf6b7425d55" + integrity sha512-J3iYGun//JsqpMl75/b6c+yxA5nY+Dxn0s72TA/BBYzaU4wI2NohwVaqe2X4HIuHniRBVVHBfJ36B3GMKdi4cQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3-assets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.79.0.tgz#9351a396125a4a24227e071e29228c3ff9710d0b" + integrity sha512-P5ktD44LadqqX86IO/5q+cc38BsEeEaUBVCtymagCqYgZvDnkicuSMulcrbMefxUgQ6GLy+F7FuI4o9DHGb0nA== + dependencies: + "@aws-cdk/assets" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.79.0.tgz#2de74f669d9cd058679c98c701f640412e2de3da" + integrity sha512-hJM+5jZWoOS4kJ8kXLLOVwjTkWY/BvpkOxuZSLcQV3eq2RFUCwtakx+NTnu+M98eezzme9wAXnKzDFsBcocuHQ== + dependencies: + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sns@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.79.0.tgz#e5ebfa22f344e8eaab29045e1e19b78c364d5228" + integrity sha512-Kmmj0A4anar8JUk8+SZZVJqyqMfsu+9jCMhU3AkKkfpHsnDTj+qz4aPKH+36XIijCQa9A55pjgy5v+k/8WJ81A== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-sqs" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sqs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.79.0.tgz#237f16f8e18ca99e65d2909c91a7815022fa88d0" + integrity sha512-+rWIIHvygEwKmI2hyBXmoYo2sATpwzJw604Bp7stTQKcfp43vls5oq4SKjt87Gld2BO4cavF/ZCaEJO3pXMXyg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ssm@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.79.0.tgz#0731a8681b072e720d430365fb7000c8e313a3f9" + integrity sha512-92DAyXS7sZa58LMDz9Or3IlmjgS1etHCBAHM5ombbKOFFwkBdd7A41y2QNXmtv2b61yJYcyetkLkDtmjEwNMaw== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/cfnspec@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.79.0.tgz#b5fe241290f20ed1a3911ba8f0a9807aab0ec749" + integrity sha512-rbBhox7hzXPXk2n+1BDjsmiz/0W9ZHv3NeCKiq94WfHW6Jj4mSjtGs7ZUBFq8JkkgYVsE9ktH1634wt9A9fbRg== dependencies: md5 "^2.3.0" -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== +"@aws-cdk/cloud-assembly-schema@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.79.0.tgz#e089ed386f47b4e24e12e398b66d1df7894e5109" + integrity sha512-n2ARtOXIUq3FdJ1EBuHzsM0DQau6ZwHprPhpk1xc5bv21s7D5X5ECe06eC0K5xC5ZyfC13BDWu1f+xFh+krnYA== dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" + jsonschema "^1.4.0" + semver "^7.3.2" -"@aws-cdk/cloudformation-diff@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.61.0.tgz#8acb549fd1dd819aa61dfed47e011b44827045a8" - integrity sha512-TrrmywhYkXxGNTmDd1k2biJMVtEvb0QcbZ/IGM6biMXIJ+wsjw/n5snvwciQ8/PHZmsUYk67qulGdso1rpy06Q== +"@aws-cdk/cloudformation-diff@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.79.0.tgz#e26f2eaf93b26df14240c8704e056790aa0abe9b" + integrity sha512-GsX8Br7E0/2W2ugntO4zXodbApVi2C+AP/6QtTX6fasZbgZSwe8gjiXYPQ6EvtgjlWnYxPTn6vHRlb53vDFzMg== dependencies: - "@aws-cdk/cfnspec" "1.61.0" + "@aws-cdk/cfnspec" "1.79.0" colors "^1.4.0" - diff "^4.0.2" + diff "^5.0.0" fast-deep-equal "^3.1.3" string-width "^4.2.0" - table "^5.4.6" - -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" + table "^6.0.4" + +"@aws-cdk/core@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.79.0.tgz#164b2f01877259eeb1ba16617be103522ae934d6" + integrity sha512-I+2GbQfbPy6TewnGbviE1W8cUhgBEA1mQLYm5gBj/Rzix1tCyaNvfYsBU3ipg3jIATpHsg1CzUq0zrumUnmnTg== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + "@balena/dockerignore" "^1.0.2" + constructs "^3.2.0" fs-extra "^9.0.1" + ignore "^5.1.8" minimatch "^3.0.4" -"@aws-cdk/custom-resources@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.61.0.tgz#03749f4122e46504fd1b3b3b9a11aa3578f269bf" - integrity sha512-etnHE7A0+J5w1L/m+KxEbPQ7LgtVYvEUV6naqRp5uIsTBaJ9sCQ+q43Y3Fj+g3NMigm8C2fKg5FmiFE6kiymDQ== - dependencies: - "@aws-cdk/aws-cloudformation" "1.61.0" - "@aws-cdk/aws-iam" "1.61.0" - "@aws-cdk/aws-lambda" "1.61.0" - "@aws-cdk/aws-logs" "1.61.0" - "@aws-cdk/aws-sns" "1.61.0" - "@aws-cdk/core" "1.61.0" - constructs "^3.0.4" - -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" - -"@aws-cdk/region-info@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" - integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== +"@aws-cdk/custom-resources@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.79.0.tgz#2b68ee4e03a7d517693d0009e8380c045b968e90" + integrity sha512-+F4dpo/vju7kfNnajw9Fl2XwTmVG7qzYZ6weuKtfr0iFDHrBCZ5auGP45u8gHeNebnCdq51TNG9gskQ3ct5Aiw== + dependencies: + "@aws-cdk/aws-cloudformation" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/cx-api@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.79.0.tgz#c9770fdd9b14a64e7ef350aa020969902b8a182d" + integrity sha512-ymQOqHcPzYhrcQ4swMgw5JzAaOm+PehH1cepsxi/Wq2zNOXkyN9o6Hw6l+eDpezFvNIKFy4mMAo6FR9xRCUiow== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.79.0" + semver "^7.3.2" + +"@aws-cdk/region-info@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.79.0.tgz#2a47339ca2dd48b9ecae46e985c8c3dcb83de577" + integrity sha512-klnXCc1Cd/krE4VOXJ1Blvey8ucPRzuwgGacPsCV2ugMSlaJSbdGqKzTUNxcK2o8g9PaEuJ5lNjfwqqyvp571g== + +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== "@serverless-stack/resources@../../../resources": - version "0.1.3" + version "0.4.3" dependencies: - "@aws-cdk/core" "1.61.0" + "@aws-cdk/core" "1.79.0" -ajv@^6.10.2: - version "6.12.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" - integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== -ansi-styles@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== +ansi-styles@^4.0.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 "^1.9.0" + color-convert "^2.0.1" -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== at-least-node@^1.0.0: version "1.0.0" @@ -357,17 +390,17 @@ charenc@0.0.2: resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== +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.3" + color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +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== colors@^1.4.0: version "1.4.0" @@ -379,25 +412,20 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== +constructs@^3.2.0: + version "3.2.74" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.74.tgz#e5650eed2451ca264178a6798c343e3b63fa14fe" + integrity sha512-kINDYW5Xnv/FY+4fbg3G34jvS/kfZ0Th2j/nPPG08peUkXExkY6CB/tarmYmkLIsHGI25x83pQHGDoFl7L8JLA== crypt@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= -diff@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +diff@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== emoji-regex@^8.0.0: version "8.0.0" @@ -429,16 +457,16 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +ignore@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - 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" @@ -458,15 +486,22 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== +jsonschema@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== -lodash@^4.17.14: - version "4.17.19" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" - integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== +lodash@^4.17.20: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +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" md5@^2.3.0: version "2.3.0" @@ -489,28 +524,21 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -semver@^7.2.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== +semver@^7.3.2: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" + lru-cache "^6.0.0" -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" string-width@^4.2.0: version "4.2.0" @@ -521,13 +549,6 @@ string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -535,15 +556,15 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" -table@^5.4.6: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== +table@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.4.tgz#c523dd182177e926c723eb20e1b341238188aa0d" + integrity sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw== dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" + ajv "^6.12.4" + lodash "^4.17.20" + slice-ansi "^4.0.0" + string-width "^4.2.0" universalify@^1.0.0: version "1.0.0" @@ -556,3 +577,8 @@ uri-js@^4.2.2: integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== dependencies: punycode "^2.1.0" + +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== diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index be56b87a0a..6ecd4cb2f5 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -10,7 +10,7 @@ "author": "", "dependencies": { "@serverless-stack/resources": "../../../resources", - "@aws-cdk/core": "1.61.0" + "@aws-cdk/core": "1.79.0" }, "license": "ISC" } diff --git a/packages/cli/test/stack-no-prefix/yarn.lock b/packages/cli/test/stack-no-prefix/yarn.lock index 4d69cef265..793303ec09 100644 --- a/packages/cli/test/stack-no-prefix/yarn.lock +++ b/packages/cli/test/stack-no-prefix/yarn.lock @@ -2,37 +2,50 @@ # yarn lockfile v1 -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== +"@aws-cdk/cloud-assembly-schema@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.79.0.tgz#e089ed386f47b4e24e12e398b66d1df7894e5109" + integrity sha512-n2ARtOXIUq3FdJ1EBuHzsM0DQau6ZwHprPhpk1xc5bv21s7D5X5ECe06eC0K5xC5ZyfC13BDWu1f+xFh+krnYA== dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" + jsonschema "^1.4.0" + semver "^7.3.2" -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== +"@aws-cdk/core@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.79.0.tgz#164b2f01877259eeb1ba16617be103522ae934d6" + integrity sha512-I+2GbQfbPy6TewnGbviE1W8cUhgBEA1mQLYm5gBj/Rzix1tCyaNvfYsBU3ipg3jIATpHsg1CzUq0zrumUnmnTg== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + "@balena/dockerignore" "^1.0.2" + constructs "^3.2.0" fs-extra "^9.0.1" + ignore "^5.1.8" minimatch "^3.0.4" -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== +"@aws-cdk/cx-api@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.79.0.tgz#c9770fdd9b14a64e7ef350aa020969902b8a182d" + integrity sha512-ymQOqHcPzYhrcQ4swMgw5JzAaOm+PehH1cepsxi/Wq2zNOXkyN9o6Hw6l+eDpezFvNIKFy4mMAo6FR9xRCUiow== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + semver "^7.3.2" + +"@aws-cdk/region-info@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.79.0.tgz#2a47339ca2dd48b9ecae46e985c8c3dcb83de577" + integrity sha512-klnXCc1Cd/krE4VOXJ1Blvey8ucPRzuwgGacPsCV2ugMSlaJSbdGqKzTUNxcK2o8g9PaEuJ5lNjfwqqyvp571g== + +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== "@serverless-stack/resources@../../../resources": - version "0.1.3" + version "0.4.3" dependencies: - "@aws-cdk/core" "1.61.0" + "@aws-cdk/core" "1.79.0" at-least-node@^1.0.0: version "1.0.0" @@ -57,10 +70,10 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== +constructs@^3.2.0: + version "3.2.74" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.74.tgz#e5650eed2451ca264178a6798c343e3b63fa14fe" + integrity sha512-kINDYW5Xnv/FY+4fbg3G34jvS/kfZ0Th2j/nPPG08peUkXExkY6CB/tarmYmkLIsHGI25x83pQHGDoFl7L8JLA== fs-extra@^9.0.1: version "9.0.1" @@ -77,6 +90,11 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +ignore@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + jsonfile@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" @@ -86,10 +104,17 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== +jsonschema@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== + +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" minimatch@^3.0.4: version "3.0.4" @@ -98,12 +123,19 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -semver@^7.2.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== +semver@^7.3.2: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" universalify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +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== diff --git a/packages/core/package.json b/packages/core/package.json index a91040f75a..7b95954dab 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -20,6 +20,6 @@ "dependencies": { "aws-sdk": "^2.761.0", "chalk": "^4.1.0", - "sst-cdk": "1.61.0-rc.25" + "sst-cdk": "1.79.0-rc.1" } } diff --git a/packages/resources/package.json b/packages/resources/package.json index 7c2c7a37f5..e9be83f5b3 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -25,7 +25,7 @@ "access": "public" }, "dependencies": { - "@aws-cdk/core": "1.61.0" + "@aws-cdk/core": "1.79.0" }, "devDependencies": { "@types/node": "^14.0.27", diff --git a/yarn.lock b/yarn.lock index 90131f9195..c88a1bb711 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,56 +2,66 @@ # yarn lockfile v1 -"@aws-cdk/cfnspec@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.61.0.tgz#69e998ab83c0a478b76e1c5deb8484171dfd95f9" - integrity sha512-Ss5N3unY6iVh9SjYAYvTyvhdb7Kaz6dVFeV8K68UGewiFcHpC5tQi3YmlVBw3HCgKoRt20emiHAfmdfeGO/PUQ== +"@aws-cdk/cfnspec@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.79.0.tgz#b5fe241290f20ed1a3911ba8f0a9807aab0ec749" + integrity sha512-rbBhox7hzXPXk2n+1BDjsmiz/0W9ZHv3NeCKiq94WfHW6Jj4mSjtGs7ZUBFq8JkkgYVsE9ktH1634wt9A9fbRg== dependencies: md5 "^2.3.0" -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== +"@aws-cdk/cloud-assembly-schema@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.79.0.tgz#e089ed386f47b4e24e12e398b66d1df7894e5109" + integrity sha512-n2ARtOXIUq3FdJ1EBuHzsM0DQau6ZwHprPhpk1xc5bv21s7D5X5ECe06eC0K5xC5ZyfC13BDWu1f+xFh+krnYA== dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" + jsonschema "^1.4.0" + semver "^7.3.2" -"@aws-cdk/cloudformation-diff@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.61.0.tgz#8acb549fd1dd819aa61dfed47e011b44827045a8" - integrity sha512-TrrmywhYkXxGNTmDd1k2biJMVtEvb0QcbZ/IGM6biMXIJ+wsjw/n5snvwciQ8/PHZmsUYk67qulGdso1rpy06Q== +"@aws-cdk/cloudformation-diff@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.79.0.tgz#e26f2eaf93b26df14240c8704e056790aa0abe9b" + integrity sha512-GsX8Br7E0/2W2ugntO4zXodbApVi2C+AP/6QtTX6fasZbgZSwe8gjiXYPQ6EvtgjlWnYxPTn6vHRlb53vDFzMg== dependencies: - "@aws-cdk/cfnspec" "1.61.0" + "@aws-cdk/cfnspec" "1.79.0" colors "^1.4.0" - diff "^4.0.2" + diff "^5.0.0" fast-deep-equal "^3.1.3" string-width "^4.2.0" - table "^5.4.6" - -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" + table "^6.0.4" + +"@aws-cdk/core@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.79.0.tgz#164b2f01877259eeb1ba16617be103522ae934d6" + integrity sha512-I+2GbQfbPy6TewnGbviE1W8cUhgBEA1mQLYm5gBj/Rzix1tCyaNvfYsBU3ipg3jIATpHsg1CzUq0zrumUnmnTg== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + "@balena/dockerignore" "^1.0.2" + constructs "^3.2.0" fs-extra "^9.0.1" + ignore "^5.1.8" minimatch "^3.0.4" -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== +"@aws-cdk/cx-api@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.79.0.tgz#c9770fdd9b14a64e7ef350aa020969902b8a182d" + integrity sha512-ymQOqHcPzYhrcQ4swMgw5JzAaOm+PehH1cepsxi/Wq2zNOXkyN9o6Hw6l+eDpezFvNIKFy4mMAo6FR9xRCUiow== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + semver "^7.3.2" + +"@aws-cdk/region-info@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.79.0.tgz#2a47339ca2dd48b9ecae46e985c8c3dcb83de577" + integrity sha512-klnXCc1Cd/krE4VOXJ1Blvey8ucPRzuwgGacPsCV2ugMSlaJSbdGqKzTUNxcK2o8g9PaEuJ5lNjfwqqyvp571g== -"@aws-cdk/region-info@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" - integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== +"@aws-cdk/yaml-cfn@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/yaml-cfn/-/yaml-cfn-1.79.0.tgz#6d888417e8bd94bf192acfae19f7ab5e3ab75519" + integrity sha512-ABi7TSKtKl9iCN9F4OqxyDCJYGhKea8/QjLkGpZTFzi1wa512rAQBGSOrHxLvpdJFx7RH59oszrSd/kAGHwrgQ== + dependencies: + yaml "1.10.0" "@babel/cli@^7.10.5": version "7.10.5" @@ -927,6 +937,11 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -2032,6 +2047,11 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.9" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d" @@ -2287,13 +2307,20 @@ acorn@^7.1.1, acorn@^7.3.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== -agent-base@4, agent-base@^4.2.0, agent-base@^4.3.0: +agent-base@4, agent-base@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== dependencies: es6-promisify "^5.0.0" +agent-base@6, agent-base@^6.0.0: + 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" + agent-base@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" @@ -2326,6 +2353,16 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -2425,18 +2462,18 @@ archiver-utils@^2.1.0: normalize-path "^3.0.0" readable-stream "^2.0.0" -archiver@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-4.0.2.tgz#43c72865eadb4ddaaa2fb74852527b6a450d927c" - integrity sha512-B9IZjlGwaxF33UN4oPbfBkyA4V1SxNLeIhR1qY8sRXSsbdUkEHrrOvwlYFPx+8uQeCe9M+FG6KgO+imDmQ79CQ== +archiver@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.1.0.tgz#05b0f6f7836f3e6356a0532763d2bb91017a7e37" + integrity sha512-iKuQUP1nuKzBC2PFlGet5twENzCfyODmvkxwDV0cEFXavwcLrIW5ssTuHi9dyTPvpWr6Faweo2eQaQiLIwyXTA== dependencies: archiver-utils "^2.1.0" async "^3.2.0" buffer-crc32 "^0.2.1" - glob "^7.1.6" readable-stream "^3.6.0" - tar-stream "^2.1.2" - zip-stream "^3.0.1" + readdir-glob "^1.0.0" + tar-stream "^2.1.4" + zip-stream "^4.0.4" are-we-there-yet@~1.1.2: version "1.1.5" @@ -2527,10 +2564,12 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -ast-types@0.x.x: - version "0.13.3" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.3.tgz#50da3f28d17bdbc7969a3a2d83a0e4a72ae755a7" - integrity sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA== +ast-types@^0.13.2: + version "0.13.4" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" + integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== + dependencies: + tslib "^2.0.1" astral-regex@^1.0.0: version "1.0.0" @@ -2572,39 +2611,39 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -aws-cdk@1.61.0: - version "1.61.0" - resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-1.61.0.tgz#b1e1a55c64dff5825b3961b56c2b5fcb7ac472e9" - integrity sha512-deLtRq3DkiUB/5EN8ZCWLdXY0Uhm+fUvA1WSO8lzEhl71SmD7dyEHqvl7k96WPrIhUkS0nbiz6a+WC0QadIthg== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cloudformation-diff" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - archiver "^4.0.2" - aws-sdk "^2.739.0" - camelcase "^6.0.0" - cdk-assets "1.61.0" +aws-cdk@1.79.0: + version "1.79.0" + resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-1.79.0.tgz#56521f87a6e9e6eafc940b39f9632d3bd95f4174" + integrity sha512-7cnEk963IUKbk0SiLEBH86MBl7TFvzYiJLaY/gyWp0hFGayd5C9RmJ/QDkw/caT5GIjYiGSnoyFWyMSV0o47fQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cloudformation-diff" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + "@aws-cdk/yaml-cfn" "1.79.0" + archiver "^5.1.0" + aws-sdk "^2.804.0" + camelcase "^6.2.0" + cdk-assets "1.79.0" colors "^1.4.0" decamelize "^4.0.0" fs-extra "^9.0.1" glob "^7.1.6" json-diff "^0.5.4" minimatch ">=3.0" - promptly "^3.0.3" - proxy-agent "^3.1.1" - semver "^7.2.2" + promptly "^3.2.0" + proxy-agent "^4.0.0" + semver "^7.3.2" source-map-support "^0.5.19" - table "^5.4.6" - uuid "^8.3.0" + table "^6.0.4" + uuid "^8.3.1" wrap-ansi "^7.0.0" - yaml "^1.10.0" - yargs "^15.4.1" + yargs "^16.2.0" -aws-sdk@^2.739.0: - version "2.743.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.743.0.tgz#c72a471c80cf88d78d854c780de861fb8475ae34" - integrity sha512-xujZGeA5gnbPBIlq6w/b+WYDKLXYiPWeVHvR0LKcvLLAr8IgzYYInmLx+7CU6ynXuBwVQtqGl2lZ2JSZbnMydg== +aws-sdk@^2.761.0: + version "2.761.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.761.0.tgz#a677e3755fe84550de780e9be61190e8898cc032" + integrity sha512-mSzdiqlnruFlJYrQVWPMyPQ8ynJe9P5QVD+edv8HFlYDQNOwpPCjlqI9kE1VE3cVcxkh0j2Q2kfLQa/pAY2w7Q== dependencies: buffer "4.9.2" events "1.1.1" @@ -2616,10 +2655,10 @@ aws-sdk@^2.739.0: uuid "3.3.2" xml2js "0.4.19" -aws-sdk@^2.761.0: - version "2.761.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.761.0.tgz#a677e3755fe84550de780e9be61190e8898cc032" - integrity sha512-mSzdiqlnruFlJYrQVWPMyPQ8ynJe9P5QVD+edv8HFlYDQNOwpPCjlqI9kE1VE3cVcxkh0j2Q2kfLQa/pAY2w7Q== +aws-sdk@^2.804.0: + version "2.813.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.813.0.tgz#16104b91a286c1fc8ca6480ac32ccebb955f6148" + integrity sha512-uOeJ6DgsImQLv0eC0KHloFgDP788A1MEYTKdSV+1Bjv1iqQHH3bJcH5DPPX2NSyeaXJAjkVSVT2Fqe4s5Vf9TA== dependencies: buffer "4.9.2" events "1.1.1" @@ -2755,10 +2794,10 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bl@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a" - integrity sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ== +bl@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" + integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== dependencies: buffer "^5.5.0" inherits "^2.0.4" @@ -2853,7 +2892,7 @@ buffer@4.9.2: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.1.0, buffer@^5.5.0: +buffer@^5.5.0: version "5.6.0" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== @@ -2992,6 +3031,11 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== +camelcase@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + caniuse-lite@^1.0.30001111: version "1.0.30001116" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001116.tgz#f3a3dea347f9294a3bdc4292309039cc84117fb8" @@ -3009,17 +3053,17 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -cdk-assets@1.61.0: - version "1.61.0" - resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.61.0.tgz#677d85bb23ae7aa104a1b0d5892e3cfd36580a08" - integrity sha512-nZJNQq6vktb5j8xl+IYLWbN82E6EVANJQIZvOM1H/SLuYsjyuoAlIxBp6e50XqYRApnLYJ7BpDdAnLWOmfY8MQ== +cdk-assets@1.79.0: + version "1.79.0" + resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.79.0.tgz#e786037816823a46a1beb8cd66f29598122b6bd5" + integrity sha512-sV0dD5KF16CYuJ38Paori/jVP1ORTTB3gnv2Gw8VqA3nTK0F8JyfzIxNLNuUKsKBl7ASvlt5ldDiA7RDQHmQBA== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - archiver "^4.0.2" - aws-sdk "^2.739.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + archiver "^5.1.0" + aws-sdk "^2.804.0" glob "^7.1.6" - yargs "^15.4.1" + yargs "^16.2.0" chalk@^2.0.0, chalk@^2.3.1, chalk@^2.4.2: version "2.4.2" @@ -3157,6 +3201,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +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-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -3266,15 +3319,15 @@ component-emitter@^1.2.1: resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== -compress-commons@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-3.0.0.tgz#833944d84596e537224dd91cf92f5246823d4f1d" - integrity sha512-FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg== +compress-commons@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.0.2.tgz#d6896be386e52f37610cef9e6fa5defc58c31bd7" + integrity sha512-qhd32a9xgzmpfoga1VQEiLEwdKZ6Plnpx5UCgIsf89FSolyJ7WnifY4Gtjgv5WR6hWAyRaHxC5MiEhU/38U70A== dependencies: buffer-crc32 "^0.2.13" - crc32-stream "^3.0.1" + crc32-stream "^4.0.1" normalize-path "^3.0.0" - readable-stream "^2.3.7" + readable-stream "^3.6.0" concat-map@0.0.1: version "0.0.1" @@ -3314,10 +3367,10 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== +constructs@^3.2.0: + version "3.2.74" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.74.tgz#e5650eed2451ca264178a6798c343e3b63fa14fe" + integrity sha512-kINDYW5Xnv/FY+4fbg3G34jvS/kfZ0Th2j/nPPG08peUkXExkY6CB/tarmYmkLIsHGI25x83pQHGDoFl7L8JLA== conventional-changelog-angular@^5.0.3: version "5.0.11" @@ -3465,20 +3518,21 @@ cosmiconfig@^6.0.0: path-type "^4.0.0" yaml "^1.7.2" -crc32-stream@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85" - integrity sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w== +crc-32@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" + integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== dependencies: - crc "^3.4.4" - readable-stream "^3.4.0" + exit-on-epipe "~1.0.1" + printj "~1.1.0" -crc@^3.4.4: - version "3.8.0" - resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" - integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== +crc32-stream@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.1.tgz#0f047d74041737f8a55e86837a1b826bd8ab0067" + integrity sha512-FN5V+weeO/8JaXsamelVYO1PHyeCsuL3HcG4cqsj0ceARcocxalaShCsohZMSAF+db7UYFwBy1rARK/0oFItUw== dependencies: - buffer "^5.1.0" + crc-32 "^1.2.0" + readable-stream "^3.4.0" cross-spawn@^6.0.0: version "6.0.5" @@ -3548,10 +3602,10 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-uri-to-buffer@1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" - integrity sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ== +data-uri-to-buffer@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" + integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== data-urls@^2.0.0: version "2.0.0" @@ -3567,13 +3621,6 @@ dateformat@^3.0.0: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@2, debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - debug@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" @@ -3588,6 +3635,13 @@ debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" +debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + debug@^3.1.0: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -3679,14 +3733,14 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -degenerator@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" - integrity sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU= +degenerator@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-2.2.0.tgz#49e98c11fa0293c5b26edfbb52f15729afcdb254" + integrity sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg== dependencies: - ast-types "0.x.x" - escodegen "1.x.x" - esprima "3.x.x" + ast-types "^0.13.2" + escodegen "^1.8.1" + esprima "^4.0.0" delayed-stream@~1.0.0: version "1.0.0" @@ -3736,10 +3790,10 @@ diff-sequences@^26.3.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.3.0.tgz#62a59b1b29ab7fd27cef2a33ae52abe73042d0a2" integrity sha512-5j5vdRcw3CNctePNYN0Wy2e/JbWT6cAYnXv5OuqPhDpyCGc0uLu2TK0zOCJWNB9kOIfYMSpIulRaDgIi4HJ6Ig== -diff@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +diff@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== difflib@~0.2.1: version "0.2.4" @@ -3924,6 +3978,11 @@ escalade@^3.0.2: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== +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.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -3934,7 +3993,7 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@1.x.x, escodegen@^1.14.1: +escodegen@^1.14.1, escodegen@^1.8.1: version "1.14.3" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== @@ -4022,11 +4081,6 @@ espree@^7.2.0: acorn-jsx "^5.2.0" eslint-visitor-keys "^1.3.0" -esprima@3.x.x: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -4104,6 +4158,11 @@ execa@^4.0.0, execa@^4.0.1: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +exit-on-epipe@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" + integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -4247,11 +4306,16 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" -file-uri-to-path@1, file-uri-to-path@1.0.0: +file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +file-uri-to-path@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba" + integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg== + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -4426,7 +4490,7 @@ fsevents@^2.1.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== -ftp@~0.3.10: +ftp@^0.3.10: version "0.3.10" resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0= @@ -4468,7 +4532,7 @@ gensync@^1.0.0-beta.1: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, 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== @@ -4518,17 +4582,17 @@ get-stream@^5.0.0: dependencies: pump "^3.0.0" -get-uri@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.4.tgz#d4937ab819e218d4cb5ae18e4f5962bef169cc6a" - integrity sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q== +get-uri@3: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c" + integrity sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg== dependencies: - data-uri-to-buffer "1" - debug "2" - extend "~3.0.2" - file-uri-to-path "1" - ftp "~0.3.10" - readable-stream "2" + "@tootallnate/once" "1" + data-uri-to-buffer "3" + debug "4" + file-uri-to-path "2" + fs-extra "^8.1.0" + ftp "^0.3.10" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" @@ -4793,6 +4857,15 @@ http-proxy-agent@^2.1.0: agent-base "4" debug "3.1.0" +http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -4802,6 +4875,14 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +https-proxy-agent@5, https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + https-proxy-agent@^2.2.3: version "2.2.4" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" @@ -4810,14 +4891,6 @@ https-proxy-agent@^2.2.3: agent-base "^4.3.0" debug "^3.1.0" -https-proxy-agent@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81" - integrity sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg== - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -4882,6 +4955,11 @@ ignore@^4.0.3, ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" @@ -5851,10 +5929,10 @@ jsonparse@^1.2.0: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== +jsonschema@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== jsprim@^1.2.2: version "1.4.1" @@ -6129,7 +6207,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.2.1: +lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.2.1: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== @@ -6983,30 +7061,29 @@ p-waterfall@^1.0.0: dependencies: p-reduce "^1.0.0" -pac-proxy-agent@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz#115b1e58f92576cac2eba718593ca7b0e37de2ad" - integrity sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ== +pac-proxy-agent@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz#66883eeabadc915fc5e95457324cb0f0ac78defb" + integrity sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q== dependencies: - agent-base "^4.2.0" - debug "^4.1.1" - get-uri "^2.0.0" - http-proxy-agent "^2.1.0" - https-proxy-agent "^3.0.0" - pac-resolver "^3.0.0" + "@tootallnate/once" "1" + agent-base "6" + debug "4" + get-uri "3" + http-proxy-agent "^4.0.1" + https-proxy-agent "5" + pac-resolver "^4.1.0" raw-body "^2.2.0" - socks-proxy-agent "^4.0.1" + socks-proxy-agent "5" -pac-resolver@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26" - integrity sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA== +pac-resolver@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-4.1.0.tgz#4b12e7d096b255a3b84e53f6831f32e9c7e5fe95" + integrity sha512-d6lf2IrZJJ7ooVHr7BfwSjRO1yKSJMaiiWYSHcrxSIUtZrCa4KKGwcztdkZ/E9LFleJfjoi1yl+XLR7AX24nbQ== dependencies: - co "^4.6.0" - degenerator "^1.0.4" + degenerator "^2.2.0" ip "^1.1.5" netmask "^1.0.6" - thunkify "^2.1.2" parallel-transform@^1.1.0: version "1.2.0" @@ -7250,6 +7327,11 @@ pretty-format@^26.4.0: ansi-styles "^4.0.0" react-is "^16.12.0" +printj@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" + integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== + 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" @@ -7273,12 +7355,11 @@ promise-retry@^1.1.1: err-code "^1.0.0" retry "^0.10.0" -promptly@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/promptly/-/promptly-3.0.3.tgz#e178f722e73d82c60d019462044bccfdd9872f42" - integrity sha512-EWnzOsxVKUjqKeE6SStH1/cO4+DE44QolaoJ4ojGd9z6pcNkpgfJKr1ncwxrOFHSTIzoudo7jG8y0re30/LO1g== +promptly@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/promptly/-/promptly-3.2.0.tgz#a5517fbbf59bd31c1751d4e1d9bef1714f42b9d8" + integrity sha512-WnR9obtgW+rG4oUV3hSnNGl1pHm3V1H/qD9iJBumGSmVsSC5HpZOLuu8qdMb6yCItGfT7dcRszejr/5P3i9Pug== dependencies: - pify "^3.0.0" read "^1.0.4" prompts@^2.0.1: @@ -7313,19 +7394,19 @@ protoduck@^5.0.1: dependencies: genfun "^5.0.0" -proxy-agent@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.1.1.tgz#7e04e06bf36afa624a1540be247b47c970bd3014" - integrity sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw== +proxy-agent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-4.0.0.tgz#a92976af3fbc7d846f2e850e2ac5ac6ca3fb74c7" + integrity sha512-8P0Y2SkwvKjiGU1IkEfYuTteioMIDFxPL4/j49zzt5Mz3pG1KO+mIrDG1qH0PQUHTTczjwGcYl+EzfXiFj5vUQ== dependencies: - agent-base "^4.2.0" + agent-base "^6.0.0" debug "4" - http-proxy-agent "^2.1.0" - https-proxy-agent "^3.0.0" + http-proxy-agent "^4.0.0" + https-proxy-agent "^5.0.0" lru-cache "^5.1.1" - pac-proxy-agent "^3.0.1" + pac-proxy-agent "^4.1.0" proxy-from-env "^1.0.0" - socks-proxy-agent "^4.0.1" + socks-proxy-agent "^5.0.0" proxy-from-env@^1.0.0: version "1.1.0" @@ -7500,7 +7581,7 @@ read@1, read@^1.0.4, read@~1.0.1: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@^2.3.7, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, 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== @@ -7532,6 +7613,13 @@ readable-stream@1.1.x: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdir-glob@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4" + integrity sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA== + dependencies: + minimatch "^3.0.4" + readdir-scoped-modules@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" @@ -7905,7 +7993,7 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@7.x, semver@^7.2.1, semver@^7.2.2, semver@^7.3.2: +semver@7.x, semver@^7.2.1, semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== @@ -8058,7 +8146,16 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -socks-proxy-agent@^4.0.0, socks-proxy-agent@^4.0.1: +socks-proxy-agent@5, socks-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" + integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== + dependencies: + agent-base "6" + debug "4" + socks "^2.3.3" + +socks-proxy-agent@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== @@ -8066,6 +8163,14 @@ socks-proxy-agent@^4.0.0, socks-proxy-agent@^4.0.1: agent-base "~4.2.1" socks "~2.3.2" +socks@^2.3.3: + version "2.5.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.5.1.tgz#7720640b6b5ec9a07d556419203baa3f0596df5f" + integrity sha512-oZCsJJxapULAYJaEYBSzMcz8m3jqgGrHaGhkmU/o/PQfFWYWxkAaA0UMGImb6s6tEXfKi959X6VJjMMQ3P6TTQ== + dependencies: + ip "^1.1.5" + smart-buffer "^4.1.0" + socks@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" @@ -8194,34 +8299,34 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -sst-cdk@1.61.0-rc.25: - version "1.61.0-rc.25" - resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.61.0-rc.25.tgz#f9066a46ebec56f32165890eba99eaf558cf61d8" - integrity sha512-Vc9pRpTIV0xUBZHK6Qj3Xrb/LCPiXw2nVJaWZPiSiUc2mi566KsxpmWFvjqrYXKFesRSwUoIVgfEwop12CiLzw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cloudformation-diff" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - archiver "^4.0.2" - aws-sdk "^2.739.0" - camelcase "^6.0.0" - cdk-assets "1.61.0" +sst-cdk@1.79.0-rc.1: + version "1.79.0-rc.1" + resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.79.0-rc.1.tgz#25111ce3c3b521710f20b3d6a47ee477313ed635" + integrity sha512-pg+4xuWqgEnpsixY68vXamCmr7OsVW10zSLt6IeorYBvPQphTxAPOgPC3OGwGUk48BVNVVMR5p2f3MIEtWSNEA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cloudformation-diff" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + "@aws-cdk/yaml-cfn" "1.79.0" + archiver "^5.1.0" + aws-sdk "^2.804.0" + camelcase "^6.2.0" + cdk-assets "1.79.0" colors "^1.4.0" decamelize "^4.0.0" fs-extra "^9.0.1" glob "^7.1.6" json-diff "^0.5.4" minimatch ">=3.0" - promptly "^3.0.3" - proxy-agent "^3.1.1" - semver "^7.2.2" + promptly "^3.2.0" + proxy-agent "^4.0.0" + semver "^7.3.2" source-map-support "^0.5.19" - table "^5.4.6" - uuid "^8.3.0" + table "^6.0.4" + uuid "^8.3.1" wrap-ansi "^7.0.0" - yaml "^1.10.0" - yargs "^15.4.1" + yargs "^16.2.0" stack-utils@^2.0.2: version "2.0.2" @@ -8468,7 +8573,7 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^5.2.3, table@^5.4.6: +table@^5.2.3: version "5.4.6" resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== @@ -8478,12 +8583,22 @@ table@^5.2.3, table@^5.4.6: slice-ansi "^2.1.0" string-width "^3.0.0" -tar-stream@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.3.tgz#1e2022559221b7866161660f118255e20fa79e41" - integrity sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA== +table@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.4.tgz#c523dd182177e926c723eb20e1b341238188aa0d" + integrity sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw== dependencies: - bl "^4.0.1" + ajv "^6.12.4" + lodash "^4.17.20" + slice-ansi "^4.0.0" + string-width "^4.2.0" + +tar-stream@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.4.tgz#c4fb1a11eb0da29b893a5b25476397ba2d053bfa" + integrity sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw== + dependencies: + bl "^4.0.3" end-of-stream "^1.4.1" fs-constants "^1.0.0" inherits "^2.0.3" @@ -8586,11 +8701,6 @@ through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -thunkify@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" - integrity sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0= - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -8718,6 +8828,11 @@ tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== +tslib@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" + integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== + tsutils@^3.17.1: version "3.17.1" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" @@ -8947,11 +9062,16 @@ uuid@^3.0.1, uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.2.0, uuid@^8.3.0: +uuid@^8.2.0: version "8.3.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== +uuid@^8.3.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + v8-compile-cache@^2.0.3: version "2.1.1" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" @@ -9244,12 +9364,17 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== +y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yaml@^1.10.0, yaml@^1.7.2: +yaml@1.10.0, yaml@^1.7.2: version "1.10.0" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== @@ -9270,6 +9395,11 @@ yargs-parser@^15.0.1: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^20.2.2: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + yargs@^14.2.2: version "14.2.3" resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" @@ -9304,11 +9434,24 @@ yargs@^15.3.1, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -zip-stream@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-3.0.1.tgz#cb8db9d324a76c09f9b76b31a12a48638b0b9708" - integrity sha512-r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ== +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" + +zip-stream@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.0.4.tgz#3a8f100b73afaa7d1ae9338d910b321dec77ff3a" + integrity sha512-a65wQ3h5gcQ/nQGWV1mSZCEzCML6EK/vyVPcrPNynySP1j3VBbQKh3nhC8CbORb+jfl2vXvh56Ul5odP1bAHqw== dependencies: archiver-utils "^2.1.0" - compress-commons "^3.0.0" + compress-commons "^4.0.2" readable-stream "^3.6.0" From 1c2bd4fac38b33326c61c161f8871d9c94059f0f Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 18 Dec 2020 14:28:25 -0500 Subject: [PATCH 154/481] v0.4.4 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lerna.json b/lerna.json index 722219b6b6..550f0c384d 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.4.3" + "version": "0.4.4" } diff --git a/packages/cli/package.json b/packages/cli/package.json index cf83a65a92..3bb823e98d 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.4.3", + "version": "0.4.4", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "node scripts/config/sync-cdk-version.js", @@ -41,8 +41,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^0.4.3", - "@serverless-stack/resources": "^0.4.3", + "@serverless-stack/core": "^0.4.4", + "@serverless-stack/resources": "^0.4.4", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/core/package.json b/packages/core/package.json index 7b95954dab..3a340c0f63 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.4.3", + "version": "0.4.4", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 88f241a87e..ce93aea944 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.4.3", + "version": "0.4.4", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index e9be83f5b3..55df783a8d 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.4.3", + "version": "0.4.4", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 60e2184f8e67d179c99a0f39cd40326d985189bf Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 21 Dec 2020 20:45:18 -0500 Subject: [PATCH 155/481] Updating cdk version sync scripts --- package.json | 2 +- packages/cli/bin/sync-cdk-version.js | 42 ++++++++++++++++++++++--- packages/cli/scripts/util/cdkHelpers.js | 6 ++-- 3 files changed, 41 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index ab7139a723..bb9c1f17fe 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "lint": "eslint . --fix --ext .js,.ts", "npm-publish": "lerna publish --force-publish", "clean": "lerna run clean", - "postinstall": "lerna run prepare --scope='{@serverless-stack/resources,create-serverless-stack}'", + "postinstall": "lerna run prepare --scope='{@serverless-stack/resources,@serverless-stack/cli,create-serverless-stack}'", "test": "lerna run test --stream --scope=@serverless-stack/cli" }, "devDependencies": { diff --git a/packages/cli/bin/sync-cdk-version.js b/packages/cli/bin/sync-cdk-version.js index 1127c2d898..a0cacaa259 100755 --- a/packages/cli/bin/sync-cdk-version.js +++ b/packages/cli/bin/sync-cdk-version.js @@ -18,19 +18,35 @@ const cdkVersion = sstCdkVersion.match(/^(\d+\.\d+.\d+)/)[1]; */ const packageJson = require(path.join(__dirname, "../package.json")); -if (packageJson.dependencies["aws-cdk"] !== cdkVersion) { +const mismatchedDeps = filterMismatchedVersion( + packageJson.dependencies, + cdkVersion +); +const mismatchedDevDeps = filterMismatchedVersion( + packageJson.devDependencies, + cdkVersion +); + +if (mismatchedDeps.length !== 0 || mismatchedDevDeps.length !== 0) { console.log( - "\n❌ aws-cdk version in @serverless-stack/cli is not in sync with @serverless-stack/core. Fix using:\n" + "\n❌ AWS CDK packages in @serverless-stack/cli are not in sync with @serverless-stack/core. Fix using:\n" ); - console.log(` yarn add --exact aws-cdk@${cdkVersion}`); - console.log(""); + if (mismatchedDeps.length > 0) { + const depString = formatDepsForInstall(mismatchedDeps, cdkVersion); + console.log(` yarn add ${depString} --exact`); + } + if (mismatchedDevDeps.length > 0) { + const devDepString = formatDepsForInstall(mismatchedDevDeps, cdkVersion); + console.log(` yarn add ${devDepString} --dev --exact`); + } + console.log(""); process.exit(1); } console.log( - "✅ aws-cdk version in @serverless-stack/cli is in sync with @serverless-stack/core" + "✅ AWS CDK packages in @serverless-stack/cli are in sync with @serverless-stack/core" ); /** @@ -56,3 +72,19 @@ try { } catch (error) { console.error("Error occurred:", error); } + +function filterMismatchedVersion(deps, version) { + const mismatched = []; + + for (let dep in deps) { + if (/^@?aws-cdk/.test(dep) && deps[dep] !== version) { + mismatched.push(dep); + } + } + + return mismatched; +} + +function formatDepsForInstall(depsList, version) { + return depsList.map((dep) => `${dep}@${version}`).join(" "); +} diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index 3f03afa2b0..fed238b398 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -103,11 +103,11 @@ function runCdkVersionMatch(cliInfo) { ); } if (mismatchedDevDeps.length > 0) { - const depString = formatDepsForInstall(mismatchedDevDeps, cdkVersion); + const devDepString = formatDepsForInstall(mismatchedDevDeps, cdkVersion); logger.log( usingYarn - ? ` yarn add ${depString} --dev --exact` - : ` npm install ${depString} --save-dev --save-exact` + ? ` yarn add ${devDepString} --dev --exact` + : ` npm install ${devDepString} --save-dev --save-exact` ); } From 456de36e57766ef22ba2ef22859fad0e076a9fed Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 21 Dec 2020 21:24:11 -0500 Subject: [PATCH 156/481] Setting the region in the debug stack --- packages/cli/assets/debug-stack/bin/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/cli/assets/debug-stack/bin/index.js b/packages/cli/assets/debug-stack/bin/index.js index 13e06d174a..f46e41a008 100644 --- a/packages/cli/assets/debug-stack/bin/index.js +++ b/packages/cli/assets/debug-stack/bin/index.js @@ -7,6 +7,9 @@ const stage = process.argv[3]; const region = process.argv[4]; const stackName = process.argv[2]; +// Override default region +const env = { account: process.env.CDK_DEFAULT_ACCOUNT, region }; + const app = new cdk.App(); -new DebugStack(app, stackName, { stage, stackName, region }); +new DebugStack(app, stackName, { env, stage, stackName, region }); From ec14ec90e541e369091c6c0ce372cc8298ac7e24 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 21 Dec 2020 21:29:52 -0500 Subject: [PATCH 157/481] v1.0.0-alpha.4 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lerna.json b/lerna.json index 97119db9a0..8a9983533a 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "1.0.0-alpha.3" + "version": "1.0.0-alpha.4" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 6ca56ee970..e06dab53ce 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.4", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -46,8 +46,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^1.0.0-alpha.3", - "@serverless-stack/resources": "^1.0.0-alpha.3", + "@serverless-stack/core": "^1.0.0-alpha.4", + "@serverless-stack/resources": "^1.0.0-alpha.4", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/core/package.json b/packages/core/package.json index 917b83aebb..bdc7f84cb9 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.4", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 4efb18905a..a2da973e53 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.4", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 6d825a192f..abeb2be0fc 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "1.0.0-alpha.3", + "version": "1.0.0-alpha.4", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From dc2577acd7fd031c3947fc9e225792849c2df65c Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 21 Dec 2020 21:43:53 -0500 Subject: [PATCH 158/481] Fixing remove command --- packages/cli/scripts/remove.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/cli/scripts/remove.js b/packages/cli/scripts/remove.js index dcedfcb056..9ac5e9f6f4 100644 --- a/packages/cli/scripts/remove.js +++ b/packages/cli/scripts/remove.js @@ -15,18 +15,14 @@ module.exports = async function (argv, config, cliInfo) { // Remove debug stack // //////////////////////// logger.log(chalk.grey("Removing " + stackName + " stack")); - const debugAppEnvs = [ - `SST_DEBUG_STACK=${stackName}`, - `SST_DEBUG_STAGE=${config.stage}`, - `SST_DEBUG_REGION=${config.region}`, - ]; + const debugAppArgs = [stackName, config.stage, config.region]; // Note: When deploying the debug stack, the current working directory is user's app. // Setting the current working directory to debug stack cdk app directory to allow // Lambda Function construct be able to reference code with relative path. process.chdir(path.join(paths.ownPath, "assets", "debug-stack")); await cdkDestroy({ ...cliInfo.cdkOptions, - app: `${debugAppEnvs.join(" ")} node bin/index.js`, + app: `node bin/index.js ${debugAppArgs.join(" ")}`, output: "cdk.out", }); // Note: Restore working directory From 792283fee95a81ea27494e22b8cdbbf81314b74a Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 21 Dec 2020 21:44:14 -0500 Subject: [PATCH 159/481] v1.0.0-alpha.5 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lerna.json b/lerna.json index 8a9983533a..0e6c64f5de 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "1.0.0-alpha.4" + "version": "1.0.0-alpha.5" } diff --git a/packages/cli/package.json b/packages/cli/package.json index e06dab53ce..dfb8042106 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "1.0.0-alpha.4", + "version": "1.0.0-alpha.5", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -46,8 +46,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^1.0.0-alpha.4", - "@serverless-stack/resources": "^1.0.0-alpha.4", + "@serverless-stack/core": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/core/package.json b/packages/core/package.json index bdc7f84cb9..7cd370ec0c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "1.0.0-alpha.4", + "version": "1.0.0-alpha.5", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index a2da973e53..1fdb6c5a0d 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "1.0.0-alpha.4", + "version": "1.0.0-alpha.5", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index abeb2be0fc..468d22d415 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "1.0.0-alpha.4", + "version": "1.0.0-alpha.5", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 9e563760b8069945f7379d5898f5127c193ea1f0 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 23 Dec 2020 14:30:07 -0500 Subject: [PATCH 160/481] Bug: call sst-cdk's async method for deploy and destroy --- packages/core/index.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/core/index.js b/packages/core/index.js index 6043dda14c..ef0105a46f 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -55,7 +55,10 @@ async function parallelDeploy(cdkOptions, stackStates) { region, outputs, exports, - } = await cdk.deploy({ ...cdkOptions, stackName: stackState.name }); + } = await cdk.deployAsync({ + ...cdkOptions, + stackName: stackState.name, + }); stackState.startedAt = Date.now(); stackState.account = account; stackState.region = region; @@ -468,7 +471,7 @@ async function parallelDestroy(cdkOptions, stackStates) { .map(async (stackState) => { try { logger.debug(`Destroying stack ${stackState.name}`); - const { status, region } = await cdk.destroy({ + const { status, region } = await cdk.destroyAsync({ ...cdkOptions, stackName: stackState.name, }); From 40d45ccb9f08ce208a696a6e5a7d9ef429dff581 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 23 Dec 2020 14:30:59 -0500 Subject: [PATCH 161/481] Working on esbuild integration --- .../cli/assets/lambda-invoke/bootstrap.js | 2 + packages/cli/package.json | 1 + packages/cli/scripts/start.js | 77 +++++++++++++++++-- packages/cli/scripts/util/paths.js | 6 +- packages/cli/test/start/src/api.js | 8 +- packages/cli/test/start/src/lib.js | 3 + yarn.lock | 5 ++ 7 files changed, 92 insertions(+), 10 deletions(-) create mode 100644 packages/cli/test/start/src/lib.js diff --git a/packages/cli/assets/lambda-invoke/bootstrap.js b/packages/cli/assets/lambda-invoke/bootstrap.js index 99a3a0c4a0..42e8f46185 100644 --- a/packages/cli/assets/lambda-invoke/bootstrap.js +++ b/packages/cli/assets/lambda-invoke/bootstrap.js @@ -3,6 +3,8 @@ */ "use strict"; +require("source-map-support").install(); + process.on("unhandledRejection", (err) => { throw err; }); diff --git a/packages/cli/package.json b/packages/cli/package.json index dfb8042106..80fb6c01b5 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -56,6 +56,7 @@ "chalk": "^4.1.0", "core-js": "^3.6.5", "cross-spawn": "^7.0.3", + "esbuild": "^0.8.26", "eslint": "^7.7.0", "fs-extra": "^9.0.1", "jest": "^26.1.0", diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 153a5e7720..26d46de8e8 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -3,6 +3,7 @@ const path = require("path"); const chalk = require("chalk"); const WebSocket = require("ws"); +const esbuild = require("esbuild"); const spawn = require("cross-spawn"); const sstDeploy = require("./deploy"); @@ -19,6 +20,8 @@ const WEBSOCKET_CLOSE_CODE = { NEW_CLIENT_CONNECTED: 4901, }; +const transpilers = {}; + let ws; function setTimer(lambda, handleResponse, timeoutInMs) { @@ -34,6 +37,58 @@ function setTimer(lambda, handleResponse, timeoutInMs) { }, timeoutInMs); } +function getTranspilerKey(srcPath, handler) { + return `${srcPath}/${handler}`; +} + +async function getTranspiledHandler(srcPath, handler) { + const transpiler = transpilers[getTranspilerKey(srcPath, handler)]; + + await transpiler.esbuilder.rebuild(); + + return transpiler.outHandler; +} + +function getHandlerFile(handler) { + const [name, ext] = handler.split("."); + + if (ext !== "js" || ext !== "ts") { + return `${name}.js`; + } + + return handler; +} + +async function startEsbuilder(entryPoints) { + entryPoints.forEach(async (entryPoint) => { + const srcPath = entryPoint.debugSrcPath; + const handler = entryPoint.debugSrcHandler; + + const handlerFile = getHandlerFile(handler); + const fullPath = path.join(paths.appPath, srcPath, handlerFile); + + const compiledDir = "src"; + + const esbuilder = await esbuild.build({ + bundle: true, + format: "cjs", + sourcemap: true, + platform: "node", + incremental: true, + entryPoints: [fullPath], + outdir: path.join(paths.appBuildPath, compiledDir), + }); + + transpilers[getTranspilerKey(srcPath, handler)] = { + esbuilder, + outHandler: { + handler, + srcPath: path.join(paths.appBuildDir, compiledDir), + }, + }; + }); +} + function startClient(debugEndpoint) { ws = new WebSocket(debugEndpoint); @@ -62,7 +117,7 @@ function startClient(debugEndpoint) { ws.on("message", onMessage); } -function onMessage(message) { +async function onMessage(message) { logger.debug(`Message received: ${message}`); const data = JSON.parse(message); @@ -130,6 +185,11 @@ function onMessage(message) { const semiSpace = Math.floor(newSpace / 2); const oldSpace = context.memoryLimitInMB - newSpace; + const transpiledHandler = await getTranspiledHandler( + debugSrcPath, + debugSrcHandler + ); + let lambdaResponse; const lambda = spawn( "node", @@ -141,9 +201,9 @@ function onMessage(message) { JSON.stringify(event), JSON.stringify(context), //"./src", // Local path to the Lambda functions + transpiledHandler.srcPath, //"hello.handler", - debugSrcPath, - debugSrcHandler, + transpiledHandler.handler, ], { stdio: ["inherit", "inherit", "inherit", "ipc"], @@ -237,9 +297,9 @@ function onMessage(message) { ) ); } else if (lambdaResponse.type === "failure") { - logger.error( - chalk.grey(context.awsRequestId) + ` ${lambdaResponse.error}` - ); + const errorMessage = lambdaResponse.error.message || lambdaResponse.error; + console.log(lambdaResponse.error); + logger.error(chalk.grey(context.awsRequestId) + ` ${errorMessage}`); } ws.send( JSON.stringify({ @@ -310,4 +370,9 @@ module.exports = async function (argv, cliInfo) { logger.log("==================="); logger.log(""); startClient(config.debugEndpoint); + + await startEsbuilder([ + { debugSrcPath: "src", debugSrcHandler: "api.handler" }, + { debugSrcPath: "src", debugSrcHandler: "sns.handler" }, + ]); }; diff --git a/packages/cli/scripts/util/paths.js b/packages/cli/scripts/util/paths.js index 4a7a591a56..e742b445a0 100644 --- a/packages/cli/scripts/util/paths.js +++ b/packages/cli/scripts/util/paths.js @@ -14,12 +14,16 @@ const resolveApp = (relativePath) => path.resolve(appDirectory, relativePath); const resolveOwn = (relativePath) => path.resolve(__dirname, "..", relativePath); +const appBuildDir = "build"; + module.exports = { + appBuildDir, appPath: resolveApp("."), appLibPath: resolveApp("./lib"), - appBuildPath: resolveApp("./build"), appPackageJson: resolveApp("package.json"), appNodeModules: resolveApp("node_modules"), + appBuildPath: resolveApp(`./${appBuildDir}`), + ownPath: resolveOwn("../"), ownScriptsPath: resolveOwn("../scripts"), ownNodeModules: resolveOwn("../node_modules"), diff --git a/packages/cli/test/start/src/api.js b/packages/cli/test/start/src/api.js index a8202643f5..d5e97a3c92 100644 --- a/packages/cli/test/start/src/api.js +++ b/packages/cli/test/start/src/api.js @@ -1,7 +1,9 @@ const AWS = require("aws-sdk"); const sns = new AWS.SNS(); -exports.handler = async function (event) { +import str from "./lib"; + +export async function handler(event) { console.log( `Logging from inside the API Lambda for route: ${event.routeKey}` ); @@ -16,7 +18,7 @@ exports.handler = async function (event) { return { statusCode: 200, - body: "Hello World", + body: "Hello World: " + str(), headers: { "Content-Type": "text/plain" }, }; -}; +} diff --git a/packages/cli/test/start/src/lib.js b/packages/cli/test/start/src/lib.js new file mode 100644 index 0000000000..6742ab1811 --- /dev/null +++ b/packages/cli/test/start/src/lib.js @@ -0,0 +1,3 @@ +export default function () { + return "Spongebob"; +} diff --git a/yarn.lock b/yarn.lock index 68274607b7..86a85293b7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4251,6 +4251,11 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" +esbuild@^0.8.26: + version "0.8.26" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.8.26.tgz#a85491617ebd2bd35ca4bf479239487eb6819d71" + integrity sha512-u3MMHOOumdWoAKF+073GHPpzvVB2cM+y9VD4ZwYs1FAQ6atRPISya35dbrbOu/mM68mQ42P+nwPzQVBTfQhkvQ== + escalade@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" From 0827d9f1af97e936fc02f1b1da82e79fa3c2fba0 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 23 Dec 2020 14:35:57 -0500 Subject: [PATCH 162/481] v0.4.5 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lerna.json b/lerna.json index 550f0c384d..ba22d9f846 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.4.4" + "version": "0.4.5" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 3bb823e98d..f4bbe322f7 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.4.4", + "version": "0.4.5", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "node scripts/config/sync-cdk-version.js", @@ -41,8 +41,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^0.4.4", - "@serverless-stack/resources": "^0.4.4", + "@serverless-stack/core": "^0.4.5", + "@serverless-stack/resources": "^0.4.5", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/core/package.json b/packages/core/package.json index 3a340c0f63..645798f458 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.4.4", + "version": "0.4.5", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index ce93aea944..18bac498de 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.4.4", + "version": "0.4.5", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 55df783a8d..1f5789f29e 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.4.4", + "version": "0.4.5", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 45124c50367a7b33c695aff33cc8bbdcf53bf802 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 24 Dec 2020 20:54:20 -0500 Subject: [PATCH 163/481] Adding type checking and watcher --- packages/cli/package.json | 2 + packages/cli/scripts/start.js | 248 +++++++++++++++-- packages/cli/scripts/util/.eslintrc.js | 16 ++ packages/cli/test/start/lib/index.js | 4 +- .../cli/test/start/src/{api.js => api/api.ts} | 13 +- packages/cli/test/start/src/api/lib.ts | 3 + packages/cli/test/start/src/api/package.json | 11 + packages/cli/test/start/src/api/tsconfig.json | 8 + packages/cli/test/start/src/api/yarn.lock | 259 ++++++++++++++++++ packages/cli/test/start/src/lib.js | 3 - packages/cli/test/start/src/{ => sns}/sns.js | 0 packages/cli/test/start/yarn.lock | 2 +- yarn.lock | 191 ++++++++++++- 13 files changed, 712 insertions(+), 48 deletions(-) create mode 100644 packages/cli/scripts/util/.eslintrc.js rename packages/cli/test/start/src/{api.js => api/api.ts} (67%) create mode 100644 packages/cli/test/start/src/api/lib.ts create mode 100644 packages/cli/test/start/src/api/package.json create mode 100644 packages/cli/test/start/src/api/tsconfig.json create mode 100644 packages/cli/test/start/src/api/yarn.lock delete mode 100644 packages/cli/test/start/src/lib.js rename packages/cli/test/start/src/{ => sns}/sns.js (100%) diff --git a/packages/cli/package.json b/packages/cli/package.json index 80fb6c01b5..09ebe2f4d3 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -54,12 +54,14 @@ "@typescript-eslint/parser": "^3.9.1", "aws-cdk": "1.74.0", "chalk": "^4.1.0", + "chokidar": "^3.4.3", "core-js": "^3.6.5", "cross-spawn": "^7.0.3", "esbuild": "^0.8.26", "eslint": "^7.7.0", "fs-extra": "^9.0.1", "jest": "^26.1.0", + "promise.allsettled": "^1.0.2", "source-map-support": "^0.5.19", "ts-jest": "^26.1.4", "typescript": "^3.9.7", diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 26d46de8e8..005429d252 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -1,10 +1,13 @@ "use strict"; const path = require("path"); +const fs = require("fs-extra"); const chalk = require("chalk"); const WebSocket = require("ws"); const esbuild = require("esbuild"); +const chokidar = require('chokidar'); const spawn = require("cross-spawn"); +const allSettled = require('promise.allsettled'); const sstDeploy = require("./deploy"); const paths = require("./util/paths"); @@ -16,11 +19,25 @@ const { const array = require("../lib/array"); const logger = require("../lib/logger"); +// Create Promise.allSettled shim +allSettled.shim(); + +const chokidarOptions = { + persistent: true, + ignoreInitial: true, + followSymlinks: false, + disableGlobbing: false, + awaitWriteFinish: { + pollInterval: 100, + stabilityThreshold: 20, + }, +}; const WEBSOCKET_CLOSE_CODE = { NEW_CLIENT_CONNECTED: 4901, }; const transpilers = {}; +let externalsCache = {}; let ws; @@ -49,44 +66,214 @@ async function getTranspiledHandler(srcPath, handler) { return transpiler.outHandler; } -function getHandlerFile(handler) { - const [name, ext] = handler.split("."); +async function checkFileExists(file) { + return fs.promises.access(file, fs.constants.F_OK) + .then(() => true) + .catch(() => false) +} + +async function getCmdPath(cmd) { + const appPath = path.join(paths.appNodeModules, ".bin", cmd); + const ownPath = path.join(paths.ownNodeModules, ".bin", cmd); + + // Fallback to own node modules, in case of tests that don't install the cli + return await checkFileExists(appPath) ? appPath : ownPath; +} + +async function getHandlerFilePath(srcPath, handler) { + const parts = handler.split("."); + const name = parts[0]; + + const jsFile = path.join(paths.appPath, srcPath, `${name}.js`); + + if (await checkFileExists(jsFile)) { + return jsFile; + } + + const tsFile = path.join(paths.appPath, srcPath, `${name}.ts`); - if (ext !== "js" || ext !== "ts") { - return `${name}.js`; + if (await checkFileExists(tsFile)) { + return tsFile; + } + + return jsFile; +} + +async function getAllExternalsForHandler(srcPath) { + if (externalsCache[srcPath]) { + return externalsCache[srcPath]; + } + + let packageJson, externals; + + try { + packageJson = await fs.promises.readFile(path.join(srcPath, "package.json"), {encoding: 'utf-8'}); + externals = Object.keys({ + ...(packageJson.dependencies || {}), + ...(packageJson.devDependencies || {}), + ...(packageJson.peerDependencies || {}) + }); + } + catch(e) { + externals = []; } - return handler; + externalsCache[srcPath] = externals; + + return externals; +} + +async function transpile(srcPath, handler) { + const fullPath = await getHandlerFilePath(srcPath, handler); + + const compiledDir = "src"; + + const external = await getAllExternalsForHandler(srcPath); + + const esbuilder = await esbuild.build({ + external, + bundle: true, + format: "cjs", + sourcemap: true, + platform: "node", + incremental: true, + entryPoints: [fullPath], + outdir: path.join(paths.appBuildPath, compiledDir), + }); + + const transpiler = { + esbuilder, + outHandler: { + handler, + srcPath: path.join(paths.appBuildDir, compiledDir), + }, + }; + + transpilers[getTranspilerKey(srcPath, handler)] = transpiler; + + return transpiler; } -async function startEsbuilder(entryPoints) { - entryPoints.forEach(async (entryPoint) => { +async function lint(srcPath) { + const linter = spawn( + await getCmdPath("eslint"), + [ + "--no-error-on-unmatched-pattern", + "--config", + path.join(paths.ownPath, "scripts", "util", ".eslintrc.js"), + "--ext", + ".js,.ts", + "--fix", + // Handling nested ESLint projects in Yarn Workspaces + // https://github.com/serverless-stack/serverless-stack/issues/11 + "--resolve-plugins-relative-to", + ".", + srcPath, + ], + { stdio: "inherit", cwd: paths.appPath } + ); + + linter.on('close', (code) => { + console.log(`child process exited with code ${code}`); + }); + + return linter; +} + +async function typeCheck(srcPath) { + const isTs = await checkFileExists(path.join(paths.appPath, srcPath, "tsconfig.json")); + + if (!isTs) { + return null; + } + + const typeChecker = spawn( + await getCmdPath("tsc"), + [ "--noEmit" ], + { stdio: "inherit", cwd: path.join(paths.appPath, srcPath) } + ); + + typeChecker.on('close', (code) => { + console.log(`child process exited with code ${code}`); + }); + + return typeChecker; +} + +async function cancelAllChecks(checks) { + (await Promise.allSettled(checks)).forEach(result => { + if (result.status === "fulfilled") { + result.value && result.value.kill(); + } + }); +} + +function onFileChange(file, srcPath, handlers) { + logger.log(`File change: ${file}`); + console.log(srcPath, handlers); +} + +async function startBuilder(entryPoints) { + let hasError = false; + + const entryPointsIndexed = {}; + const transpilerPromises = []; + + externalsCache = {}; + + function recordEntryPoint(srcPath, handler) { + entryPointsIndexed[srcPath] = entryPointsIndexed[srcPath] + ? entryPointsIndexed[srcPath].push(handler) + : [handler]; + } + + function getUniqueSrcPaths() { + return Object.keys(entryPointsIndexed); + } + + function getHandlersForSrcPath(srcPath) { + return entryPointsIndexed[srcPath]; + } + + entryPoints.forEach(entryPoint => { const srcPath = entryPoint.debugSrcPath; const handler = entryPoint.debugSrcHandler; - const handlerFile = getHandlerFile(handler); - const fullPath = path.join(paths.appPath, srcPath, handlerFile); + // Not catching esbuild errors + // Letting it handle the error messages for now + transpilerPromises.push(transpile(srcPath, handler)); - const compiledDir = "src"; + recordEntryPoint(srcPath, handler); + }); - const esbuilder = await esbuild.build({ - bundle: true, - format: "cjs", - sourcemap: true, - platform: "node", - incremental: true, - entryPoints: [fullPath], - outdir: path.join(paths.appBuildPath, compiledDir), - }); + const uniquePaths = getUniqueSrcPaths(); + + const lintPromises = uniquePaths.map(lint); + const typeCheckPromises = uniquePaths.map(typeCheck); + + logger.log("Building Lambda code..."); + const results = await Promise.allSettled(transpilerPromises); - transpilers[getTranspilerKey(srcPath, handler)] = { - esbuilder, - outHandler: { - handler, - srcPath: path.join(paths.appBuildDir, compiledDir), - }, - }; + results.forEach(result => { + if (result.status === "fulfilled") { + return; + } + + hasError = true; + // Cancel all the running checks + cancelAllChecks(lintPromises.concat(typeCheckPromises)); }); + + if (! hasError) { + uniquePaths.forEach(srcPath => { + chokidar.watch(path.join(paths.appPath, srcPath), chokidarOptions) + .on('all', file => onFileChange(file, srcPath, getHandlersForSrcPath(srcPath))) + .on('error', error => console.log(`Watch ${error}`)) + .on('ready', () => { + console.log(`Watcher ready for ${srcPath}...`); + }); + }); + } } function startClient(debugEndpoint) { @@ -369,10 +556,11 @@ module.exports = async function (argv, cliInfo) { logger.log(" Starting debugger"); logger.log("==================="); logger.log(""); - startClient(config.debugEndpoint); - await startEsbuilder([ - { debugSrcPath: "src", debugSrcHandler: "api.handler" }, - { debugSrcPath: "src", debugSrcHandler: "sns.handler" }, + await startBuilder([ + { debugSrcPath: "src/api", debugSrcHandler: "api.handler" }, + { debugSrcPath: "src/sns", debugSrcHandler: "sns.handler" }, ]); + + startClient(config.debugEndpoint); }; diff --git a/packages/cli/scripts/util/.eslintrc.js b/packages/cli/scripts/util/.eslintrc.js new file mode 100644 index 0000000000..7ad8abca0c --- /dev/null +++ b/packages/cli/scripts/util/.eslintrc.js @@ -0,0 +1,16 @@ +module.exports = { + root: true, + parser: "@babel/eslint-parser", + parserOptions: { + babelOptions: { + configFile: "./build/.babelrc.json", + }, + }, + plugins: ["@babel"], + overrides: [{ + files: ["*.ts", "*.tsx"], + parser: "@typescript-eslint/parser", + plugins: ["@typescript-eslint"], + extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"], + }] +}; diff --git a/packages/cli/test/start/lib/index.js b/packages/cli/test/start/lib/index.js index e8f5d630d0..44be54699e 100644 --- a/packages/cli/test/start/lib/index.js +++ b/packages/cli/test/start/lib/index.js @@ -18,7 +18,7 @@ class MySampleStack extends sst.Stack { // Create a Lambda function subscribed to the topic const snsFunc = new sst.Function(this, "MySnsLambda", { - code: lambda.Code.fromAsset("src"), + code: lambda.Code.fromAsset("src/sns"), handler: "sns.handler", runtime: lambda.Runtime.NODEJS_12_X, }); @@ -26,7 +26,7 @@ class MySampleStack extends sst.Stack { // Create a Lambda function triggered by an HTTP API const apiFunc = new sst.Function(this, "MyApiLambda", { - code: lambda.Code.fromAsset("src"), + code: lambda.Code.fromAsset("src/api"), handler: "api.handler", runtime: lambda.Runtime.NODEJS_12_X, environment: { diff --git a/packages/cli/test/start/src/api.js b/packages/cli/test/start/src/api/api.ts similarity index 67% rename from packages/cli/test/start/src/api.js rename to packages/cli/test/start/src/api/api.ts index d5e97a3c92..2d97f7ae7b 100644 --- a/packages/cli/test/start/src/api.js +++ b/packages/cli/test/start/src/api/api.ts @@ -1,9 +1,14 @@ -const AWS = require("aws-sdk"); -const sns = new AWS.SNS(); +import * as AWS from "aws-sdk"; +import { APIGatewayEvent } from "aws-lambda"; import str from "./lib"; -export async function handler(event) { +const sns = new AWS.SNS(); + +export async function handler( + event: APIGatewayEvent, +) { + // hi console.log( `Logging from inside the API Lambda for route: ${event.routeKey}` ); @@ -18,7 +23,7 @@ export async function handler(event) { return { statusCode: 200, - body: "Hello World: " + str(), + body: "Hello World: " + str("Spongebob"), headers: { "Content-Type": "text/plain" }, }; } diff --git a/packages/cli/test/start/src/api/lib.ts b/packages/cli/test/start/src/api/lib.ts new file mode 100644 index 0000000000..4d7c3d8fb0 --- /dev/null +++ b/packages/cli/test/start/src/api/lib.ts @@ -0,0 +1,3 @@ +export default function(name: number): string { + return name; +} diff --git a/packages/cli/test/start/src/api/package.json b/packages/cli/test/start/src/api/package.json new file mode 100644 index 0000000000..8fdc8de8aa --- /dev/null +++ b/packages/cli/test/start/src/api/package.json @@ -0,0 +1,11 @@ +{ + "name": "start-src", + "private": true, + "description": "tests", + "version": "0.0.1", + "license": "ISC", + "dependencies": { + "aws": "^0.0.3-2", + "aws-lambda": "^1.0.6" + } +} diff --git a/packages/cli/test/start/src/api/tsconfig.json b/packages/cli/test/start/src/api/tsconfig.json new file mode 100644 index 0000000000..50be82e508 --- /dev/null +++ b/packages/cli/test/start/src/api/tsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "target": "es6", + "sourceMap": true, + "moduleResolution": "node" + } +} diff --git a/packages/cli/test/start/src/api/yarn.lock b/packages/cli/test/start/src/api/yarn.lock new file mode 100644 index 0000000000..546d2f53b7 --- /dev/null +++ b/packages/cli/test/start/src/api/yarn.lock @@ -0,0 +1,259 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +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" + +aws-lambda@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/aws-lambda/-/aws-lambda-1.0.6.tgz#ba562478264646b51e9dc817d7d25ea468ed011b" + integrity sha512-Z9lmZBiDYejzjMWuQSDXuZWAqAun6vGt7WApB1r0f8tLNf0IlTGsH30qENfP1kXeTbbMgPpt1bPEeMZjYDTXxQ== + dependencies: + aws-sdk "*" + commander "^3.0.2" + js-yaml "^3.13.1" + watchpack "^2.0.0-beta.10" + +aws-sdk@*: + version "2.817.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.817.0.tgz#3a97b690b0ec494cf8ee927affb3973cf26abcc8" + integrity sha512-DZIdWpkcqbqsCz0MEskHsyFaqc6Tk9XIFqXAg1AKHbOgC8nU45bz+Y2osX77pU01JkS/G7OhGtGmlKDrOPvFwg== + dependencies: + buffer "4.9.2" + events "1.1.1" + ieee754 "1.1.13" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "3.3.2" + xml2js "0.4.19" + +aws@^0.0.3-2: + version "0.0.3-2" + resolved "https://registry.yarnpkg.com/aws/-/aws-0.0.3-2.tgz#8c4c170c47364b309fdfe4b0fe4c17104483fa46" + integrity sha1-jEwXDEc2SzCf3+Sw/kwXEESD+kY= + dependencies: + vows ">= 0.5.1" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +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" + +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" + +commander@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +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== + +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== + +events@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= + +eyes@~0.1.6: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + integrity sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A= + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.1.2: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +graceful-fs@^4.1.2: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +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.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +isarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +jmespath@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" + integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc= + +js-yaml@^3.13.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" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +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 sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +sax@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + integrity sha1-e45lYZCyKOgaZq6nSEgNgozS03o= + +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== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + integrity sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +"vows@>= 0.5.1": + version "0.8.3" + resolved "https://registry.yarnpkg.com/vows/-/vows-0.8.3.tgz#36e353c2bca3a93902fc32eb8c5baab2e3a93f10" + integrity sha512-PVIxa/ovXhrw5gA3mz6M+ZF3PHlqX4tutR2p/y9NWPAaFVKcWBE8b2ktfr0opQM/qFmcOVWKjSCJVjnYOvjXhw== + dependencies: + diff "^4.0.1" + eyes "~0.1.6" + glob "^7.1.2" + +watchpack@^2.0.0-beta.10: + version "2.1.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.0.tgz#e63194736bf3aa22026f7b191cd57907b0f9f696" + integrity sha512-UjgD1mqjkG99+3lgG36at4wPnUXNvis2v1utwTgQ43C22c4LD71LsYMExdWXh4HZ+RmW+B0t1Vrg2GpXAkTOQw== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +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 sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= diff --git a/packages/cli/test/start/src/lib.js b/packages/cli/test/start/src/lib.js deleted file mode 100644 index 6742ab1811..0000000000 --- a/packages/cli/test/start/src/lib.js +++ /dev/null @@ -1,3 +0,0 @@ -export default function () { - return "Spongebob"; -} diff --git a/packages/cli/test/start/src/sns.js b/packages/cli/test/start/src/sns/sns.js similarity index 100% rename from packages/cli/test/start/src/sns.js rename to packages/cli/test/start/src/sns/sns.js diff --git a/packages/cli/test/start/yarn.lock b/packages/cli/test/start/yarn.lock index 52a0569747..c234c550c1 100644 --- a/packages/cli/test/start/yarn.lock +++ b/packages/cli/test/start/yarn.lock @@ -335,7 +335,7 @@ integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== "@serverless-stack/resources@../../../resources": - version "0.4.3" + version "1.0.0-alpha.5" dependencies: "@aws-cdk/aws-lambda" "1.74.0" "@aws-cdk/aws-lambda-nodejs" "1.74.0" diff --git a/yarn.lock b/yarn.lock index 86a85293b7..19fe1ad0d4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2706,7 +2706,7 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.3: +anymatch@^3.0.3, anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== @@ -2815,6 +2815,17 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array.prototype.map@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.3.tgz#1609623618d3d84134a37d4a220030c2bd18420b" + integrity sha512-nNcb30v0wfDyIe26Yif3PcV1JXQp4zEeEfupG7L4SRjnD6HLbO5b2a7eVSba53bOx4YCHYMBHt+Fp4vYstneRA== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.5" + arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -3065,6 +3076,11 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -3110,7 +3126,7 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1: +braces@^3.0.1, 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== @@ -3234,6 +3250,14 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +call-bind@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" + integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.0" + call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" @@ -3402,6 +3426,21 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" +chokidar@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.1.2" + chownr@^1.1.1, chownr@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -4225,6 +4264,43 @@ es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: string.prototype.trimend "^1.0.1" string.prototype.trimstart "^1.0.1" +es-abstract@^1.18.0-next.1: + version "1.18.0-next.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" + integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-get-iterator@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.1.tgz#b93ddd867af16d5118e00881396533c1c6647ad9" + integrity sha512-qorBw8Y7B15DVLaJWy6WdEV/ZkieBcu6QCq/xzWzGOKJqgG1j754vXRfZ3NY7HSShneqU43mPB4OkQBTkvHhFw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.1" + has-symbols "^1.0.1" + is-arguments "^1.0.4" + is-map "^2.0.1" + is-set "^2.0.1" + is-string "^1.0.5" + isarray "^2.0.5" + 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" @@ -4768,7 +4844,7 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@^2.1.2: +fsevents@^2.1.2, fsevents@~2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== @@ -4820,6 +4896,15 @@ get-caller-file@^2.0.1, get-caller-file@^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.0, get-intrinsic@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" + integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" @@ -4946,7 +5031,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0: +glob-parent@^5.0.0, glob-parent@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== @@ -5384,6 +5469,13 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -5396,6 +5488,13 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +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-buffer@^1.1.5, is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -5406,6 +5505,11 @@ is-callable@^1.1.4, is-callable@^1.2.0: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== +is-callable@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== + is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -5511,13 +5615,23 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" +is-map@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== + +is-negative-zero@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -5562,7 +5676,7 @@ is-potential-custom-element-name@^1.0.0: resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= -is-regex@^1.1.0: +is-regex@^1.1.0, is-regex@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== @@ -5574,6 +5688,11 @@ is-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= +is-set@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== + is-ssh@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.2.tgz#a4b82ab63d73976fd8263cceee27f99a88bdae2b" @@ -5591,6 +5710,11 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + is-symbol@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" @@ -5637,6 +5761,11 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -5700,6 +5829,19 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +iterate-iterator@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.1.tgz#1693a768c1ddd79c969051459453f082fe82e9f6" + integrity sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw== + +iterate-value@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/iterate-value/-/iterate-value-1.0.2.tgz#935115bd37d006a52046535ebc8d07e9c9337f57" + integrity sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ== + dependencies: + es-get-iterator "^1.0.2" + iterate-iterator "^1.0.1" + jest-changed-files@^26.3.0: version "26.3.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.3.0.tgz#68fb2a7eb125f50839dab1f5a17db3607fe195b1" @@ -7006,7 +7148,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.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== @@ -7128,6 +7270,11 @@ object-inspect@^1.7.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== +object-inspect@^1.8.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -7150,6 +7297,16 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" +object.assign@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + object.getownpropertydescriptors@^2.0.3: version "2.1.0" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" @@ -7510,7 +7667,7 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.5: +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== @@ -7638,6 +7795,17 @@ promise-retry@^1.1.1: err-code "^1.0.0" retry "^0.10.0" +promise.allsettled@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.2.tgz#d66f78fbb600e83e863d893e98b3d4376a9c47c9" + integrity sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg== + dependencies: + array.prototype.map "^1.0.1" + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + iterate-value "^1.0.0" + promptly@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/promptly/-/promptly-3.2.0.tgz#a5517fbbf59bd31c1751d4e1d9bef1714f42b9d8" @@ -7922,6 +8090,13 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" From e8d352d6e4b3b0f3db445d8894f552bfd529d8d7 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 24 Dec 2020 20:59:29 -0500 Subject: [PATCH 164/481] Updating husky --- package.json | 8 +- packages/cli/scripts/start.js | 60 ++++---- yarn.lock | 251 +++++++++++++++++++++++++++------- 3 files changed, 241 insertions(+), 78 deletions(-) diff --git a/package.json b/package.json index bb9c1f17fe..f5edde905d 100644 --- a/package.json +++ b/package.json @@ -16,11 +16,11 @@ "devDependencies": { "@typescript-eslint/eslint-plugin": "^3.9.1", "@typescript-eslint/parser": "^3.9.1", - "eslint": "^7.6.0", - "husky": "^4.2.5", + "eslint": "^7.16.0", + "husky": "^4.3.6", "lerna": "^3.22.1", - "lint-staged": "^10.2.11", - "prettier": "^2.0.5", + "lint-staged": "^10.5.3", + "prettier": "^2.2.1", "typescript": "^3.9.7" }, "husky": { diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 005429d252..bb61e5bf51 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -5,9 +5,9 @@ const fs = require("fs-extra"); const chalk = require("chalk"); const WebSocket = require("ws"); const esbuild = require("esbuild"); -const chokidar = require('chokidar'); +const chokidar = require("chokidar"); const spawn = require("cross-spawn"); -const allSettled = require('promise.allsettled'); +const allSettled = require("promise.allsettled"); const sstDeploy = require("./deploy"); const paths = require("./util/paths"); @@ -67,9 +67,10 @@ async function getTranspiledHandler(srcPath, handler) { } async function checkFileExists(file) { - return fs.promises.access(file, fs.constants.F_OK) + return fs.promises + .access(file, fs.constants.F_OK) .then(() => true) - .catch(() => false) + .catch(() => false); } async function getCmdPath(cmd) { @@ -77,7 +78,7 @@ async function getCmdPath(cmd) { const ownPath = path.join(paths.ownNodeModules, ".bin", cmd); // Fallback to own node modules, in case of tests that don't install the cli - return await checkFileExists(appPath) ? appPath : ownPath; + return (await checkFileExists(appPath)) ? appPath : ownPath; } async function getHandlerFilePath(srcPath, handler) { @@ -107,14 +108,16 @@ async function getAllExternalsForHandler(srcPath) { let packageJson, externals; try { - packageJson = await fs.promises.readFile(path.join(srcPath, "package.json"), {encoding: 'utf-8'}); + packageJson = await fs.promises.readFile( + path.join(srcPath, "package.json"), + { encoding: "utf-8" } + ); externals = Object.keys({ ...(packageJson.dependencies || {}), ...(packageJson.devDependencies || {}), - ...(packageJson.peerDependencies || {}) + ...(packageJson.peerDependencies || {}), }); - } - catch(e) { + } catch (e) { externals = []; } @@ -173,7 +176,7 @@ async function lint(srcPath) { { stdio: "inherit", cwd: paths.appPath } ); - linter.on('close', (code) => { + linter.on("close", (code) => { console.log(`child process exited with code ${code}`); }); @@ -181,19 +184,20 @@ async function lint(srcPath) { } async function typeCheck(srcPath) { - const isTs = await checkFileExists(path.join(paths.appPath, srcPath, "tsconfig.json")); + const isTs = await checkFileExists( + path.join(paths.appPath, srcPath, "tsconfig.json") + ); if (!isTs) { return null; } - const typeChecker = spawn( - await getCmdPath("tsc"), - [ "--noEmit" ], - { stdio: "inherit", cwd: path.join(paths.appPath, srcPath) } - ); + const typeChecker = spawn(await getCmdPath("tsc"), ["--noEmit"], { + stdio: "inherit", + cwd: path.join(paths.appPath, srcPath), + }); - typeChecker.on('close', (code) => { + typeChecker.on("close", (code) => { console.log(`child process exited with code ${code}`); }); @@ -201,7 +205,7 @@ async function typeCheck(srcPath) { } async function cancelAllChecks(checks) { - (await Promise.allSettled(checks)).forEach(result => { + (await Promise.allSettled(checks)).forEach((result) => { if (result.status === "fulfilled") { result.value && result.value.kill(); } @@ -235,8 +239,9 @@ async function startBuilder(entryPoints) { return entryPointsIndexed[srcPath]; } - entryPoints.forEach(entryPoint => { + entryPoints.forEach((entryPoint) => { const srcPath = entryPoint.debugSrcPath; + const handler = entryPoint.debugSrcHandler; // Not catching esbuild errors @@ -254,7 +259,7 @@ async function startBuilder(entryPoints) { logger.log("Building Lambda code..."); const results = await Promise.allSettled(transpilerPromises); - results.forEach(result => { + results.forEach((result) => { if (result.status === "fulfilled") { return; } @@ -264,12 +269,15 @@ async function startBuilder(entryPoints) { cancelAllChecks(lintPromises.concat(typeCheckPromises)); }); - if (! hasError) { - uniquePaths.forEach(srcPath => { - chokidar.watch(path.join(paths.appPath, srcPath), chokidarOptions) - .on('all', file => onFileChange(file, srcPath, getHandlersForSrcPath(srcPath))) - .on('error', error => console.log(`Watch ${error}`)) - .on('ready', () => { + if (!hasError) { + uniquePaths.forEach((srcPath) => { + chokidar + .watch(path.join(paths.appPath, srcPath), chokidarOptions) + .on("all", (file) => + onFileChange(file, srcPath, getHandlersForSrcPath(srcPath)) + ) + .on("error", (error) => console.log(`Watch ${error}`)) + .on("ready", () => { console.log(`Watcher ready for ${srcPath}...`); }); }); diff --git a/yarn.lock b/yarn.lock index 19fe1ad0d4..8d40a1f707 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1233,6 +1233,22 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@eslint/eslintrc@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.2.tgz#d01fc791e2fc33e88a29d6f3dc7e93d0cd784b76" + integrity sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.19" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@evocateur/libnpmaccess@^3.1.2": version "3.1.2" resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" @@ -2575,6 +2591,11 @@ acorn-jsx@^5.2.0: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== +acorn-jsx@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + acorn-walk@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" @@ -2585,6 +2606,11 @@ acorn@^7.1.1, acorn@^7.3.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== +acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + agent-base@4, agent-base@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" @@ -3487,7 +3513,7 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-truncate@2.1.0, cli-truncate@^2.1.0: +cli-truncate@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== @@ -3613,10 +3639,10 @@ commander@^4.0.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== +commander@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== compare-func@^2.0.0: version "2.0.0" @@ -3824,16 +3850,16 @@ cosmiconfig@^5.1.0: js-yaml "^3.13.1" parse-json "^4.0.0" -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== +cosmiconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== dependencies: "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" + import-fresh "^3.2.1" parse-json "^5.0.0" path-type "^4.0.0" - yaml "^1.7.2" + yaml "^1.10.0" crc-32@^1.2.0: version "1.2.0" @@ -3966,6 +3992,13 @@ debug@^3.1.0: dependencies: ms "^2.1.1" +debug@^4.2.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -4218,7 +4251,7 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -enquirer@^2.3.5: +enquirer@^2.3.5, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -4377,6 +4410,14 @@ eslint-scope@5.1.0, eslint-scope@^5.0.0, eslint-scope@^5.1.0: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + eslint-utils@^2.0.0, eslint-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" @@ -4389,7 +4430,55 @@ eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== -eslint@^7.6.0, eslint@^7.7.0: +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint@^7.16.0: + version "7.16.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.16.0.tgz#a761605bf9a7b32d24bb7cde59aeb0fd76f06092" + integrity sha512-iVWPS785RuDA4dWuhhgXTNrGxHHK3a8HLSMBgbbU59ruJDubUraXN8N5rn7kb8tG6sjg74eE0RA3YWT51eusEw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@eslint/eslintrc" "^0.2.2" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.2.0" + esutils "^2.0.2" + file-entry-cache "^6.0.0" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.19" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.4" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +eslint@^7.7.0: version "7.7.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.7.0.tgz#18beba51411927c4b64da0a8ceadefe4030d6073" integrity sha512-1KUxLzos0ZVsyL81PnRN335nDtQ8/vZUD6uMtWbF+5zDtjKcsklIi78XoE0MVL93QvWTu+E5y44VyyCsOMBrIg== @@ -4440,6 +4529,15 @@ espree@^7.2.0: acorn-jsx "^5.2.0" eslint-visitor-keys "^1.3.0" +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -4459,12 +4557,19 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.1.0: +estraverse@^5.1.0, estraverse@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== @@ -4502,7 +4607,7 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^4.0.0, execa@^4.0.1: +execa@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2" integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A== @@ -4517,6 +4622,21 @@ execa@^4.0.0, execa@^4.0.1: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + exit-on-epipe@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" @@ -4665,6 +4785,13 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" +file-entry-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" + integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== + dependencies: + flat-cache "^3.0.4" + file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" @@ -4738,11 +4865,24 @@ flat-cache@^2.0.1: rimraf "2.6.3" write "1.0.3" +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + flatted@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== +flatted@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067" + integrity sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA== + flush-write-stream@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -5271,15 +5411,15 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -husky@^4.2.5: - version "4.2.5" - resolved "https://registry.yarnpkg.com/husky/-/husky-4.2.5.tgz#2b4f7622673a71579f901d9885ed448394b5fa36" - integrity sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ== +husky@^4.3.6: + version "4.3.6" + resolved "https://registry.yarnpkg.com/husky/-/husky-4.3.6.tgz#ebd9dd8b9324aa851f1587318db4cccb7665a13c" + integrity sha512-o6UjVI8xtlWRL5395iWq9LKDyp/9TE7XMOTvIpEVzW638UcGxTmV5cfel6fsk/jbZSTlvfGVJf2svFtybcIZag== dependencies: chalk "^4.0.0" ci-info "^2.0.0" compare-versions "^3.6.0" - cosmiconfig "^6.0.0" + cosmiconfig "^7.0.0" find-versions "^3.2.0" opencollective-postinstall "^2.0.2" pkg-dir "^4.2.0" @@ -5336,7 +5476,7 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0, import-fresh@^3.1.0: +import-fresh@^3.0.0: version "3.2.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== @@ -5344,6 +5484,14 @@ import-fresh@^3.0.0, import-fresh@^3.1.0: parent-module "^1.0.0" resolve-from "^4.0.0" +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -6462,20 +6610,20 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -lint-staged@^10.2.11: - version "10.2.11" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.2.11.tgz#713c80877f2dc8b609b05bc59020234e766c9720" - integrity sha512-LRRrSogzbixYaZItE2APaS4l2eJMjjf5MbclRZpLJtcQJShcvUzKXsNeZgsLIZ0H0+fg2tL4B59fU9wHIHtFIA== +lint-staged@^10.5.3: + version "10.5.3" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.5.3.tgz#c682838b3eadd4c864d1022da05daa0912fb1da5" + integrity sha512-TanwFfuqUBLufxCc3RUtFEkFraSPNR3WzWcGF39R3f2J7S9+iF9W0KTVLfSy09lYGmZS5NDCxjNvhGMSJyFCWg== dependencies: - chalk "^4.0.0" - cli-truncate "2.1.0" - commander "^5.1.0" - cosmiconfig "^6.0.0" - debug "^4.1.1" + chalk "^4.1.0" + cli-truncate "^2.1.0" + commander "^6.2.0" + cosmiconfig "^7.0.0" + debug "^4.2.0" dedent "^0.7.0" - enquirer "^2.3.5" - execa "^4.0.1" - listr2 "^2.1.0" + enquirer "^2.3.6" + execa "^4.1.0" + listr2 "^3.2.2" log-symbols "^4.0.0" micromatch "^4.0.2" normalize-path "^3.0.0" @@ -6483,10 +6631,10 @@ lint-staged@^10.2.11: string-argv "0.3.1" stringify-object "^3.3.0" -listr2@^2.1.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-2.6.0.tgz#788a3d202978a1b8582062952cbc49272c8e206a" - integrity sha512-nwmqTJYQQ+AsKb4fCXH/6/UmLCEDL1jkRAdSn9M6cEUzoRGrs33YD/3N86gAZQnGZ6hxV18XSdlBcJ1GTmetJA== +listr2@^3.2.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.2.3.tgz#ef9e0d790862f038dde8a9837be552b1adfd1c07" + integrity sha512-vUb80S2dSUi8YxXahO8/I/s29GqnOL8ozgHVLjfWQXa03BNEeS1TpBLjh2ruaqq5ufx46BRGvfymdBSuoXET5w== dependencies: chalk "^4.1.0" cli-truncate "^2.1.0" @@ -6494,7 +6642,7 @@ listr2@^2.1.0: indent-string "^4.0.0" log-update "^4.0.0" p-map "^4.0.0" - rxjs "^6.6.2" + rxjs "^6.6.3" through "^2.3.8" load-json-file@^1.0.0: @@ -6989,7 +7137,7 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@^2.0.0, ms@^2.1.1: +ms@2.1.2, ms@^2.0.0, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== @@ -7742,10 +7890,10 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prettier@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" - integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg== +prettier@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== pretty-format@^25.2.1, pretty-format@^25.5.0: version "25.5.0" @@ -8346,7 +8494,7 @@ rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: dependencies: glob "^7.1.3" -rimraf@^3.0.0: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -8370,13 +8518,20 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs@^6.4.0, rxjs@^6.6.2: +rxjs@^6.4.0: version "6.6.2" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.2.tgz#8096a7ac03f2cc4fe5860ef6e572810d9e01c0d2" integrity sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg== dependencies: tslib "^1.9.0" +rxjs@^6.6.3: + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== + dependencies: + tslib "^1.9.0" + safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -8990,7 +9145,7 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^3.1.0: +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -9041,7 +9196,7 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" -table@^6.0.3: +table@^6.0.3, table@^6.0.4: version "6.0.4" resolved "https://registry.yarnpkg.com/table/-/table-6.0.4.tgz#c523dd182177e926c723eb20e1b341238188aa0d" integrity sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw== @@ -9837,7 +9992,7 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yaml@1.10.0, yaml@^1.7.2: +yaml@1.10.0, yaml@^1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== From 0da881f437a74c8f337bf6be61650dcc6c3ba90a Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 25 Dec 2020 22:53:45 -0500 Subject: [PATCH 165/481] Using queues to manage esbuild and linting --- .eslintignore | 2 +- packages/cli/.gitignore | 4 +- packages/cli/bin/scripts.js | 2 +- packages/cli/scripts/start.js | 415 +++++++++++++----- packages/cli/scripts/util/.eslintrc.babel.js | 2 +- .../cli/scripts/util/.eslintrc.internal.js | 18 + packages/cli/scripts/util/.eslintrc.js | 16 - packages/cli/scripts/util/cdkOptions.js | 4 +- packages/cli/scripts/util/paths.js | 2 +- packages/cli/test/start/lib/index.js | 1 + packages/cli/test/start/src/api/api.ts | 8 +- packages/cli/test/start/src/api/package.json | 5 +- packages/cli/test/start/src/api/yarn.lock | 103 +---- 13 files changed, 352 insertions(+), 230 deletions(-) create mode 100644 packages/cli/scripts/util/.eslintrc.internal.js delete mode 100644 packages/cli/scripts/util/.eslintrc.js diff --git a/.eslintignore b/.eslintignore index b261e96a43..9f4f115416 100644 --- a/.eslintignore +++ b/.eslintignore @@ -5,7 +5,7 @@ dist # Don't lint nyc coverage output coverage # Don't lint build outputs in test -/packages/cli/test/*/build/** +/packages/cli/test/*/.build/** /packages/cli/test/*/cdk.out/** # Don't lint templates /packages/create-serverless-stack/templates/** diff --git a/packages/cli/.gitignore b/packages/cli/.gitignore index 888275b7ca..e74d9ff112 100644 --- a/packages/cli/.gitignore +++ b/packages/cli/.gitignore @@ -1,3 +1,3 @@ # Build outputs in test -/test/*/build/** -/test/*/cdk.out/** +/test/**/.build/** +/test/**/cdk.out/** diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index 7287a6e3aa..9d994b8ca4 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -4,7 +4,7 @@ process.on("uncaughtException", (err) => { // Format any uncaught exceptions - console.error("\n" + (err.stack || err) + "\n"); + console.error("\n" + (err ? err.stack || err : "Uncaught exception") + "\n"); process.exit(1); }); process.on("unhandledRejection", (err) => { diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index bb61e5bf51..1a8701ab1d 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -37,9 +37,154 @@ const WEBSOCKET_CLOSE_CODE = { }; const transpilers = {}; -let externalsCache = {}; +const transpilerStatus = { + IDLE: "idle", + BUSY: "busy", +}; +const transpilerTemplateObject = { + status: transpilerStatus.IDLE, + esbuilder: null, + outHandler: null, + outHandlerCbs: [], +}; let ws; +let tscExec; +let eslintExec; + +const rebuildTranspilerQ = createPromiseQueue(function (srcPath, handler) { + const transpiler = getTranspilerObject(srcPath, handler); + return rebuildTranspiler(transpiler); +}); +const lintQ = createPromiseQueue(lint); +const typeCheckQ = createPromiseQueue(typeCheck); + +function makeCancelable(promise, onCancel) { + let hasCanceled_ = false; + + function cancelError() { + return { cancelled: true }; + } + + const wrappedPromise = new Promise((resolve, reject) => { + promise.then( + // Don't do anything if cancelled + (val) => (hasCanceled_ ? reject(cancelError()) : resolve(val)), + (error) => (hasCanceled_ ? reject(cancelError()) : reject(error)) + ); + }); + + wrappedPromise.cancel = function () { + onCancel && onCancel(); + hasCanceled_ = true; + }; + + return wrappedPromise; +} + +function createPromiseQueue(fn) { + const callStatus = { + IDLE: "idle", + BUSY: "busy", + }; + const callTemplate = { + sig: null, + args: null, + promise: null, + callbacks: [], + status: callStatus.IDLE, + }; + + const calls = {}; + + function getCallSignature(args) { + return args.map((arg) => arg.toString()).join(" "); + } + + function getCall(args) { + const sig = getCallSignature(args); + + return calls[sig] + ? calls[sig] + : (calls[sig] = { ...callTemplate, sig, args }); + } + + function addToCallbacks(call) { + return new Promise((resolve, reject) => + call.callbacks.push({ resolve, reject }) + ); + } + + function setIdle(call) { + call.status = callStatus.IDLE; + call.promise = null; + call.callbacks = []; + } + + function setBusy(call) { + call.status = callStatus.BUSY; + + if (call.promise) { + call.promise.cancel && call.promise.cancel(); + call.promise = null; + } + + const promise = (call.promise = fn(...call.args)); + + return promise.then( + (value) => handleNext(call, "fulfilled", value), + (reason) => handleNext(call, "rejected", reason) + ); + } + + function onBusyComplete(call, resultStatus, result) { + call.callbacks.forEach(({ resolve, reject }) => + resultStatus === "fulfilled" ? resolve(result) : reject(result) + ); + + setIdle(call); + } + + function handleNext(call, resultStatus, result) { + if (resultStatus === "rejected" && result && result.cancelled) { + console.log("Discard cancelled promise"); + // Discard cancelled promises + return; + } + + switch (call.status) { + case callStatus.IDLE: + break; + case callStatus.BUSY: + onBusyComplete(call, resultStatus, result); + break; + } + } + + return { + queue: function (...args) { + const call = getCall(args); + + return setBusy(call); + }, + + complete: function (...args) { + const call = getCall(args); + + switch (call.status) { + case callStatus.IDLE: + return Promise.resolve(); + case callStatus.BUSY: + return addToCallbacks(call); + } + }, + }; +} + +// TODO: Remove +//function sleep(ms) { +// return new Promise(resolve => setTimeout(resolve, ms)); +//} function setTimer(lambda, handleResponse, timeoutInMs) { return setTimeout(function () { @@ -54,14 +199,39 @@ function setTimer(lambda, handleResponse, timeoutInMs) { }, timeoutInMs); } -function getTranspilerKey(srcPath, handler) { - return `${srcPath}/${handler}`; +function createTranspilerObject(esbuilder, outHandler) { + return { + ...transpilerTemplateObject, + esbuilder, + outHandler, + }; +} + +function getTranspilerObject(srcPath, handler) { + return transpilers[`${srcPath}/${handler}`]; +} + +function setTranspilerObject(srcPath, handler, transpiler) { + return (transpilers[`${srcPath}/${handler}`] = transpiler); +} + +function rebuildTranspiler(transpiler) { + return makeCancelable(transpiler.esbuilder.rebuild()); + //return makeCancelable(function() { + //return transpiler.esbuilder.rebuild(); + // TODO: Remove + //console.log("Fake rebuild..."); + //return sleep(3000); + //}()); } async function getTranspiledHandler(srcPath, handler) { - const transpiler = transpilers[getTranspilerKey(srcPath, handler)]; + const transpiler = getTranspilerObject(srcPath, handler); - await transpiler.esbuilder.rebuild(); + console.log(`Getting latest transpiler output for ${handler}...`); + + // Wait for transpiler queue to complete + await rebuildTranspilerQ.complete(srcPath, handler); return transpiler.outHandler; } @@ -101,16 +271,13 @@ async function getHandlerFilePath(srcPath, handler) { } async function getAllExternalsForHandler(srcPath) { - if (externalsCache[srcPath]) { - return externalsCache[srcPath]; - } - let packageJson, externals; try { - packageJson = await fs.promises.readFile( - path.join(srcPath, "package.json"), - { encoding: "utf-8" } + packageJson = JSON.parse( + await fs.promises.readFile(path.join(srcPath, "package.json"), { + encoding: "utf-8", + }) ); externals = Object.keys({ ...(packageJson.dependencies || {}), @@ -118,21 +285,23 @@ async function getAllExternalsForHandler(srcPath) { ...(packageJson.peerDependencies || {}), }); } catch (e) { + console.log(`No package.json found in ${srcPath}`); externals = []; } - externalsCache[srcPath] = externals; - return externals; } async function transpile(srcPath, handler) { + const outSrcPath = path.join(srcPath, paths.appBuildDir); const fullPath = await getHandlerFilePath(srcPath, handler); - const compiledDir = "src"; + //const key = `${srcPath}/${handler}`.replace(/[\/.]/g, '-'); const external = await getAllExternalsForHandler(srcPath); + console.log(`Transpiling ${handler}...`); + const esbuilder = await esbuild.build({ external, bundle: true, @@ -141,89 +310,126 @@ async function transpile(srcPath, handler) { platform: "node", incremental: true, entryPoints: [fullPath], - outdir: path.join(paths.appBuildPath, compiledDir), + outdir: path.join(paths.appPath, outSrcPath), + //metafile: path.join(paths.appBuildPath, compiledDir, `.esbuild.${key}.json`), }); - const transpiler = { - esbuilder, - outHandler: { - handler, - srcPath: path.join(paths.appBuildDir, compiledDir), - }, - }; + const transpiler = createTranspilerObject(esbuilder, { + handler, + srcPath: outSrcPath, + }); - transpilers[getTranspilerKey(srcPath, handler)] = transpiler; + setTranspilerObject(srcPath, handler, transpiler); return transpiler; } -async function lint(srcPath) { - const linter = spawn( - await getCmdPath("eslint"), - [ - "--no-error-on-unmatched-pattern", - "--config", - path.join(paths.ownPath, "scripts", "util", ".eslintrc.js"), - "--ext", - ".js,.ts", - "--fix", - // Handling nested ESLint projects in Yarn Workspaces - // https://github.com/serverless-stack/serverless-stack/issues/11 - "--resolve-plugins-relative-to", - ".", - srcPath, - ], - { stdio: "inherit", cwd: paths.appPath } - ); +function lint(srcPath) { + // Need the ref for a closure + let linter = { ref: null }; + + const promise = new Promise((resolve) => { + linter.ref = spawn( + eslintExec, + [ + "--no-error-on-unmatched-pattern", + "--config", + path.join(paths.ownPath, "scripts", "util", ".eslintrc.internal.js"), + "--ext", + ".js,.ts", + "--fix", + // Handling nested ESLint projects in Yarn Workspaces + // https://github.com/serverless-stack/serverless-stack/issues/11 + "--resolve-plugins-relative-to", + ".", + srcPath, + ], + { stdio: "inherit", cwd: paths.appPath } + ); - linter.on("close", (code) => { - console.log(`child process exited with code ${code}`); + linter.ref.on("close", (code) => { + console.log(`child process exited with code ${code}`); + resolve(); + return; + }); }); - return linter; + return makeCancelable(promise, function () { + linter.ref && linter.ref.kill(); + }); } -async function typeCheck(srcPath) { - const isTs = await checkFileExists( - path.join(paths.appPath, srcPath, "tsconfig.json") - ); +function typeCheck(srcPath) { + // Need the ref for a closure + let typeChecker = { ref: null }; - if (!isTs) { - return null; - } + const tsconfigPath = path.join(paths.appPath, srcPath, "tsconfig.json"); - const typeChecker = spawn(await getCmdPath("tsc"), ["--noEmit"], { - stdio: "inherit", - cwd: path.join(paths.appPath, srcPath), - }); + const promise = new Promise((resolve) => { + checkFileExists(tsconfigPath).then((isTs) => { + if (!isTs) { + resolve(); + return; + } + + typeChecker.ref = spawn( + tscExec, + ["--noEmit", "--project", tsconfigPath], + { + stdio: "inherit", + cwd: path.join(paths.appPath, srcPath), + } + ); - typeChecker.on("close", (code) => { - console.log(`child process exited with code ${code}`); + typeChecker.ref.on("close", (code) => { + console.log(`child process exited with code ${code}`); + resolve(); + return; + }); + }); }); - return typeChecker; + return makeCancelable(promise, function () { + typeChecker.ref && typeChecker.ref.kill(); + }); } async function cancelAllChecks(checks) { - (await Promise.allSettled(checks)).forEach((result) => { - if (result.status === "fulfilled") { - result.value && result.value.kill(); - } - }); + checks.forEach((check) => check.cancel && check.cancel()); } -function onFileChange(file, srcPath, handlers) { - logger.log(`File change: ${file}`); - console.log(srcPath, handlers); +async function onFileChange(file, srcPath, handlers) { + let hasError = false; + + console.log(`File change: ${file}`); + + const transpilerPromises = handlers.map((handler) => + rebuildTranspilerQ.queue(srcPath, handler) + ); + + const lintPromise = lintQ.queue(srcPath); + const typeCheckPromise = typeCheckQ.queue(srcPath); + + console.log("Rebuilding..."); + + const results = await Promise.allSettled(transpilerPromises); + + results.forEach((result) => { + if (result.status === "rejected" && !hasError) { + hasError = true; + // Cancel all the running checks + cancelAllChecks([lintPromise, typeCheckPromise]); + } + }); } async function startBuilder(entryPoints) { let hasError = false; - const entryPointsIndexed = {}; - const transpilerPromises = []; + tscExec = await getCmdPath("tsc"); + eslintExec = await getCmdPath("eslint"); - externalsCache = {}; + const entryPointsIndexed = {}; function recordEntryPoint(srcPath, handler) { entryPointsIndexed[srcPath] = entryPointsIndexed[srcPath] @@ -239,49 +445,45 @@ async function startBuilder(entryPoints) { return entryPointsIndexed[srcPath]; } - entryPoints.forEach((entryPoint) => { + const transpilerPromises = entryPoints.map((entryPoint) => { const srcPath = entryPoint.debugSrcPath; - const handler = entryPoint.debugSrcHandler; + recordEntryPoint(srcPath, handler); + // Not catching esbuild errors // Letting it handle the error messages for now - transpilerPromises.push(transpile(srcPath, handler)); - - recordEntryPoint(srcPath, handler); + return transpile(srcPath, handler); }); const uniquePaths = getUniqueSrcPaths(); - const lintPromises = uniquePaths.map(lint); - const typeCheckPromises = uniquePaths.map(typeCheck); + const lintPromises = uniquePaths.map(lintQ.queue); + const typeCheckPromises = uniquePaths.map(typeCheckQ.queue); logger.log("Building Lambda code..."); + const results = await Promise.allSettled(transpilerPromises); results.forEach((result) => { - if (result.status === "fulfilled") { - return; + if (result.status === "rejected" && !hasError) { + hasError = true; + // Cancel all the running checks + cancelAllChecks(lintPromises.concat(typeCheckPromises)); } - - hasError = true; - // Cancel all the running checks - cancelAllChecks(lintPromises.concat(typeCheckPromises)); }); - if (!hasError) { - uniquePaths.forEach((srcPath) => { - chokidar - .watch(path.join(paths.appPath, srcPath), chokidarOptions) - .on("all", (file) => - onFileChange(file, srcPath, getHandlersForSrcPath(srcPath)) - ) - .on("error", (error) => console.log(`Watch ${error}`)) - .on("ready", () => { - console.log(`Watcher ready for ${srcPath}...`); - }); - }); - } + uniquePaths.forEach((srcPath) => { + chokidar + .watch(path.join(paths.appPath, srcPath), chokidarOptions) + .on("all", (ev, file) => + onFileChange(file, srcPath, getHandlersForSrcPath(srcPath)) + ) + .on("error", (error) => console.log(`Watch ${error}`)) + .on("ready", () => { + console.log(`Watcher ready for ${srcPath}...`); + }); + }); } function startClient(debugEndpoint) { @@ -332,14 +534,14 @@ async function onMessage(message) { } if (data.action === "failedToSendResponseDueToStubDisconnected") { logger.error( - chalk.grey(debugRequestId) + + chalk.grey(data.debugRequestId) + " Failed to send a response because the Lambda function is disconnected" ); return; } if (data.action === "failedToSendResponseDueToUnknown") { logger.error( - chalk.grey(debugRequestId) + + chalk.grey(data.debugRequestId) + " Failed to send a response to the Lambda function" ); return; @@ -380,10 +582,19 @@ async function onMessage(message) { const semiSpace = Math.floor(newSpace / 2); const oldSpace = context.memoryLimitInMB - newSpace; - const transpiledHandler = await getTranspiledHandler( - debugSrcPath, - debugSrcHandler - ); + let transpiledHandler; + + try { + transpiledHandler = await getTranspiledHandler( + debugSrcPath, + debugSrcHandler + ); + console.log(transpiledHandler); + } catch (e) { + console.log(e); + // TODO: Handle esbuild transpilation error + return; + } let lambdaResponse; const lambda = spawn( diff --git a/packages/cli/scripts/util/.eslintrc.babel.js b/packages/cli/scripts/util/.eslintrc.babel.js index 1d674f72bd..ff15b93ef0 100644 --- a/packages/cli/scripts/util/.eslintrc.babel.js +++ b/packages/cli/scripts/util/.eslintrc.babel.js @@ -2,7 +2,7 @@ module.exports = { parser: "@babel/eslint-parser", parserOptions: { babelOptions: { - configFile: "./build/.babelrc.json", + configFile: "./.build/.babelrc.json", }, }, plugins: ["@babel"], diff --git a/packages/cli/scripts/util/.eslintrc.internal.js b/packages/cli/scripts/util/.eslintrc.internal.js new file mode 100644 index 0000000000..301298b292 --- /dev/null +++ b/packages/cli/scripts/util/.eslintrc.internal.js @@ -0,0 +1,18 @@ +module.exports = { + root: true, + parser: "@babel/eslint-parser", + parserOptions: { + babelOptions: { + configFile: "./.build/.babelrc.json", + }, + }, + plugins: ["@babel"], + overrides: [ + { + files: ["*.ts", "*.tsx"], + parser: "@typescript-eslint/parser", + plugins: ["@typescript-eslint"], + extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"], + }, + ], +}; diff --git a/packages/cli/scripts/util/.eslintrc.js b/packages/cli/scripts/util/.eslintrc.js deleted file mode 100644 index 7ad8abca0c..0000000000 --- a/packages/cli/scripts/util/.eslintrc.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - root: true, - parser: "@babel/eslint-parser", - parserOptions: { - babelOptions: { - configFile: "./build/.babelrc.json", - }, - }, - plugins: ["@babel"], - overrides: [{ - files: ["*.ts", "*.tsx"], - parser: "@typescript-eslint/parser", - plugins: ["@typescript-eslint"], - extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"], - }] -}; diff --git a/packages/cli/scripts/util/cdkOptions.js b/packages/cli/scripts/util/cdkOptions.js index 2c4f19454c..c9485fb657 100644 --- a/packages/cli/scripts/util/cdkOptions.js +++ b/packages/cli/scripts/util/cdkOptions.js @@ -1,6 +1,6 @@ "use strict"; module.exports = { - output: "build/cdk.out", - app: "node build/run.js", + output: ".build/cdk.out", + app: "node .build/run.js", }; diff --git a/packages/cli/scripts/util/paths.js b/packages/cli/scripts/util/paths.js index e742b445a0..781d3f04ef 100644 --- a/packages/cli/scripts/util/paths.js +++ b/packages/cli/scripts/util/paths.js @@ -14,7 +14,7 @@ const resolveApp = (relativePath) => path.resolve(appDirectory, relativePath); const resolveOwn = (relativePath) => path.resolve(__dirname, "..", relativePath); -const appBuildDir = "build"; +const appBuildDir = ".build"; module.exports = { appBuildDir, diff --git a/packages/cli/test/start/lib/index.js b/packages/cli/test/start/lib/index.js index 44be54699e..51bb8cf379 100644 --- a/packages/cli/test/start/lib/index.js +++ b/packages/cli/test/start/lib/index.js @@ -29,6 +29,7 @@ class MySampleStack extends sst.Stack { code: lambda.Code.fromAsset("src/api"), handler: "api.handler", runtime: lambda.Runtime.NODEJS_12_X, + timeout: cdk.Duration.seconds(10), environment: { TOPIC_ARN: topic.topicArn, }, diff --git a/packages/cli/test/start/src/api/api.ts b/packages/cli/test/start/src/api/api.ts index 2d97f7ae7b..da866ccb2e 100644 --- a/packages/cli/test/start/src/api/api.ts +++ b/packages/cli/test/start/src/api/api.ts @@ -1,18 +1,18 @@ import * as AWS from "aws-sdk"; +import mirrarray from "mirrarray"; import { APIGatewayEvent } from "aws-lambda"; import str from "./lib"; const sns = new AWS.SNS(); -export async function handler( - event: APIGatewayEvent, -) { - // hi +export async function handler(event: APIGatewayEvent) { console.log( `Logging from inside the API Lambda for route: ${event.routeKey}` ); + mirrarray(["this", "that", "another"]); + await sns .publish({ MessageStructure: "string", diff --git a/packages/cli/test/start/src/api/package.json b/packages/cli/test/start/src/api/package.json index 8fdc8de8aa..6e5544386d 100644 --- a/packages/cli/test/start/src/api/package.json +++ b/packages/cli/test/start/src/api/package.json @@ -5,7 +5,8 @@ "version": "0.0.1", "license": "ISC", "dependencies": { - "aws": "^0.0.3-2", - "aws-lambda": "^1.0.6" + "aws-lambda": "^1.0.6", + "aws-sdk": "^2.817.0", + "mirrarray": "^2.0.0" } } diff --git a/packages/cli/test/start/src/api/yarn.lock b/packages/cli/test/start/src/api/yarn.lock index 546d2f53b7..4c36540336 100644 --- a/packages/cli/test/start/src/api/yarn.lock +++ b/packages/cli/test/start/src/api/yarn.lock @@ -19,7 +19,7 @@ aws-lambda@^1.0.6: js-yaml "^3.13.1" watchpack "^2.0.0-beta.10" -aws-sdk@*: +aws-sdk@*, aws-sdk@^2.817.0: version "2.817.0" resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.817.0.tgz#3a97b690b0ec494cf8ee927affb3973cf26abcc8" integrity sha512-DZIdWpkcqbqsCz0MEskHsyFaqc6Tk9XIFqXAg1AKHbOgC8nU45bz+Y2osX77pU01JkS/G7OhGtGmlKDrOPvFwg== @@ -34,31 +34,11 @@ aws-sdk@*: uuid "3.3.2" xml2js "0.4.19" -aws@^0.0.3-2: - version "0.0.3-2" - resolved "https://registry.yarnpkg.com/aws/-/aws-0.0.3-2.tgz#8c4c170c47364b309fdfe4b0fe4c17104483fa46" - integrity sha1-jEwXDEc2SzCf3+Sw/kwXEESD+kY= - dependencies: - vows ">= 0.5.1" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - base64-js@^1.0.2: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -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" - buffer@4.9.2: version "4.9.2" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" @@ -73,16 +53,6 @@ commander@^3.0.2: resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -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== - esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -93,33 +63,11 @@ events@1.1.1: resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= -eyes@~0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" - integrity sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A= - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.1.2: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - graceful-fs@^4.1.2: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" @@ -135,19 +83,6 @@ ieee754@^1.1.4: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - isarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -166,24 +101,10 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -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 sha1-F0uSaHNVNP+8es5r9TpanhtcX18= +mirrarray@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mirrarray/-/mirrarray-2.0.0.tgz#f712a091269b79d4b3c8d3344242756bb0a5c671" + integrity sha512-z7YW6OC9zWriGlC+pM01GEnaqnzzAXwrNtaV2mPl2J0BmCRexAPLiWoaPH5zNvdrpZdijHD9/IQAovptiLPe5w== punycode@1.3.2: version "1.3.2" @@ -223,15 +144,6 @@ uuid@3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== -"vows@>= 0.5.1": - version "0.8.3" - resolved "https://registry.yarnpkg.com/vows/-/vows-0.8.3.tgz#36e353c2bca3a93902fc32eb8c5baab2e3a93f10" - integrity sha512-PVIxa/ovXhrw5gA3mz6M+ZF3PHlqX4tutR2p/y9NWPAaFVKcWBE8b2ktfr0opQM/qFmcOVWKjSCJVjnYOvjXhw== - dependencies: - diff "^4.0.1" - eyes "~0.1.6" - glob "^7.1.2" - watchpack@^2.0.0-beta.10: version "2.1.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.0.tgz#e63194736bf3aa22026f7b191cd57907b0f9f696" @@ -240,11 +152,6 @@ watchpack@^2.0.0-beta.10: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - xml2js@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" From ff41ea21b5c79b3bac1a8c0b2fbb49e69e17be0e Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 28 Dec 2020 13:27:57 -0500 Subject: [PATCH 166/481] Using esbuild metafile --- packages/cli/scripts/start.js | 332 +++++++++++++++++++++++----------- 1 file changed, 227 insertions(+), 105 deletions(-) diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 1a8701ab1d..6f6f03665c 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -36,28 +36,33 @@ const WEBSOCKET_CLOSE_CODE = { NEW_CLIENT_CONNECTED: 4901, }; -const transpilers = {}; -const transpilerStatus = { - IDLE: "idle", - BUSY: "busy", -}; const transpilerTemplateObject = { - status: transpilerStatus.IDLE, + srcPath: null, + handler: null, esbuilder: null, + inputFiles: null, outHandler: null, - outHandlerCbs: [], }; let ws; let tscExec; let eslintExec; +const transpilers = {}; +const srcPathsIndex = {}; +const inputFilesIndex = {}; const rebuildTranspilerQ = createPromiseQueue(function (srcPath, handler) { - const transpiler = getTranspilerObject(srcPath, handler); + const transpiler = getTranspiler(srcPath, handler); return rebuildTranspiler(transpiler); }); -const lintQ = createPromiseQueue(lint); -const typeCheckQ = createPromiseQueue(typeCheck); +const lintQ = createPromiseQueue(function (srcPath) { + // Esnure that only the srcPath is used for indexing the queue + return lint(srcPath); +}); +const typeCheckQ = createPromiseQueue(function (srcPath) { + // Esnure that only the srcPath is used for indexing the queue + return typeCheck(srcPath); +}); function makeCancelable(promise, onCancel) { let hasCanceled_ = false; @@ -131,10 +136,12 @@ function createPromiseQueue(fn) { const promise = (call.promise = fn(...call.args)); - return promise.then( + promise.then( (value) => handleNext(call, "fulfilled", value), (reason) => handleNext(call, "rejected", reason) ); + + return promise; } function onBusyComplete(call, resultStatus, result) { @@ -199,24 +206,95 @@ function setTimer(lambda, handleResponse, timeoutInMs) { }, timeoutInMs); } -function createTranspilerObject(esbuilder, outHandler) { - return { +function getInputFilesForTranspiler(transpiler) { + return transpiler.inputFiles; +} + +function getSrcPathForTranspiler(transpiler) { + return transpiler.srcPath; +} + +function getHandlerForTranspiler(transpiler) { + return transpiler.handler; +} + +function getEntryPointKeys() { + return Object.keys(transpilers); +} + +function getTranspilerForKey(key) { + return transpilers[key]; +} + +function getEsbuilderForTranspiler(transpiler) { + return transpiler.esbuilder; +} + +function addTranspiler({ + srcPath, + handler, + esbuilder, + outHandler, + inputFiles, +}) { + const transpiler = { ...transpilerTemplateObject, + srcPath, + handler, esbuilder, + inputFiles, outHandler, }; + + return (transpilers[`${srcPath}/${handler}`] = transpiler); } -function getTranspilerObject(srcPath, handler) { +function getTranspiler(srcPath, handler) { return transpilers[`${srcPath}/${handler}`]; } -function setTranspilerObject(srcPath, handler, transpiler) { - return (transpilers[`${srcPath}/${handler}`] = transpiler); +function getAllInputFiles() { + return Object.keys(inputFilesIndex); +} + +function addEntryPointKeyForInputFile(file, key) { + if (inputFilesIndex[file]) { + inputFilesIndex.file.push(key); + } else { + inputFilesIndex[file] = [key]; + } +} + +function getEntryPointKeysForInputFile(file) { + return inputFilesIndex[file]; +} + +function addInputFilesForSrcPath(srcPath, inputFiles) { + function addToInputFilesIndex(index, inputFiles) { + inputFiles.forEach((file) => (index[file] = true)); + return index; + } + + if (srcPathsIndex[srcPath]) { + srcPathsIndex[srcPath] = addToInputFilesIndex( + srcPathsIndex[srcPath], + inputFiles + ); + } else { + srcPathsIndex[srcPath] = addToInputFilesIndex({}, inputFiles); + } +} + +function getUniqueSrcPaths() { + return Object.keys(srcPathsIndex); +} + +function getInputFilesForSrcPath(srcPath) { + return Object.keys(srcPathsIndex[srcPath]); } function rebuildTranspiler(transpiler) { - return makeCancelable(transpiler.esbuilder.rebuild()); + return makeCancelable(getEsbuilderForTranspiler(transpiler).rebuild()); //return makeCancelable(function() { //return transpiler.esbuilder.rebuild(); // TODO: Remove @@ -226,7 +304,7 @@ function rebuildTranspiler(transpiler) { } async function getTranspiledHandler(srcPath, handler) { - const transpiler = getTranspilerObject(srcPath, handler); + const transpiler = getTranspiler(srcPath, handler); console.log(`Getting latest transpiler output for ${handler}...`); @@ -243,6 +321,10 @@ async function checkFileExists(file) { .catch(() => false); } +function checkFileExistsSync(file) { + return fs.existsSync(file); +} + async function getCmdPath(cmd) { const appPath = path.join(paths.appNodeModules, ".bin", cmd); const ownPath = path.join(paths.ownNodeModules, ".bin", cmd); @@ -271,10 +353,10 @@ async function getHandlerFilePath(srcPath, handler) { } async function getAllExternalsForHandler(srcPath) { - let packageJson, externals; + let externals; try { - packageJson = JSON.parse( + const packageJson = JSON.parse( await fs.promises.readFile(path.join(srcPath, "package.json"), { encoding: "utf-8", }) @@ -292,11 +374,46 @@ async function getAllExternalsForHandler(srcPath) { return externals; } +async function readEsbuildMetafile(file) { + let metaJson; + + try { + metaJson = JSON.parse( + await fs.promises.readFile(file, { encoding: "utf-8" }) + ); + } catch (e) { + console.log("There was a problem reading the build metafile"); + console.log(e); + } + + return Object.keys(metaJson.inputs).map((input) => path.resolve(input)); +} + +function indexInputFiles() { + getEntryPointKeys().forEach((key) => { + const transpiler = getTranspilerForKey(key); + + const srcPath = getSrcPathForTranspiler(transpiler); + const inputFiles = getInputFilesForTranspiler(transpiler); + + if (!inputFiles) { + return; + } + + addInputFilesForSrcPath(srcPath, inputFiles); + + inputFiles.forEach((file) => addEntryPointKeyForInputFile(file, key)); + }); +} + async function transpile(srcPath, handler) { + const key = `${srcPath}/${handler}`.replace(/[/.]/g, "-"); + const outSrcPath = path.join(srcPath, paths.appBuildDir); - const fullPath = await getHandlerFilePath(srcPath, handler); + const outSrcFullPath = path.join(paths.appPath, outSrcPath); + const metafile = path.join(outSrcFullPath, `.esbuild.${key}.json`); - //const key = `${srcPath}/${handler}`.replace(/[\/.]/g, '-'); + const fullPath = await getHandlerFilePath(srcPath, handler); const external = await getAllExternalsForHandler(srcPath); @@ -304,6 +421,7 @@ async function transpile(srcPath, handler) { const esbuilder = await esbuild.build({ external, + metafile, bundle: true, format: "cjs", sourcemap: true, @@ -311,20 +429,23 @@ async function transpile(srcPath, handler) { incremental: true, entryPoints: [fullPath], outdir: path.join(paths.appPath, outSrcPath), - //metafile: path.join(paths.appBuildPath, compiledDir, `.esbuild.${key}.json`), }); - const transpiler = createTranspilerObject(esbuilder, { + return addTranspiler({ + srcPath, handler, - srcPath: outSrcPath, + esbuilder, + outHandler: { + handler, + srcPath: outSrcPath, + }, + inputFiles: await readEsbuildMetafile(metafile), }); - - setTranspilerObject(srcPath, handler, transpiler); - - return transpiler; } function lint(srcPath) { + const inputFiles = getInputFilesForSrcPath(srcPath); + // Need the ref for a closure let linter = { ref: null }; @@ -342,8 +463,9 @@ function lint(srcPath) { // https://github.com/serverless-stack/serverless-stack/issues/11 "--resolve-plugins-relative-to", ".", - srcPath, + ...inputFiles, ], + // TODO: Check if setting the cwd to the root is okay { stdio: "inherit", cwd: paths.appPath } ); @@ -355,60 +477,66 @@ function lint(srcPath) { }); return makeCancelable(promise, function () { + console.log(`Cancelling Linter ${linter.ref}`); linter.ref && linter.ref.kill(); }); } function typeCheck(srcPath) { + const inputFiles = getInputFilesForSrcPath(srcPath); + // Need the ref for a closure let typeChecker = { ref: null }; - const tsconfigPath = path.join(paths.appPath, srcPath, "tsconfig.json"); - const promise = new Promise((resolve) => { - checkFileExists(tsconfigPath).then((isTs) => { - if (!isTs) { - resolve(); - return; - } + const tsconfigPath = path.join(paths.appPath, srcPath, "tsconfig.json"); - typeChecker.ref = spawn( - tscExec, - ["--noEmit", "--project", tsconfigPath], - { - stdio: "inherit", - cwd: path.join(paths.appPath, srcPath), - } - ); + const isTs = checkFileExistsSync(tsconfigPath); - typeChecker.ref.on("close", (code) => { - console.log(`child process exited with code ${code}`); - resolve(); - return; - }); + if (!isTs) { + resolve(); + return; + } + + typeChecker.ref = spawn(tscExec, ["--noEmit", ...inputFiles], { + stdio: "inherit", + cwd: path.join(paths.appPath, srcPath), + }); + + typeChecker.ref.on("close", (code) => { + console.log(`child process exited with code ${code}`); + resolve(); + return; }); }); return makeCancelable(promise, function () { + console.log(`Cancelling Type Checker ${typeChecker.ref}`); typeChecker.ref && typeChecker.ref.kill(); }); } -async function cancelAllChecks(checks) { - checks.forEach((check) => check.cancel && check.cancel()); -} +//async function cancelAllChecks(checks) { +// checks.forEach((check) => check.cancel && check.cancel()); +//} -async function onFileChange(file, srcPath, handlers) { +async function onFileChange(ev, file) { let hasError = false; console.log(`File change: ${file}`); - const transpilerPromises = handlers.map((handler) => - rebuildTranspilerQ.queue(srcPath, handler) - ); + const entryPointKeys = getEntryPointKeysForInputFile(file); + + const transpilerPromises = entryPointKeys.map((key) => { + const transpiler = getTranspilerForKey(key); + const srcPath = getSrcPathForTranspiler(transpiler); + const handler = getHandlerForTranspiler(transpiler); + + rebuildTranspilerQ.queue(srcPath, handler); + }); - const lintPromise = lintQ.queue(srcPath); - const typeCheckPromise = typeCheckQ.queue(srcPath); + // const lintPromise = lintQ.queue(srcPath); + // const typeCheckPromise = typeCheckQ.queue(srcPath); console.log("Rebuilding..."); @@ -416,74 +544,68 @@ async function onFileChange(file, srcPath, handlers) { results.forEach((result) => { if (result.status === "rejected" && !hasError) { - hasError = true; - // Cancel all the running checks - cancelAllChecks([lintPromise, typeCheckPromise]); + // hasError = true; + // // Cancel all the running checks + // cancelAllChecks([lintPromise, typeCheckPromise]); } }); } async function startBuilder(entryPoints) { - let hasError = false; - - tscExec = await getCmdPath("tsc"); - eslintExec = await getCmdPath("eslint"); - - const entryPointsIndexed = {}; - - function recordEntryPoint(srcPath, handler) { - entryPointsIndexed[srcPath] = entryPointsIndexed[srcPath] - ? entryPointsIndexed[srcPath].push(handler) - : [handler]; - } - - function getUniqueSrcPaths() { - return Object.keys(entryPointsIndexed); - } - - function getHandlersForSrcPath(srcPath) { - return entryPointsIndexed[srcPath]; - } - const transpilerPromises = entryPoints.map((entryPoint) => { const srcPath = entryPoint.debugSrcPath; const handler = entryPoint.debugSrcHandler; - recordEntryPoint(srcPath, handler); - // Not catching esbuild errors // Letting it handle the error messages for now return transpile(srcPath, handler); }); - const uniquePaths = getUniqueSrcPaths(); - - const lintPromises = uniquePaths.map(lintQ.queue); - const typeCheckPromises = uniquePaths.map(typeCheckQ.queue); - - logger.log("Building Lambda code..."); + logger.log("Transpiling Lambda code..."); const results = await Promise.allSettled(transpilerPromises); results.forEach((result) => { - if (result.status === "rejected" && !hasError) { - hasError = true; - // Cancel all the running checks - cancelAllChecks(lintPromises.concat(typeCheckPromises)); + if (result.status === "rejected") { + console.log("Error transpiling"); + console.log(result); } }); - uniquePaths.forEach((srcPath) => { - chokidar - .watch(path.join(paths.appPath, srcPath), chokidarOptions) - .on("all", (ev, file) => - onFileChange(file, srcPath, getHandlersForSrcPath(srcPath)) - ) - .on("error", (error) => console.log(`Watch ${error}`)) - .on("ready", () => { - console.log(`Watcher ready for ${srcPath}...`); - }); + // Create an index of all the input files detected + indexInputFiles(); + + const srcPaths = getUniqueSrcPaths(); + + if (srcPaths.length === 0) { + console.log("Nothing has been transpiled"); + return; + } + + const lintPromises = []; + const typeCheckPromises = []; + + tscExec = await getCmdPath("tsc"); + eslintExec = await getCmdPath("eslint"); + + srcPaths.forEach((srcPath) => { + lintPromises.push(lintQ.queue(srcPath)); + typeCheckPromises.push(typeCheckQ.queue(srcPath)); }); + + const allInputFiles = getAllInputFiles(); + + chokidar + .watch(allInputFiles, chokidarOptions) + .on("all", onFileChange) + .on("error", (error) => console.log(`Watch ${error}`)) + .on("ready", () => { + console.log(`Watcher ready for ${allInputFiles.length} files...`); + }); + + // await Promise.allSettled(lintPromises.concat(typeCheckPromises)); + // + // console.log("Done building"); } function startClient(debugEndpoint) { From 90edf7858ac76ada456941fa92df85e535dc5e28 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 28 Dec 2020 21:23:36 -0500 Subject: [PATCH 167/481] Using esbuild metafile for linting and typechecking --- packages/cli/scripts/start.js | 220 ++++++++++++++++------ packages/cli/test/start/src/api/api.ts | 2 + packages/cli/test/start/src/api/import.js | 1 + 3 files changed, 165 insertions(+), 58 deletions(-) create mode 100644 packages/cli/test/start/src/api/import.js diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 6f6f03665c..45f4f31e70 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -39,21 +39,29 @@ const WEBSOCKET_CLOSE_CODE = { const transpilerTemplateObject = { srcPath: null, handler: null, + tsconfig: null, esbuilder: null, inputFiles: null, outHandler: null, }; +const srcPathsIndexTemplateObject = { + tsconfig: null, + inputFiles: null, +}; let ws; +let watcher; let tscExec; let eslintExec; -const transpilers = {}; -const srcPathsIndex = {}; -const inputFilesIndex = {}; +let esbuildService; + +let transpilers = {}; +let srcPathsIndex = {}; +let inputFilesIndex = {}; const rebuildTranspilerQ = createPromiseQueue(function (srcPath, handler) { const transpiler = getTranspiler(srcPath, handler); - return rebuildTranspiler(transpiler); + return makeCancelable(rebuildTranspiler(transpiler)); }); const lintQ = createPromiseQueue(function (srcPath) { // Esnure that only the srcPath is used for indexing the queue @@ -210,6 +218,10 @@ function getInputFilesForTranspiler(transpiler) { return transpiler.inputFiles; } +function getTsconfigForTranspiler(transpiler) { + return transpiler.tsconfig; +} + function getSrcPathForTranspiler(transpiler) { return transpiler.srcPath; } @@ -233,6 +245,7 @@ function getEsbuilderForTranspiler(transpiler) { function addTranspiler({ srcPath, handler, + tsconfig, esbuilder, outHandler, inputFiles, @@ -241,6 +254,7 @@ function addTranspiler({ ...transpilerTemplateObject, srcPath, handler, + tsconfig, esbuilder, inputFiles, outHandler, @@ -249,6 +263,10 @@ function addTranspiler({ return (transpilers[`${srcPath}/${handler}`] = transpiler); } +function updateTranspilerInputFile(transpiler, inputFiles) { + transpiler.inputFiles = inputFiles; +} + function getTranspiler(srcPath, handler) { return transpilers[`${srcPath}/${handler}`]; } @@ -257,9 +275,19 @@ function getAllInputFiles() { return Object.keys(inputFilesIndex); } +function diffInputFiles(list1, list2) { + const remove = []; + const add = []; + + list1.forEach((item) => list2.indexOf(item) === -1 && remove.push(item)); + list2.forEach((item) => list1.indexOf(item) === -1 && add.push(item)); + + return { add, remove }; +} + function addEntryPointKeyForInputFile(file, key) { if (inputFilesIndex[file]) { - inputFilesIndex.file.push(key); + inputFilesIndex[file].push(key); } else { inputFilesIndex[file] = [key]; } @@ -269,19 +297,26 @@ function getEntryPointKeysForInputFile(file) { return inputFilesIndex[file]; } -function addInputFilesForSrcPath(srcPath, inputFiles) { +function addToSrcPathIndex(srcPath, inputFiles, tsconfig) { function addToInputFilesIndex(index, inputFiles) { inputFiles.forEach((file) => (index[file] = true)); return index; } - if (srcPathsIndex[srcPath]) { - srcPathsIndex[srcPath] = addToInputFilesIndex( - srcPathsIndex[srcPath], + const srcPathObject = srcPathsIndex[srcPath]; + + if (srcPathObject) { + srcPathObject.inputFiles = addToInputFilesIndex( + srcPathObject.inputFiles, inputFiles ); + srcPathObject.tsconfig = srcPathObject.tsconfig || tsconfig; } else { - srcPathsIndex[srcPath] = addToInputFilesIndex({}, inputFiles); + srcPathsIndex[srcPath] = { + ...srcPathsIndexTemplateObject, + tsconfig, + inputFiles: addToInputFilesIndex({}, inputFiles), + }; } } @@ -289,18 +324,23 @@ function getUniqueSrcPaths() { return Object.keys(srcPathsIndex); } +function getUniqueSrcPathsForEntryPointKeys(entryPointKeys) { + const srcPaths = {}; + + entryPointKeys.forEach((key) => { + const srcPath = getSrcPathForTranspiler(getTranspilerForKey(key)); + srcPaths[srcPath] = true; + }); + + return Object.keys(srcPaths); +} + function getInputFilesForSrcPath(srcPath) { - return Object.keys(srcPathsIndex[srcPath]); + return Object.keys(srcPathsIndex[srcPath].inputFiles); } -function rebuildTranspiler(transpiler) { - return makeCancelable(getEsbuilderForTranspiler(transpiler).rebuild()); - //return makeCancelable(function() { - //return transpiler.esbuilder.rebuild(); - // TODO: Remove - //console.log("Fake rebuild..."); - //return sleep(3000); - //}()); +function getTsconfigForSrcPath(srcPath) { + return srcPathsIndex[srcPath].tsconfig; } async function getTranspiledHandler(srcPath, handler) { @@ -321,10 +361,6 @@ async function checkFileExists(file) { .catch(() => false); } -function checkFileExistsSync(file) { - return fs.existsSync(file); -} - async function getCmdPath(cmd) { const appPath = path.join(paths.appNodeModules, ".bin", cmd); const ownPath = path.join(paths.ownNodeModules, ".bin", cmd); @@ -352,6 +388,13 @@ async function getHandlerFilePath(srcPath, handler) { return jsFile; } +function getEsbuildMetafilePath(srcPath, handler) { + const key = `${srcPath}/${handler}`.replace(/[/.]/g, "-"); + const outSrcFullPath = path.join(paths.appPath, srcPath, paths.appBuildDir); + + return path.join(outSrcFullPath, `.esbuild.${key}.json`); +} + async function getAllExternalsForHandler(srcPath) { let externals; @@ -374,7 +417,7 @@ async function getAllExternalsForHandler(srcPath) { return externals; } -async function readEsbuildMetafile(file) { +async function getInputFilesFromEsbuildMetafile(file) { let metaJson; try { @@ -389,10 +432,18 @@ async function readEsbuildMetafile(file) { return Object.keys(metaJson.inputs).map((input) => path.resolve(input)); } +function reIndexInputFiles() { + srcPathsIndex = {}; + inputFilesIndex = {}; + + indexInputFiles(); +} + function indexInputFiles() { getEntryPointKeys().forEach((key) => { const transpiler = getTranspilerForKey(key); + const tsconfig = getTsconfigForTranspiler(transpiler); const srcPath = getSrcPathForTranspiler(transpiler); const inputFiles = getInputFilesForTranspiler(transpiler); @@ -400,28 +451,28 @@ function indexInputFiles() { return; } - addInputFilesForSrcPath(srcPath, inputFiles); + addToSrcPathIndex(srcPath, inputFiles, tsconfig); inputFiles.forEach((file) => addEntryPointKeyForInputFile(file, key)); }); } async function transpile(srcPath, handler) { - const key = `${srcPath}/${handler}`.replace(/[/.]/g, "-"); - + const metafile = getEsbuildMetafilePath(srcPath, handler); const outSrcPath = path.join(srcPath, paths.appBuildDir); - const outSrcFullPath = path.join(paths.appPath, outSrcPath); - const metafile = path.join(outSrcFullPath, `.esbuild.${key}.json`); const fullPath = await getHandlerFilePath(srcPath, handler); - const external = await getAllExternalsForHandler(srcPath); + const tsconfigPath = path.join(paths.appPath, srcPath, "tsconfig.json"); + const isTs = await checkFileExists(tsconfigPath); + const tsconfig = isTs ? tsconfigPath : undefined; - console.log(`Transpiling ${handler}...`); + const external = await getAllExternalsForHandler(srcPath); - const esbuilder = await esbuild.build({ + const esbuildOptions = { external, metafile, + tsconfig, bundle: true, format: "cjs", sourcemap: true, @@ -429,20 +480,44 @@ async function transpile(srcPath, handler) { incremental: true, entryPoints: [fullPath], outdir: path.join(paths.appPath, outSrcPath), - }); + }; + + console.log(`Transpiling ${handler}...`); + + const esbuilder = await esbuild.build(esbuildOptions); return addTranspiler({ srcPath, handler, + tsconfig, esbuilder, outHandler: { handler, srcPath: outSrcPath, }, - inputFiles: await readEsbuildMetafile(metafile), + inputFiles: await getInputFilesFromEsbuildMetafile(metafile), }); } +async function rebuildTranspiler(transpiler) { + const metafile = getEsbuildMetafilePath( + getSrcPathForTranspiler(transpiler), + getHandlerForTranspiler(transpiler) + ); + + await getEsbuilderForTranspiler(transpiler).rebuild(); + + const inputFiles = await getInputFilesFromEsbuildMetafile(metafile); + updateTranspilerInputFile(transpiler, inputFiles); + //return makeCancelable(); + //return makeCancelable(function() { + //return transpiler.esbuilder.rebuild(); + // TODO: Remove + //console.log("Fake rebuild..."); + //return sleep(3000); + //}()); +} + function lint(srcPath) { const inputFiles = getInputFilesForSrcPath(srcPath); @@ -477,23 +552,22 @@ function lint(srcPath) { }); return makeCancelable(promise, function () { - console.log(`Cancelling Linter ${linter.ref}`); + console.log("Cancelling Linter"); linter.ref && linter.ref.kill(); }); } function typeCheck(srcPath) { - const inputFiles = getInputFilesForSrcPath(srcPath); + const tsconfig = getTsconfigForSrcPath(srcPath); + const inputFiles = getInputFilesForSrcPath(srcPath).filter((file) => + file.endsWith(".ts") + ); // Need the ref for a closure let typeChecker = { ref: null }; const promise = new Promise((resolve) => { - const tsconfigPath = path.join(paths.appPath, srcPath, "tsconfig.json"); - - const isTs = checkFileExistsSync(tsconfigPath); - - if (!isTs) { + if (!tsconfig) { resolve(); return; } @@ -511,15 +585,11 @@ function typeCheck(srcPath) { }); return makeCancelable(promise, function () { - console.log(`Cancelling Type Checker ${typeChecker.ref}`); + console.log("Cancelling Type Checker"); typeChecker.ref && typeChecker.ref.kill(); }); } -//async function cancelAllChecks(checks) { -// checks.forEach((check) => check.cancel && check.cancel()); -//} - async function onFileChange(ev, file) { let hasError = false; @@ -527,31 +597,63 @@ async function onFileChange(ev, file) { const entryPointKeys = getEntryPointKeysForInputFile(file); + if (!entryPointKeys) { + console.log("File is not linked to the entry points"); + return; + } + const transpilerPromises = entryPointKeys.map((key) => { const transpiler = getTranspilerForKey(key); const srcPath = getSrcPathForTranspiler(transpiler); const handler = getHandlerForTranspiler(transpiler); - rebuildTranspilerQ.queue(srcPath, handler); + return rebuildTranspilerQ.queue(srcPath, handler); }); - // const lintPromise = lintQ.queue(srcPath); - // const typeCheckPromise = typeCheckQ.queue(srcPath); - console.log("Rebuilding..."); - const results = await Promise.allSettled(transpilerPromises); - - results.forEach((result) => { - if (result.status === "rejected" && !hasError) { - // hasError = true; - // // Cancel all the running checks - // cancelAllChecks([lintPromise, typeCheckPromise]); + (await Promise.allSettled(transpilerPromises)).forEach((result) => { + if (result.status === "rejected") { + hasError = true; + console.log("Error transpiling"); + console.log(result); } }); + + if (hasError) { + return; + } + + const srcPaths = getUniqueSrcPathsForEntryPointKeys(entryPointKeys); + + srcPaths.forEach((srcPath) => { + lintQ.queue(srcPath); + typeCheckQ.queue(srcPath); + }); + + const oldInputFiles = getAllInputFiles(); + + // Re-index all input files + reIndexInputFiles(); + + const newInputFiles = getAllInputFiles(); + + const diff = diffInputFiles(oldInputFiles, newInputFiles); + + if (diff.add.length > 0) { + watcher.add(diff.add); + } + + if (diff.remove.length > 0) { + await watcher.unwatch(diff.remove); + } + + console.log("Done building"); } async function startBuilder(entryPoints) { + esbuildService = await esbuild.startService(); + const transpilerPromises = entryPoints.map((entryPoint) => { const srcPath = entryPoint.debugSrcPath; const handler = entryPoint.debugSrcHandler; @@ -565,6 +667,8 @@ async function startBuilder(entryPoints) { const results = await Promise.allSettled(transpilerPromises); + esbuildService.stop(); + results.forEach((result) => { if (result.status === "rejected") { console.log("Error transpiling"); @@ -595,7 +699,7 @@ async function startBuilder(entryPoints) { const allInputFiles = getAllInputFiles(); - chokidar + watcher = chokidar .watch(allInputFiles, chokidarOptions) .on("all", onFileChange) .on("error", (error) => console.log(`Watch ${error}`)) diff --git a/packages/cli/test/start/src/api/api.ts b/packages/cli/test/start/src/api/api.ts index da866ccb2e..9fe9342dac 100644 --- a/packages/cli/test/start/src/api/api.ts +++ b/packages/cli/test/start/src/api/api.ts @@ -3,10 +3,12 @@ import mirrarray from "mirrarray"; import { APIGatewayEvent } from "aws-lambda"; import str from "./lib"; +//import dummy from "./import"; const sns = new AWS.SNS(); export async function handler(event: APIGatewayEvent) { + //dummy(); console.log( `Logging from inside the API Lambda for route: ${event.routeKey}` ); diff --git a/packages/cli/test/start/src/api/import.js b/packages/cli/test/start/src/api/import.js new file mode 100644 index 0000000000..ea9b101e1c --- /dev/null +++ b/packages/cli/test/start/src/api/import.js @@ -0,0 +1 @@ +export default function () {} From 02ffeb56632e40392f735817fd044616664af892 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 30 Dec 2020 13:19:02 -0500 Subject: [PATCH 168/481] Moving cdk builds to use esbuild --- packages/cli/assets/cdk-wrapper/run.js | 4 +- packages/cli/bin/scripts.js | 5 +- packages/cli/scripts/util/.eslintrc.babel.js | 9 - .../cli/scripts/util/.eslintrc.typescript.js | 6 - packages/cli/scripts/util/cdkHelpers.js | 190 ++++++++++++------ 5 files changed, 133 insertions(+), 81 deletions(-) delete mode 100644 packages/cli/scripts/util/.eslintrc.babel.js delete mode 100644 packages/cli/scripts/util/.eslintrc.typescript.js diff --git a/packages/cli/assets/cdk-wrapper/run.js b/packages/cli/assets/cdk-wrapper/run.js index 957d2fc0f2..97c02f549e 100644 --- a/packages/cli/assets/cdk-wrapper/run.js +++ b/packages/cli/assets/cdk-wrapper/run.js @@ -16,11 +16,11 @@ const sst = require("@serverless-stack/resources"); const config = require("./sst-merged.json"); // Check first and throw an error -if (!fs.existsSync(path.join(__dirname, "index.js"))) { +if (!fs.existsSync(path.join(__dirname, "lib", "index.js"))) { handlerNotFound(true); } -const handler = require("./"); +const handler = require("./lib"); if (!handler.default) { handlerNotFound(false); diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index 9d994b8ca4..059e118802 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -187,9 +187,10 @@ switch (script) { const cliInfo = getCliInfo(); // Prepare app - const config = prepareCdk(argv, cliInfo); + prepareCdk(argv, cliInfo) + .then((config) => internals[script](argv, config, cliInfo)) + .then(() => process.exit(0)); - Promise.resolve(internals[script](argv, config, cliInfo)); break; } case cmd.start: diff --git a/packages/cli/scripts/util/.eslintrc.babel.js b/packages/cli/scripts/util/.eslintrc.babel.js deleted file mode 100644 index ff15b93ef0..0000000000 --- a/packages/cli/scripts/util/.eslintrc.babel.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - parser: "@babel/eslint-parser", - parserOptions: { - babelOptions: { - configFile: "./.build/.babelrc.json", - }, - }, - plugins: ["@babel"], -}; diff --git a/packages/cli/scripts/util/.eslintrc.typescript.js b/packages/cli/scripts/util/.eslintrc.typescript.js deleted file mode 100644 index fca472f38b..0000000000 --- a/packages/cli/scripts/util/.eslintrc.typescript.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - root: true, - parser: "@typescript-eslint/parser", - plugins: ["@typescript-eslint"], - extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"], -}; diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index fed238b398..f084e866af 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -1,16 +1,20 @@ "use strict"; const path = require("path"); +const util = require("util"); const fs = require("fs-extra"); const chalk = require("chalk"); -const spawn = require("cross-spawn"); +const esbuild = require("esbuild"); const sstCore = require("@serverless-stack/core"); +const exec = util.promisify(require("child_process").exec); const paths = require("./paths"); const logger = require("../../lib/logger"); const { isSubProcessError } = require("../../lib/errors"); -const isTs = fs.existsSync(path.join(paths.appPath, "tsconfig.json")); +const buildDir = path.join(paths.appBuildPath, "lib"); +const tsconfig = path.join(paths.appPath, "tsconfig.json"); +const isTs = fs.existsSync(tsconfig); const DEFAULT_STAGE = "dev"; const DEFAULT_NAME = "my-app"; @@ -42,6 +46,42 @@ function createBuildPath() { fs.emptyDirSync(paths.appBuildPath); } +async function getExternalModules(srcPath) { + let externals; + + try { + const packageJson = JSON.parse( + await fs.promises.readFile(srcPath, { encoding: "utf-8" }) + ); + externals = Object.keys({ + ...(packageJson.dependencies || {}), + ...(packageJson.devDependencies || {}), + ...(packageJson.peerDependencies || {}), + }); + } catch (e) { + console.log(e); + console.log(`No package.json found in ${srcPath}`); + externals = []; + } + + return externals; +} + +async function getInputFilesFromEsbuildMetafile(file) { + let metaJson; + + try { + metaJson = JSON.parse( + await fs.promises.readFile(file, { encoding: "utf-8" }) + ); + } catch (e) { + console.log("There was a problem reading the build metafile"); + console.log(e); + } + + return Object.keys(metaJson.inputs).map((input) => path.resolve(input)); +} + function filterMismatchedVersion(deps, version) { const mismatched = []; @@ -114,75 +154,90 @@ function runCdkVersionMatch(cliInfo) { logger.log(`\nLearn more about it here — ${helpUrl}\n`); } -function lint() { - const config = isTs ? ".eslintrc.typescript.js" : ".eslintrc.babel.js"; - +async function lint(inputFiles) { logger.log(chalk.grey("Linting source")); - const results = spawn.sync( - getCmdPath("eslint"), - [ - "--no-error-on-unmatched-pattern", - "--config", - path.join(paths.ownPath, "scripts", "util", config), - "--ext", - ".js,.ts", - "--fix", - "lib/**", - // Handling nested ESLint projects in Yarn Workspaces - // https://github.com/serverless-stack/serverless-stack/issues/11 - "--resolve-plugins-relative-to", - ".", - ], - { stdio: "inherit", cwd: paths.appPath } - ); - if (results.error) { - throw results.error; - } else if (results.status !== 0) { - process.exit(1); + try { + const { stdout, stderr } = await exec( + [ + getCmdPath("eslint"), + "--color", + "--no-error-on-unmatched-pattern", + "--config", + path.join(paths.ownPath, "scripts", "util", ".eslintrc.internal.js"), + "--ext", + ".js,.ts", + "--fix", + // Handling nested ESLint projects in Yarn Workspaces + // https://github.com/serverless-stack/serverless-stack/issues/11 + "--resolve-plugins-relative-to", + ".", + ...inputFiles, + ].join(" "), + { cwd: paths.appPath } + ); + stdout && console.log(stdout); + if (stderr) { + console.log(stderr); + } + } catch (e) { + console.log(e); + exitWithMessage("Error running ESLint"); } } -function transpile(cliInfo) { - let cmd; - let args; - let opts = { stdio: "inherit" }; +async function typeCheck(inputFiles) { + inputFiles = inputFiles.filter((file) => file.endsWith(".ts")); - runCdkVersionMatch(cliInfo); + if (inputFiles.length === 0) { + return; + } - if (isTs) { - logger.log(chalk.grey("Detected tsconfig.json")); - logger.log(chalk.grey("Compiling TypeScript")); + logger.log(chalk.grey("Running type checker")); - cmd = getCmdPath("tsc"); - args = ["--outDir", paths.appBuildPath, "--rootDir", paths.appLibPath]; - opts = { stdio: "inherit", cwd: paths.appPath }; - } else { - logger.log(chalk.grey("Compiling with Babel")); - - cmd = getCmdPath("babel"); - args = [ - "--quiet", - "--config-file", - path.join(paths.appBuildPath, ".babelrc.json"), - "--source-maps", - "inline", - paths.appLibPath, - "--out-dir", - paths.appBuildPath, - ]; + try { + const { stdout, stderr } = await exec( + [getCmdPath("tsc"), "--pretty", "--noEmit", ...inputFiles].join(" "), + { cwd: paths.appPath } + ); + stdout && console.log(stdout); + if (stderr) { + console.log(stderr); + } + } catch (e) { + console.log(e.stdout); + exitWithMessage("Type checking error"); } +} - const results = spawn.sync(cmd, args, opts); +async function transpile() { + let extension = "js"; + const external = await getExternalModules(paths.appPackageJson); - if (results.error) { - throw results.error; - } else if (results.status !== 0) { - exitWithMessage( - // Add an empty line for Babel errors to make it more clear - isTs ? "TypeScript compilation error" : "\nBabel compilation error" - ); + if (isTs) { + extension = "ts"; + logger.log(chalk.grey("Detected tsconfig.json")); } + + const metafile = path.join(buildDir, ".esbuild.json"); + const entryPoint = path.join(paths.appLibPath, `index.${extension}`); + + logger.log(chalk.grey("Transpiling source")); + + await esbuild.build({ + external, + metafile, + bundle: true, + format: "cjs", + sourcemap: true, + platform: "node", + outdir: buildDir, + incremental: true, + entryPoints: [entryPoint], + tsconfig: isTs ? tsconfig : undefined, + }); + + return await getInputFilesFromEsbuildMetafile(metafile); } function copyConfigFiles() { @@ -263,7 +318,7 @@ function writeConfig(config) { ); } -function prepareCdk(argv, cliInfo, config) { +async function prepareCdk(argv, cliInfo, config) { let appliedConfig = config; createBuildPath(); @@ -277,8 +332,19 @@ function prepareCdk(argv, cliInfo, config) { copyConfigFiles(); copyWrapperFiles(); - lint(); - transpile(cliInfo); + runCdkVersionMatch(cliInfo); + + const inputFiles = await transpile(); + + const checks = []; + + checks.push(lint(inputFiles)); + + if (isTs) { + checks.push(typeCheck(inputFiles)); + } + + await Promise.allSettled(checks); return appliedConfig; } From 49ad26dd683733916cd3a838ae7bc37bd423ddaf Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 30 Dec 2020 17:42:35 -0500 Subject: [PATCH 169/481] Fixing tests --- packages/cli/bin/scripts.js | 48 +++--- packages/cli/package.json | 1 - packages/cli/scripts/cdk.js | 2 +- packages/cli/scripts/start.js | 2 +- packages/cli/scripts/util/cdkHelpers.js | 185 +++++++++++++---------- packages/cli/test/helpers/setup-tests.js | 4 +- yarn.lock | 106 +------------ 7 files changed, 139 insertions(+), 209 deletions(-) diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index 059e118802..a08261f83c 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -202,34 +202,38 @@ switch (script) { } case cmd.cdk: case cmd.test: { + let promise = Promise.resolve(1); + if (script === cmd.cdk) { // Prepare app before running forked CDK commands const cliInfo = getCliInfo(); - prepareCdk(argv, cliInfo); + promise = prepareCdk(argv, cliInfo); } - const result = spawn.sync( - "node", - [require.resolve("../scripts/" + script)].concat(scriptArgs), - { stdio: "inherit" } - ); - if (result.signal) { - if (result.signal === "SIGKILL") { - console.log( - "The command failed because the process exited too early. " + - "This probably means the system ran out of memory or someone called " + - "`kill -9` on the process." - ); - } else if (result.signal === "SIGTERM") { - console.log( - "The command failed because the process exited too early. " + - "Someone might have called `kill` or `killall`, or the system could " + - "be shutting down." - ); + promise.then(() => { + const result = spawn.sync( + "node", + [require.resolve("../scripts/" + script)].concat(scriptArgs), + { stdio: "inherit" } + ); + if (result.signal) { + if (result.signal === "SIGKILL") { + console.log( + "The command failed because the process exited too early. " + + "This probably means the system ran out of memory or someone called " + + "`kill -9` on the process." + ); + } else if (result.signal === "SIGTERM") { + console.log( + "The command failed because the process exited too early. " + + "Someone might have called `kill` or `killall`, or the system could " + + "be shutting down." + ); + } + process.exit(1); } - process.exit(1); - } - process.exit(result.status); + process.exit(result.status); + }); break; } default: diff --git a/packages/cli/package.json b/packages/cli/package.json index 09ebe2f4d3..8f4634dc1b 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -40,7 +40,6 @@ "@aws-cdk/aws-iam": "1.74.0", "@aws-cdk/aws-lambda": "1.74.0", "@aws-cdk/core": "1.74.0", - "@babel/cli": "^7.10.5", "@babel/core": "^7.10.5", "@babel/eslint-parser": "^7.11.3", "@babel/eslint-plugin": "^7.11.3", diff --git a/packages/cli/scripts/cdk.js b/packages/cli/scripts/cdk.js index fc86ad396a..6f5638aa55 100644 --- a/packages/cli/scripts/cdk.js +++ b/packages/cli/scripts/cdk.js @@ -7,7 +7,7 @@ process.on("unhandledRejection", (err) => { throw err; }); -let argv = process.argv.slice(3); +let argv = process.argv.slice(2); const path = require("path"); const spawn = require("cross-spawn"); diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 45f4f31e70..2bedd44974 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -952,7 +952,7 @@ async function onMessage(message) { } module.exports = async function (argv, cliInfo) { - const config = applyConfig(argv); + const config = await applyConfig(argv); const stackName = `${config.stage}-debug-stack`; // Deploy debug stack diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index f084e866af..6ef39b482c 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -14,12 +14,18 @@ const { isSubProcessError } = require("../../lib/errors"); const buildDir = path.join(paths.appBuildPath, "lib"); const tsconfig = path.join(paths.appPath, "tsconfig.json"); -const isTs = fs.existsSync(tsconfig); const DEFAULT_STAGE = "dev"; const DEFAULT_NAME = "my-app"; const DEFAULT_REGION = "us-east-1"; +async function checkFileExists(file) { + return fs.promises + .access(file, fs.constants.F_OK) + .then(() => true) + .catch(() => false); +} + function exitWithMessage(message, shortMessage) { shortMessage = shortMessage || message; @@ -34,49 +40,44 @@ function exitWithMessage(message, shortMessage) { process.exit(1); } -function getCmdPath(cmd) { +async function getCmdPath(cmd) { const appPath = path.join(paths.appNodeModules, ".bin", cmd); const ownPath = path.join(paths.ownNodeModules, ".bin", cmd); // Fallback to own node modules, in case of tests that don't install the cli - return fs.existsSync(appPath) ? appPath : ownPath; + return (await checkFileExists(appPath)) ? appPath : ownPath; } -function createBuildPath() { - fs.emptyDirSync(paths.appBuildPath); +async function createBuildPath() { + await fs.emptyDir(paths.appBuildPath); } -async function getExternalModules(srcPath) { - let externals; +async function getAppPackageJson() { + const srcPath = paths.appPackageJson; try { - const packageJson = JSON.parse( - await fs.promises.readFile(srcPath, { encoding: "utf-8" }) - ); - externals = Object.keys({ - ...(packageJson.dependencies || {}), - ...(packageJson.devDependencies || {}), - ...(packageJson.peerDependencies || {}), - }); + return await fs.readJson(srcPath); } catch (e) { - console.log(e); - console.log(`No package.json found in ${srcPath}`); - externals = []; + exitWithMessage(`No valid package.json found in ${srcPath}`); } +} - return externals; +async function getExternalModules(packageJson) { + return Object.keys({ + ...(packageJson.dependencies || {}), + ...(packageJson.devDependencies || {}), + ...(packageJson.peerDependencies || {}), + }); } async function getInputFilesFromEsbuildMetafile(file) { let metaJson; try { - metaJson = JSON.parse( - await fs.promises.readFile(file, { encoding: "utf-8" }) - ); + metaJson = await fs.readJson(file); } catch (e) { - console.log("There was a problem reading the build metafile"); - console.log(e); + logger.debug(e); + exitWithMessage("\nThere was a problem reading the build metafile.\n"); } return Object.keys(metaJson.inputs).map((input) => path.resolve(input)); @@ -106,20 +107,19 @@ function formatDepsForInstall(depsList, version) { * - For TS: https://github.com/aws/aws-cdk/issues/542 * - For JS: https://github.com/aws/aws-cdk/issues/9578 */ -function runCdkVersionMatch(cliInfo) { +function runCdkVersionMatch(packageJson, cliInfo) { const usingYarn = cliInfo.usingYarn; const helpUrl = "https://github.com/serverless-stack/serverless-stack#cdk-version-mismatch"; const cdkVersion = cliInfo.cdkVersion; - const appPackageJson = require(path.join(paths.appPath, "package.json")); const mismatchedDeps = filterMismatchedVersion( - appPackageJson.dependencies, + packageJson.dependencies, cdkVersion ); const mismatchedDevDeps = filterMismatchedVersion( - appPackageJson.devDependencies, + packageJson.devDependencies, cdkVersion ); @@ -160,7 +160,7 @@ async function lint(inputFiles) { try { const { stdout, stderr } = await exec( [ - getCmdPath("eslint"), + await getCmdPath("eslint"), "--color", "--no-error-on-unmatched-pattern", "--config", @@ -176,13 +176,15 @@ async function lint(inputFiles) { ].join(" "), { cwd: paths.appPath } ); - stdout && console.log(stdout); + if (stdout) { + logger.log(stdout); + } if (stderr) { - console.log(stderr); + logger.log(stderr); } } catch (e) { - console.log(e); - exitWithMessage("Error running ESLint"); + logger.log(e.stdout); + exitWithMessage("There was a problem linting the source."); } } @@ -197,22 +199,43 @@ async function typeCheck(inputFiles) { try { const { stdout, stderr } = await exec( - [getCmdPath("tsc"), "--pretty", "--noEmit", ...inputFiles].join(" "), + [await getCmdPath("tsc"), "--pretty", "--noEmit", ...inputFiles].join( + " " + ), { cwd: paths.appPath } ); - stdout && console.log(stdout); + if (stdout) { + logger.log(stdout); + } if (stderr) { - console.log(stderr); + logger.log(stderr); } } catch (e) { - console.log(e.stdout); - exitWithMessage("Type checking error"); + logger.log(e.stdout); + exitWithMessage("There was a problem type checking the source."); + } +} + +function runChecks(isTs, inputFiles) { + const checks = []; + + checks.push(lint(inputFiles)); + + if (isTs) { + checks.push(typeCheck(inputFiles)); } + + return Promise.allSettled(checks); } -async function transpile() { +async function transpile(cliInfo) { let extension = "js"; - const external = await getExternalModules(paths.appPackageJson); + + const isTs = await checkFileExists(tsconfig); + const appPackageJson = await getAppPackageJson(); + const external = await getExternalModules(appPackageJson); + + runCdkVersionMatch(appPackageJson, cliInfo); if (isTs) { extension = "ts"; @@ -222,42 +245,56 @@ async function transpile() { const metafile = path.join(buildDir, ".esbuild.json"); const entryPoint = path.join(paths.appLibPath, `index.${extension}`); + if (!(await checkFileExists(entryPoint))) { + exitWithMessage( + `\nCannot find app handler. Make sure to add a "lib/index.${extension}" file.\n` + ); + } + logger.log(chalk.grey("Transpiling source")); - await esbuild.build({ - external, - metafile, - bundle: true, - format: "cjs", - sourcemap: true, - platform: "node", - outdir: buildDir, - incremental: true, - entryPoints: [entryPoint], - tsconfig: isTs ? tsconfig : undefined, - }); + try { + await esbuild.build({ + external, + metafile, + bundle: true, + format: "cjs", + sourcemap: true, + platform: "node", + outdir: buildDir, + incremental: true, + entryPoints: [entryPoint], + tsconfig: isTs ? tsconfig : undefined, + }); + } catch (e) { + logger.debug(e); + exitWithMessage("There was a problem transpiling the source."); + } - return await getInputFilesFromEsbuildMetafile(metafile); + return { + isTs, + inputFiles: await getInputFilesFromEsbuildMetafile(metafile), + }; } function copyConfigFiles() { - fs.copyFileSync( + return fs.copy( path.join(paths.ownPath, "assets", "cdk-wrapper", ".babelrc.json"), path.join(paths.appBuildPath, ".babelrc.json") ); } function copyWrapperFiles() { - fs.copyFileSync( + return fs.copy( path.join(paths.ownPath, "assets", "cdk-wrapper", "run.js"), path.join(paths.appBuildPath, "run.js") ); } -function applyConfig(argv) { +async function applyConfig(argv) { const configPath = path.join(paths.appPath, "sst.json"); - if (!fs.existsSync(configPath)) { + if (!(await checkFileExists(configPath))) { exitWithMessage( `\nAdd the ${chalk.bold( "sst.json" @@ -268,10 +305,9 @@ function applyConfig(argv) { } let config; - const configStr = fs.readFileSync(configPath, "utf8"); try { - config = JSON.parse(configStr); + config = await fs.readJson(configPath); } catch (e) { exitWithMessage( `\nThere was a problem reading the ${chalk.bold( @@ -307,44 +343,31 @@ function applyConfig(argv) { return config; } -function writeConfig(config) { +async function writeConfig(config) { const type = config.type.trim(); logger.log(chalk.grey(`Preparing ${type}`)); - fs.writeFileSync( - path.join(paths.appBuildPath, "sst-merged.json"), - JSON.stringify(config) - ); + await fs.writeJson(path.join(paths.appBuildPath, "sst-merged.json"), config); } async function prepareCdk(argv, cliInfo, config) { let appliedConfig = config; - createBuildPath(); + await createBuildPath(); if (!config) { - appliedConfig = applyConfig(argv); + appliedConfig = await applyConfig(argv); } - writeConfig(appliedConfig); - - copyConfigFiles(); - copyWrapperFiles(); - - runCdkVersionMatch(cliInfo); - - const inputFiles = await transpile(); - - const checks = []; + await writeConfig(appliedConfig); - checks.push(lint(inputFiles)); + await copyConfigFiles(); + await copyWrapperFiles(); - if (isTs) { - checks.push(typeCheck(inputFiles)); - } + const { isTs, inputFiles } = await transpile(cliInfo); - await Promise.allSettled(checks); + await runChecks(isTs, inputFiles); return appliedConfig; } diff --git a/packages/cli/test/helpers/setup-tests.js b/packages/cli/test/helpers/setup-tests.js index a6e7e9a7ae..f47695fcb3 100644 --- a/packages/cli/test/helpers/setup-tests.js +++ b/packages/cli/test/helpers/setup-tests.js @@ -13,6 +13,6 @@ execSync("yarn run prepare", { /* The default timeout is 5000ms on async tests. Because we npm install and remove directories, tests can take time to run. -Setting to 1.5 minutes to support slow machines. +Setting to 2 minutes to support slow machines. */ -jest.setTimeout(90000); +jest.setTimeout(120000); diff --git a/yarn.lock b/yarn.lock index 8d40a1f707..2d20da1047 100644 --- a/yarn.lock +++ b/yarn.lock @@ -341,22 +341,6 @@ dependencies: yaml "1.10.0" -"@babel/cli@^7.10.5": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.5.tgz#57df2987c8cf89d0fc7d4b157ec59d7619f1b77a" - integrity sha512-j9H9qSf3kLdM0Ao3aGPbGZ73mEA9XazuupcS6cDGWuiyAcANoguhP0r2Lx32H5JGw4sSSoHG3x/mxVnHgvOoyA== - dependencies: - commander "^4.0.1" - convert-source-map "^1.1.0" - fs-readdir-recursive "^1.1.0" - glob "^7.0.0" - lodash "^4.17.19" - make-dir "^2.1.0" - slash "^2.0.0" - source-map "^0.5.0" - optionalDependencies: - chokidar "^2.1.8" - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" @@ -2896,11 +2880,6 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - async@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" @@ -3097,23 +3076,11 @@ before-after-hook@^2.0.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - binary-extensions@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - bl@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" @@ -3136,7 +3103,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.1, braces@^2.3.2: +braces@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== @@ -3433,25 +3400,6 @@ charenc@0.0.2: resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - chokidar@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" @@ -3634,11 +3582,6 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - commander@^6.2.0: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" @@ -3798,7 +3741,7 @@ conventional-recommended-bump@^5.0.0: meow "^4.0.0" q "^1.5.1" -convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -4792,11 +4735,6 @@ file-entry-cache@^6.0.0: dependencies: flat-cache "^3.0.4" -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - file-uri-to-path@2: version "2.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba" @@ -4956,11 +4894,6 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.6.0" -fs-readdir-recursive@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" - integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== - fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -4976,14 +4909,6 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - fsevents@^2.1.2, fsevents@~2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" @@ -5183,7 +5108,7 @@ glob-to-regexp@^0.3.0: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= -glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -5629,13 +5554,6 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - 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" @@ -7171,11 +7089,6 @@ mz@^2.5.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nan@^2.12.1: - version "2.14.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" - integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== - nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -8180,7 +8093,7 @@ read@1, read@^1.0.4, read@~1.0.1: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, 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== @@ -8229,15 +8142,6 @@ readdir-scoped-modules@^1.0.0: graceful-fs "^4.1.2" once "^1.3.0" -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - readdirp@~3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" @@ -9623,7 +9527,7 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -upath@^1.1.1, upath@^1.2.0: +upath@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== From d1534ba1edde7951347ecf50a6b8f2ba7a2ee62b Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 30 Dec 2020 17:48:40 -0500 Subject: [PATCH 170/481] Updating github workflow --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 51cd295f6a..65eb80d987 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,7 +5,7 @@ name: CI on: push: - branches: [ master ] + branches: [ master, alpha ] pull_request: branches: [ master ] From 4d8c976f60d3fd8c8b984e7521af211481e5e4ae Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 30 Dec 2020 18:09:38 -0500 Subject: [PATCH 171/481] Fixing imports in test --- packages/cli/test/base/package.json | 3 +++ packages/cli/test/base/yarn.lock | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index 3499465f79..d2d122a6fd 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -13,8 +13,11 @@ "keywords": [], "author": "", "dependencies": { + "@aws-cdk/aws-cloudformation": "1.74.0", "@aws-cdk/aws-cognito": "1.74.0", "@aws-cdk/aws-dynamodb": "1.74.0", + "@aws-cdk/aws-iam": "1.74.0", + "@aws-cdk/aws-s3": "1.74.0", "@aws-cdk/core": "1.74.0", "@serverless-stack/resources": "../../../resources" }, diff --git a/packages/cli/test/base/yarn.lock b/packages/cli/test/base/yarn.lock index 826fd43e4a..f2dffa1719 100644 --- a/packages/cli/test/base/yarn.lock +++ b/packages/cli/test/base/yarn.lock @@ -322,7 +322,7 @@ integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== "@serverless-stack/resources@../../../resources": - version "0.4.3" + version "1.0.0-alpha.5" dependencies: "@aws-cdk/aws-lambda" "1.74.0" "@aws-cdk/aws-lambda-nodejs" "1.74.0" From 63a1336a6241d43ba1354b9275f1df14aea8eb98 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 30 Dec 2020 19:35:11 -0500 Subject: [PATCH 172/481] Updating templte project's gitignore --- .../templates/resources/javascript/.template.gitignore | 3 +++ .../templates/resources/typescript/.template.gitignore | 3 +++ 2 files changed, 6 insertions(+) diff --git a/packages/create-serverless-stack/templates/resources/javascript/.template.gitignore b/packages/create-serverless-stack/templates/resources/javascript/.template.gitignore index c39d5a3792..204ea5617c 100644 --- a/packages/create-serverless-stack/templates/resources/javascript/.template.gitignore +++ b/packages/create-serverless-stack/templates/resources/javascript/.template.gitignore @@ -12,6 +12,9 @@ # misc .DS_Store +# sst build output +.build + npm-debug.log* yarn-debug.log* yarn-error.log* diff --git a/packages/create-serverless-stack/templates/resources/typescript/.template.gitignore b/packages/create-serverless-stack/templates/resources/typescript/.template.gitignore index 3323f9317b..2f01792df5 100644 --- a/packages/create-serverless-stack/templates/resources/typescript/.template.gitignore +++ b/packages/create-serverless-stack/templates/resources/typescript/.template.gitignore @@ -16,6 +16,9 @@ # misc .DS_Store +# sst build output +.build + npm-debug.log* yarn-debug.log* yarn-error.log* From c2d1fe73b90a1ce2e18166e62b8a1176fabe41dc Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 30 Dec 2020 22:34:33 -0500 Subject: [PATCH 173/481] Removing incremental flag --- packages/cli/scripts/util/cdkHelpers.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index 6ef39b482c..d56c30dbb6 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -262,7 +262,6 @@ async function transpile(cliInfo) { sourcemap: true, platform: "node", outdir: buildDir, - incremental: true, entryPoints: [entryPoint], tsconfig: isTs ? tsconfig : undefined, }); From 9127c1d5e0ec122b0712be7f406b3756df16ee6e Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 1 Jan 2021 13:48:21 -0500 Subject: [PATCH 174/481] Removing extra promise resolve --- packages/cli/bin/scripts.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index a08261f83c..6472718ecc 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -187,9 +187,9 @@ switch (script) { const cliInfo = getCliInfo(); // Prepare app - prepareCdk(argv, cliInfo) - .then((config) => internals[script](argv, config, cliInfo)) - .then(() => process.exit(0)); + prepareCdk(argv, cliInfo).then((config) => + internals[script](argv, config, cliInfo) + ); break; } From 34c715bc2fa99b5dd7ede73a255ef25238d94229 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 1 Jan 2021 22:08:06 -0500 Subject: [PATCH 175/481] Adding esbuild to sst.function. Moving to workspaces for tests. --- package.json | 4 +- .../assets/cdk-wrapper/.eslintrc.internal.js | 18 + packages/cli/assets/cdk-wrapper/run.js | 21 +- packages/cli/package.json | 2 +- packages/cli/scripts/util/cdkHelpers.js | 28 +- packages/cli/test/base/package.json | 22 +- packages/cli/test/base/yarn.lock | 413 ----------------- packages/cli/test/helpers/copy-symlinks.js | 32 ++ packages/cli/test/start/package.json | 22 +- packages/cli/test/start/yarn.lock | 426 ------------------ packages/resources/package.json | 9 +- packages/resources/src/App.ts | 32 +- packages/resources/src/Function.ts | 17 +- packages/resources/src/util/builder.ts | 138 ++++++ yarn.lock | 197 ++++---- 15 files changed, 367 insertions(+), 1014 deletions(-) create mode 100644 packages/cli/assets/cdk-wrapper/.eslintrc.internal.js delete mode 100644 packages/cli/test/base/yarn.lock create mode 100644 packages/cli/test/helpers/copy-symlinks.js delete mode 100644 packages/cli/test/start/yarn.lock create mode 100644 packages/resources/src/util/builder.ts diff --git a/package.json b/package.json index f5edde905d..c84b2b7f40 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,9 @@ "license": "MIT", "private": true, "workspaces": [ - "packages/*" + "packages/*", + "packages/cli/test/base", + "packages/cli/test/start" ], "scripts": { "lint": "eslint . --fix --ext .js,.ts", diff --git a/packages/cli/assets/cdk-wrapper/.eslintrc.internal.js b/packages/cli/assets/cdk-wrapper/.eslintrc.internal.js new file mode 100644 index 0000000000..301298b292 --- /dev/null +++ b/packages/cli/assets/cdk-wrapper/.eslintrc.internal.js @@ -0,0 +1,18 @@ +module.exports = { + root: true, + parser: "@babel/eslint-parser", + parserOptions: { + babelOptions: { + configFile: "./.build/.babelrc.json", + }, + }, + plugins: ["@babel"], + overrides: [ + { + files: ["*.ts", "*.tsx"], + parser: "@typescript-eslint/parser", + plugins: ["@typescript-eslint"], + extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"], + }, + ], +}; diff --git a/packages/cli/assets/cdk-wrapper/run.js b/packages/cli/assets/cdk-wrapper/run.js index 97c02f549e..c3f2855601 100644 --- a/packages/cli/assets/cdk-wrapper/run.js +++ b/packages/cli/assets/cdk-wrapper/run.js @@ -15,6 +15,8 @@ const sst = require("@serverless-stack/resources"); const config = require("./sst-merged.json"); +const appPath = path.join(__dirname, "../"); + // Check first and throw an error if (!fs.existsSync(path.join(__dirname, "lib", "index.js"))) { handlerNotFound(true); @@ -27,16 +29,21 @@ if (!handler.default) { } handler.default( - new sst.App({ - name: config.name, - stage: config.stage, - region: config.region, - debugEndpoint: config.debugEndpoint, - }) + new sst.App( + { + name: config.name, + stage: config.stage, + region: config.region, + }, + { + appPath, + debugEndpoint: config.debugEndpoint, + } + ) ); function handlerNotFound(importFailed) { - const extCopy = fs.existsSync(path.join(__dirname, "../", "tsconfig.json")) + const extCopy = fs.existsSync(path.join(appPath, "tsconfig.json")) ? "ts" : "js"; console.error( diff --git a/packages/cli/package.json b/packages/cli/package.json index 8f4634dc1b..369fd1a78d 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -57,7 +57,7 @@ "core-js": "^3.6.5", "cross-spawn": "^7.0.3", "esbuild": "^0.8.26", - "eslint": "^7.7.0", + "eslint": "^7.16.0", "fs-extra": "^9.0.1", "jest": "^26.1.0", "promise.allsettled": "^1.0.2", diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index d56c30dbb6..1d9b76dafa 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -40,14 +40,6 @@ function exitWithMessage(message, shortMessage) { process.exit(1); } -async function getCmdPath(cmd) { - const appPath = path.join(paths.appNodeModules, ".bin", cmd); - const ownPath = path.join(paths.ownNodeModules, ".bin", cmd); - - // Fallback to own node modules, in case of tests that don't install the cli - return (await checkFileExists(appPath)) ? appPath : ownPath; -} - async function createBuildPath() { await fs.emptyDir(paths.appBuildPath); } @@ -62,7 +54,7 @@ async function getAppPackageJson() { } } -async function getExternalModules(packageJson) { +function getExternalModules(packageJson) { return Object.keys({ ...(packageJson.dependencies || {}), ...(packageJson.devDependencies || {}), @@ -160,11 +152,11 @@ async function lint(inputFiles) { try { const { stdout, stderr } = await exec( [ - await getCmdPath("eslint"), + "$(npm bin)/eslint", "--color", "--no-error-on-unmatched-pattern", "--config", - path.join(paths.ownPath, "scripts", "util", ".eslintrc.internal.js"), + path.join(paths.appBuildPath, ".eslintrc.internal.js"), "--ext", ".js,.ts", "--fix", @@ -199,9 +191,7 @@ async function typeCheck(inputFiles) { try { const { stdout, stderr } = await exec( - [await getCmdPath("tsc"), "--pretty", "--noEmit", ...inputFiles].join( - " " - ), + ["$(npm bin)/tsc", "--pretty", "--noEmit", ...inputFiles].join(" "), { cwd: paths.appPath } ); if (stdout) { @@ -233,7 +223,7 @@ async function transpile(cliInfo) { const isTs = await checkFileExists(tsconfig); const appPackageJson = await getAppPackageJson(); - const external = await getExternalModules(appPackageJson); + const external = getExternalModules(appPackageJson); runCdkVersionMatch(appPackageJson, cliInfo); @@ -276,8 +266,12 @@ async function transpile(cliInfo) { }; } -function copyConfigFiles() { - return fs.copy( +async function copyConfigFiles() { + await fs.copy( + path.join(paths.ownPath, "assets", "cdk-wrapper", ".eslintrc.internal.js"), + path.join(paths.appBuildPath, ".eslintrc.internal.js") + ); + return await fs.copy( path.join(paths.ownPath, "assets", "cdk-wrapper", ".babelrc.json"), path.join(paths.appBuildPath, ".babelrc.json") ); diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index d2d122a6fd..1d576ab262 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -1,17 +1,16 @@ { "name": "base", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "build": "../../bin/scripts.js build", - "remove": "../../bin/scripts.js remove", - "deploy": "../../bin/scripts.js deploy", - "add-cdk": "../../bin/scripts.js add-cdk", - "cdk": "../../bin/scripts.js cdk" + "postinstall": "node ../helpers/copy-symlinks.js", + "start": "sst start", + "build": "sst build", + "deploy": "sst deploy", + "remove": "sst remove", + "cdk": "sst cdk" }, - "keywords": [], - "author": "", "dependencies": { "@aws-cdk/aws-cloudformation": "1.74.0", "@aws-cdk/aws-cognito": "1.74.0", @@ -19,7 +18,8 @@ "@aws-cdk/aws-iam": "1.74.0", "@aws-cdk/aws-s3": "1.74.0", "@aws-cdk/core": "1.74.0", - "@serverless-stack/resources": "../../../resources" + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5" }, "license": "ISC" } diff --git a/packages/cli/test/base/yarn.lock b/packages/cli/test/base/yarn.lock deleted file mode 100644 index f2dffa1719..0000000000 --- a/packages/cli/test/base/yarn.lock +++ /dev/null @@ -1,413 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-cdk/assets@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.74.0.tgz#8aea948a32afcf7c60449346a087c4b5aecff251" - integrity sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ== - dependencies: - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-applicationautoscaling@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz#ad5e946e68bd4094c3236e983d36f67d66135dfc" - integrity sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-autoscaling-common@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz#f6bcbb987830f299b6e2ef454944afdde9a8a82e" - integrity sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-certificatemanager@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.74.0.tgz#35b07c4b396a3db96da5d431e549460d1edc2251" - integrity sha512-Ve1SYM6qpUysHLD5bzHiE4kXBeo7VAEQlUti0cjkkjkuPh+dKHti/TqYhA0tkfUIMjZylnvkogBzMYdIUBTNxg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-route53" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-cloudformation@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.74.0.tgz#04fffb02403fb52ee05ec43172b845a29a903a9e" - integrity sha512-VOyuMhoxA9vk3zSUfzqSg1YjYYgc+qyB0bpaOJIW/iinXYXhA64z5YQnTxdwd/exlFgA59chOanA7aRrNM2YIg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-sns" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-cloudwatch@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz#94a29d2998a5c08412084b346d404b3a8b90f8a8" - integrity sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-codeguruprofiler@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz#d749688e9edb252ce6fc68efa4f9977f7ba02cb6" - integrity sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-cognito@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.74.0.tgz#740f51269cbe00b46ae6327814dd8c0dbb470912" - integrity sha512-t8XZbWQd8gMgn6FfYlPBmb3HDBVFHZI3tEODgc4mu/qRZAn2GH+pka4l1kdsgfzsBekvBLsOQosp7xJ6XaABsA== - dependencies: - "@aws-cdk/aws-certificatemanager" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/custom-resources" "1.74.0" - constructs "^3.2.0" - punycode "^2.1.1" - -"@aws-cdk/aws-dynamodb@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.74.0.tgz#7e0ef530e9c3d7301a9db616ddf6d650f7acb76f" - integrity sha512-YU38dFYLMyMe5u2GLy8sFCFTVxwDgWZ67HzFg41kSj8WpAsVQEE5Zxh1nf0+8Ai1J4MNeLeMCaXtuliHipoQSw== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/custom-resources" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-ec2@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz#eae31df9045ca9374daf6b1562674e31d8053aff" - integrity sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/aws-ssm" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-efs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz#367b89f14ccd090f98227dbc975076571b31faac" - integrity sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA== - dependencies: - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-events@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz#2ed5a4cdd737ce4c8950506df496d0b43ac6aa12" - integrity sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-iam@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz#c255c9676fb6048ab27c00d111ed5e7d8b46877c" - integrity sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA== - dependencies: - "@aws-cdk/core" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-kms@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz#73531f7b5d2542eb5e3f7bb54604944921e34995" - integrity sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-lambda-nodejs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.74.0.tgz#aa818270e4dcd74be51d402cdb114da311b3c966" - integrity sha512-1mc8I+Yz43El8O8SjsfkABsI31tcpO5e3fAz7/40DKuFgM9jkL6vyiL55MLIckAqmE2N9mRYU0xF4RC7uRZdmQ== - dependencies: - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-lambda@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz#52175fbc9e679ca5c0f4d15e0666c99fc4a953d0" - integrity sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-codeguruprofiler" "1.74.0" - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-efs" "1.74.0" - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/aws-sqs" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-logs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz#cd40afe70ffeb5250ecea1db0ee0a2f68fb2084a" - integrity sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-route53@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.74.0.tgz#f9b3c770cf613227bba31c4a7499c8f19966f3e4" - integrity sha512-TYnAByXLc6B/uAG03bYLV0kPi1TU8G95kW6wNhfiqvPCSwfizbsg5rztbUoydJpBocbOs9qbtCM7v6gbDsB2bQ== - dependencies: - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-s3-assets@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz#7f1988f3931e95d88a8c1357f98c47f7f9b73dee" - integrity sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg== - dependencies: - "@aws-cdk/assets" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-s3@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz#5b53839c3af0f67bfb1e96061f6a1ea5be445fe9" - integrity sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q== - dependencies: - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-sns@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.74.0.tgz#c9289b34cb2512010a0b6813f684c93398502bdd" - integrity sha512-O0HDGvl1WjCTU53auNJKCW5/6vpbVYlj0RwLgGaOOlTeKnfuq53kGvL/t3QdZQlJWxSvkbN61O+rZB7GacXV0g== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-sqs" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-sqs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz#998da5838d4310805432f0cf55fcc7c8f34657e2" - integrity sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-ssm@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz#426dd65c0b933618d5c196cb38386c1035b0fdc4" - integrity sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/cloud-assembly-schema@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz#f1bbd8411ec320dd9e14ef2dce626a05019c42bc" - integrity sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw== - dependencies: - jsonschema "^1.4.0" - semver "^7.3.2" - -"@aws-cdk/core@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.74.0.tgz#132d31c0ab9d39394827431ccd804cf10de34273" - integrity sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - "@balena/dockerignore" "^1.0.2" - constructs "^3.2.0" - fs-extra "^9.0.1" - ignore "^5.1.8" - minimatch "^3.0.4" - -"@aws-cdk/custom-resources@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.74.0.tgz#19329e8a9b9bc0ca66e00c791b008c416a67265f" - integrity sha512-KDXgyRCeCMIj42nQcd2RXc4GYQpd7SWtx2iw0G4Wvs/wG4i3nR1qdlvEJvAlNgsYeqM4pp3mIp3PgdX341HsCg== - dependencies: - "@aws-cdk/aws-cloudformation" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-sns" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/cx-api@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz#922c11389d723eadef2bc12666ced4980fe9e4cc" - integrity sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - semver "^7.3.2" - -"@aws-cdk/region-info@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.74.0.tgz#e53eabe2d8980c360e63ea956615253551005182" - integrity sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA== - -"@balena/dockerignore@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" - integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== - -"@serverless-stack/resources@../../../resources": - version "1.0.0-alpha.5" - dependencies: - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-lambda-nodejs" "1.74.0" - "@aws-cdk/core" "1.74.0" - -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== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -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" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -constructs@^3.2.0: - version "3.2.40" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.40.tgz#e8c0e1020ad254ff73d9ea6c85cc90c3a33c71f1" - integrity sha512-XtKn+Pzq8EZNe1zasQem6X09dprZ8pXvNxECKQLZC+jU5BdkgDKe0nak4Wp+k7uvDFlyh9NccaGtxqP6w2YS0A== - -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -ignore@^5.1.8: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonschema@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" - integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -semver@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/test/helpers/copy-symlinks.js b/packages/cli/test/helpers/copy-symlinks.js new file mode 100644 index 0000000000..e5fac195b0 --- /dev/null +++ b/packages/cli/test/helpers/copy-symlinks.js @@ -0,0 +1,32 @@ +/** + * Copies the all the symlinks in root node_modules .bin dir to the current + * node_modules/.bin dir with their proper paths. + * + * This is necessary because Yarn Workspaces doesn't install them and the SST + * scripts need the eslint and tsc executables. + */ +const fs = require("fs"); +const path = require("path"); + +const rootBin = path.join(__dirname, "../../../../node_modules", ".bin"); + +const files = fs.readdirSync(rootBin, { + encoding: "utf8", + withFileTypes: true, +}); + +files.forEach((file) => { + if (file.isSymbolicLink()) { + const name = file.name; + const relPath = fs.readlinkSync(path.join(rootBin, name)); + const fullPath = path.join(rootBin, relPath); + + try { + fs.symlinkSync(fullPath, path.join("node_modules", ".bin", name)); + } catch (e) { + if (e.code !== "EEXIST") { + throw e; + } + } + } +}); diff --git a/packages/cli/test/start/package.json b/packages/cli/test/start/package.json index 02ed375226..920b309a06 100644 --- a/packages/cli/test/start/package.json +++ b/packages/cli/test/start/package.json @@ -1,17 +1,16 @@ { "name": "start", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "start": "../../bin/scripts.js start", - "build": "../../bin/scripts.js build", - "deploy": "../../bin/scripts.js deploy", - "remove": "../../bin/scripts.js remove", - "cdk": "../../bin/scripts.js cdk" + "postinstall": "node ../helpers/copy-symlinks.js", + "start": "sst start", + "build": "sst build", + "deploy": "sst deploy", + "remove": "sst remove", + "cdk": "sst cdk" }, - "keywords": [], - "author": "", "dependencies": { "@aws-cdk/aws-apigatewayv2": "1.74.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.74.0", @@ -19,7 +18,8 @@ "@aws-cdk/aws-sns": "1.74.0", "@aws-cdk/aws-sns-subscriptions": "1.74.0", "@aws-cdk/core": "1.74.0", - "@serverless-stack/resources": "../../../resources" + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5" }, "license": "ISC" } diff --git a/packages/cli/test/start/yarn.lock b/packages/cli/test/start/yarn.lock deleted file mode 100644 index c234c550c1..0000000000 --- a/packages/cli/test/start/yarn.lock +++ /dev/null @@ -1,426 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-cdk/assets@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.74.0.tgz#8aea948a32afcf7c60449346a087c4b5aecff251" - integrity sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ== - dependencies: - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-apigatewayv2-integrations@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2-integrations/-/aws-apigatewayv2-integrations-1.74.0.tgz#a242aaa74e0f294da9b3beefd46a28fb53de5355" - integrity sha512-DkhmqK5VrYPOdCu75fzUCFX1ZXS+JcMq28MSW6chre23aDWDpLmFR3yoJ5+AxqgqxCmM2O5kqyIkjh5YaKC1Xg== - dependencies: - "@aws-cdk/aws-apigatewayv2" "1.74.0" - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-elasticloadbalancingv2" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-servicediscovery" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-apigatewayv2@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.74.0.tgz#c65c94e25b70fcee53a3e15e211f74819eff4d77" - integrity sha512-Z8GRXYZX6MHZeyKQpiiCUvtxIKh6y9UGRM9f6+xfjMa75WwjoM8cFm9h41720LwKcUXYj0TlKiqEyeL12UIAYA== - dependencies: - "@aws-cdk/aws-certificatemanager" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-applicationautoscaling@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz#ad5e946e68bd4094c3236e983d36f67d66135dfc" - integrity sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-autoscaling-common@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz#f6bcbb987830f299b6e2ef454944afdde9a8a82e" - integrity sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-certificatemanager@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.74.0.tgz#35b07c4b396a3db96da5d431e549460d1edc2251" - integrity sha512-Ve1SYM6qpUysHLD5bzHiE4kXBeo7VAEQlUti0cjkkjkuPh+dKHti/TqYhA0tkfUIMjZylnvkogBzMYdIUBTNxg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-route53" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-cloudwatch@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz#94a29d2998a5c08412084b346d404b3a8b90f8a8" - integrity sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-codeguruprofiler@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz#d749688e9edb252ce6fc68efa4f9977f7ba02cb6" - integrity sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-ec2@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz#eae31df9045ca9374daf6b1562674e31d8053aff" - integrity sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/aws-ssm" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-efs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz#367b89f14ccd090f98227dbc975076571b31faac" - integrity sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA== - dependencies: - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-elasticloadbalancingv2@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.74.0.tgz#794ee49baac329e43884748ecda3e66348fd5088" - integrity sha512-+Zx6/7CqZcsubSwxFC6rTq+uyzzQjIOGOh8RN/q93EZ9+snSJM/mRdZ/1DyNIjfSFbwyYQ1usE9rbYi1XWDPVA== - dependencies: - "@aws-cdk/aws-certificatemanager" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-events@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz#2ed5a4cdd737ce4c8950506df496d0b43ac6aa12" - integrity sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-iam@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz#c255c9676fb6048ab27c00d111ed5e7d8b46877c" - integrity sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA== - dependencies: - "@aws-cdk/core" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-kms@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz#73531f7b5d2542eb5e3f7bb54604944921e34995" - integrity sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-lambda-nodejs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.74.0.tgz#aa818270e4dcd74be51d402cdb114da311b3c966" - integrity sha512-1mc8I+Yz43El8O8SjsfkABsI31tcpO5e3fAz7/40DKuFgM9jkL6vyiL55MLIckAqmE2N9mRYU0xF4RC7uRZdmQ== - dependencies: - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-lambda@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz#52175fbc9e679ca5c0f4d15e0666c99fc4a953d0" - integrity sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-codeguruprofiler" "1.74.0" - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-efs" "1.74.0" - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/aws-sqs" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-logs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz#cd40afe70ffeb5250ecea1db0ee0a2f68fb2084a" - integrity sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-route53@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.74.0.tgz#f9b3c770cf613227bba31c4a7499c8f19966f3e4" - integrity sha512-TYnAByXLc6B/uAG03bYLV0kPi1TU8G95kW6wNhfiqvPCSwfizbsg5rztbUoydJpBocbOs9qbtCM7v6gbDsB2bQ== - dependencies: - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-s3-assets@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz#7f1988f3931e95d88a8c1357f98c47f7f9b73dee" - integrity sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg== - dependencies: - "@aws-cdk/assets" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-s3@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz#5b53839c3af0f67bfb1e96061f6a1ea5be445fe9" - integrity sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q== - dependencies: - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-servicediscovery@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.74.0.tgz#6e1145a4b85371431e8f6b21ce6ca7c9d855680c" - integrity sha512-5pABov1sNs0bgOb4UZKT+5H+OR3+0/8oxefFCiGxcGG4Kxsq4d4XJbmwx1oDUjCJclxlzOTuuCyay5NnoZ+6fg== - dependencies: - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-elasticloadbalancingv2" "1.74.0" - "@aws-cdk/aws-route53" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-sns-subscriptions@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.74.0.tgz#6cdad4a409359122e8a410543e33da59d21b54cc" - integrity sha512-MOuArbCx1nxL5B40RMQzHNnU0SZWkaQfRDTURTQbX4e0OHyq5DnQrtXTu/XyI/MYPBU+ZnC/FXP+hynCatn+nw== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-sns" "1.74.0" - "@aws-cdk/aws-sqs" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-sns@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.74.0.tgz#c9289b34cb2512010a0b6813f684c93398502bdd" - integrity sha512-O0HDGvl1WjCTU53auNJKCW5/6vpbVYlj0RwLgGaOOlTeKnfuq53kGvL/t3QdZQlJWxSvkbN61O+rZB7GacXV0g== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-sqs" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-sqs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz#998da5838d4310805432f0cf55fcc7c8f34657e2" - integrity sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-ssm@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz#426dd65c0b933618d5c196cb38386c1035b0fdc4" - integrity sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/cloud-assembly-schema@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz#f1bbd8411ec320dd9e14ef2dce626a05019c42bc" - integrity sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw== - dependencies: - jsonschema "^1.4.0" - semver "^7.3.2" - -"@aws-cdk/core@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.74.0.tgz#132d31c0ab9d39394827431ccd804cf10de34273" - integrity sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - "@balena/dockerignore" "^1.0.2" - constructs "^3.2.0" - fs-extra "^9.0.1" - ignore "^5.1.8" - minimatch "^3.0.4" - -"@aws-cdk/cx-api@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz#922c11389d723eadef2bc12666ced4980fe9e4cc" - integrity sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - semver "^7.3.2" - -"@aws-cdk/region-info@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.74.0.tgz#e53eabe2d8980c360e63ea956615253551005182" - integrity sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA== - -"@balena/dockerignore@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" - integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== - -"@serverless-stack/resources@../../../resources": - version "1.0.0-alpha.5" - dependencies: - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-lambda-nodejs" "1.74.0" - "@aws-cdk/core" "1.74.0" - -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== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -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" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -constructs@^3.2.0: - version "3.2.37" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.37.tgz#ebced4a0fbfa81be8db730cbe7a82d18410bebcb" - integrity sha512-Z2dVwVaaw8cDIOeWT5smfgC4BLhkXK7JAfUUDtoB5WhUIIUZpRX+Pd5ZE6UrEuXSQkaJHUT6MVGxgBFZR3DpxQ== - -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -ignore@^5.1.8: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -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" - -jsonschema@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" - integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -semver@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== diff --git a/packages/resources/package.json b/packages/resources/package.json index 468d22d415..7dfdfddde5 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -27,11 +27,14 @@ "dependencies": { "@aws-cdk/aws-lambda": "1.74.0", "@aws-cdk/aws-lambda-nodejs": "1.74.0", - "@aws-cdk/core": "1.74.0" + "@aws-cdk/core": "1.74.0", + "eslint": "^7.16.0", + "fs-extra": "^9.0.1", + "typescript": "^3.9.7" }, "devDependencies": { - "@types/node": "^14.0.27", - "typescript": "^3.9.7" + "@types/fs-extra": "^9.0.6", + "@types/node": "^14.0.27" }, "gitHead": "0a586f786aca7e7d498a80c4dda680159831f959" } diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 4249399dd6..66a13aa376 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -25,6 +25,16 @@ export interface DeployProps { * @default - Defaults to us-east-1 */ readonly region?: string; +} + +/** + * Local build props for apps. + */ +export interface BuildProps { + /** + * The root path for the SST app. + */ + readonly appPath: string; /** * The local WebSockets debug enpoint used by `sst start`. @@ -57,21 +67,37 @@ export class App extends cdk.App { */ public readonly region: string; + /** + * The root path for the SST app + */ + public readonly appPath: string; + + /** + * The build dir for the SST app + */ + public readonly buildDir: string = ".build"; + /** * The local WebSockets debug endpoint */ public readonly debugEndpoint?: string; - constructor(deployProps: DeployProps = {}, props: AppProps = {}) { + constructor( + deployProps: DeployProps = {}, + buildProps: BuildProps, + props: AppProps = {} + ) { super(props); this.stage = deployProps.stage || "dev"; this.name = deployProps.name || "my-app"; this.region = deployProps.region || "us-east-1"; - if (deployProps.debugEndpoint) { + this.appPath = buildProps.appPath; + + if (buildProps.debugEndpoint) { this.local = true; - this.debugEndpoint = deployProps.debugEndpoint; + this.debugEndpoint = buildProps.debugEndpoint; } } diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index 1c5000b07f..3d4864688f 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -3,6 +3,7 @@ import * as cdk from "@aws-cdk/core"; import * as lambda from "@aws-cdk/aws-lambda"; import { App } from "./App"; +import { builder } from "./util/builder"; export type FunctionProps = lambda.FunctionProps; @@ -31,6 +32,8 @@ export class Function extends lambda.Function { throw new Error(`sst.Function only supports AssetCode type for code.`); } + const code = props.code as lambda.AssetCode; + if (root.local) { super(scope, id, { ...props, @@ -40,14 +43,24 @@ export class Function extends lambda.Function { handler: "index.main", environment: { ...(props.environment || {}), - SST_DEBUG_SRC_PATH: props.code.path, + SST_DEBUG_SRC_PATH: code.path, SST_DEBUG_SRC_HANDLER: props.handler, SST_DEBUG_ENDPOINT: root.debugEndpoint || "", }, }); // func.node.defaultChild.cfnOptions.metadata = { 'sst:lambda:src': 'src/hello.handler' }; } else { - super(scope, id, props); + const builderOutput = builder({ + srcPath: code.path, + appPath: root.appPath, + handler: props.handler, + buildDir: root.buildDir, + }); + + super(scope, id, { + ...props, + code: lambda.Code.fromAsset(builderOutput.outPath), + }); } } } diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts new file mode 100644 index 0000000000..7985f06325 --- /dev/null +++ b/packages/resources/src/util/builder.ts @@ -0,0 +1,138 @@ +import * as path from "path"; +import * as fs from "fs-extra"; +import * as esbuild from "esbuild"; +import { execSync } from "child_process"; + +interface BuilderProps { + readonly appPath: string; + readonly srcPath: string; + readonly handler: string; + readonly buildDir: string; +} + +function addExtensionToHandler(handler: string, extension: string): string { + return handler.replace(/\.[\w\d]+$/, extension); +} + +function getInputFilesFromEsbuildMetafile(file: string): Array { + let metaJson; + + try { + metaJson = fs.readJsonSync(file); + } catch (e) { + throw new Error("There was a problem reading the esbuild metafile."); + } + + return Object.keys(metaJson.inputs).map((input) => path.resolve(input)); +} + +function getEsbuildMetafileName(srcPath: string, handler: string): string { + const key = `${srcPath}/${handler}`.replace(/[/.]/g, "-"); + + return `.esbuild.${key}.json`; +} + +export function builder(builderProps: BuilderProps) { + const { srcPath, handler, appPath, buildDir } = builderProps; + + const external = ["aws-sdk"]; + + const tsconfig = path.join(srcPath, "tsconfig.json"); + const isTs = fs.existsSync(tsconfig); + const extension = isTs ? ".ts" : ".js"; + + const buildPath = path.join(srcPath, buildDir); + const metafile = path.join( + buildPath, + getEsbuildMetafileName(srcPath, handler) + ); + + const entryPoint = path.join( + srcPath, + addExtensionToHandler(handler, extension) + ); + + function lint(inputFiles: Array) { + inputFiles = inputFiles.filter( + (file: string) => file.indexOf("node_modules") === -1 + ); + + try { + const stdout = execSync( + [ + "$(npm bin)/eslint", + "--color", + "--no-error-on-unmatched-pattern", + "--config", + path.join(appPath, buildDir, ".eslintrc.internal.js"), + "--ext", + ".js,.ts", + "--fix", + // Handling nested ESLint projects in Yarn Workspaces + // https://github.com/serverless-stack/serverless-stack/issues/11 + "--resolve-plugins-relative-to", + ".", + ...inputFiles, + ].join(" "), + { cwd: appPath } + ); + console.log(stdout.toString()); + } catch (e) { + console.log(e.stdout.toString()); + throw new Error("There was a problem linting the source."); + } + } + + function typeCheck(inputFiles: Array) { + inputFiles = inputFiles.filter((file: string) => file.endsWith(".ts")); + + if (inputFiles.length === 0) { + return; + } + + try { + const stdout = execSync( + ["$(npm bin)/tsc", "--pretty", "--noEmit", ...inputFiles].join(" "), + { cwd: appPath } + ); + console.log(stdout.toString()); + } catch (e) { + console.log(e.stdout.toString()); + throw new Error("There was a problem type checking the source."); + } + } + + function transpile(entryPoint: string): Array { + if (!fs.existsSync(entryPoint)) { + throw new Error(`Cannot find a handler file at ${entryPoint}".`); + } + + esbuild.buildSync({ + external, + metafile, + bundle: true, + format: "cjs", + sourcemap: true, + platform: "node", + outdir: buildPath, + entryPoints: [entryPoint], + tsconfig: isTs ? tsconfig : undefined, + }); + + return getInputFilesFromEsbuildMetafile(metafile); + } + + const inputFiles = transpile(entryPoint); + + lint(inputFiles); + + if (isTs) { + typeCheck(inputFiles); + } + + return { + isTs, + handler, + outPath: buildPath, + }; +} diff --git a/yarn.lock b/yarn.lock index 2d20da1047..f1ef3706a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11,6 +11,20 @@ "@aws-cdk/cx-api" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-apigatewayv2-integrations@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2-integrations/-/aws-apigatewayv2-integrations-1.74.0.tgz#a242aaa74e0f294da9b3beefd46a28fb53de5355" + integrity sha512-DkhmqK5VrYPOdCu75fzUCFX1ZXS+JcMq28MSW6chre23aDWDpLmFR3yoJ5+AxqgqxCmM2O5kqyIkjh5YaKC1Xg== + dependencies: + "@aws-cdk/aws-apigatewayv2" "1.74.0" + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-servicediscovery" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + "@aws-cdk/aws-apigatewayv2@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.74.0.tgz#c65c94e25b70fcee53a3e15e211f74819eff4d77" @@ -85,6 +99,19 @@ "@aws-cdk/core" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-cognito@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.74.0.tgz#740f51269cbe00b46ae6327814dd8c0dbb470912" + integrity sha512-t8XZbWQd8gMgn6FfYlPBmb3HDBVFHZI3tEODgc4mu/qRZAn2GH+pka4l1kdsgfzsBekvBLsOQosp7xJ6XaABsA== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/custom-resources" "1.74.0" + constructs "^3.2.0" + punycode "^2.1.1" + "@aws-cdk/aws-dynamodb@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.74.0.tgz#7e0ef530e9c3d7301a9db616ddf6d650f7acb76f" @@ -129,6 +156,23 @@ "@aws-cdk/cx-api" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-elasticloadbalancingv2@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.74.0.tgz#794ee49baac329e43884748ecda3e66348fd5088" + integrity sha512-+Zx6/7CqZcsubSwxFC6rTq+uyzzQjIOGOh8RN/q93EZ9+snSJM/mRdZ/1DyNIjfSFbwyYQ1usE9rbYi1XWDPVA== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.74.0" + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-s3" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/region-info" "1.74.0" + constructs "^3.2.0" + "@aws-cdk/aws-events@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz#2ed5a4cdd737ce4c8950506df496d0b43ac6aa12" @@ -232,6 +276,29 @@ "@aws-cdk/core" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-servicediscovery@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.74.0.tgz#6e1145a4b85371431e8f6b21ce6ca7c9d855680c" + integrity sha512-5pABov1sNs0bgOb4UZKT+5H+OR3+0/8oxefFCiGxcGG4Kxsq4d4XJbmwx1oDUjCJclxlzOTuuCyay5NnoZ+6fg== + dependencies: + "@aws-cdk/aws-ec2" "1.74.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.74.0" + "@aws-cdk/aws-route53" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sns-subscriptions@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.74.0.tgz#6cdad4a409359122e8a410543e33da59d21b54cc" + integrity sha512-MOuArbCx1nxL5B40RMQzHNnU0SZWkaQfRDTURTQbX4e0OHyq5DnQrtXTu/XyI/MYPBU+ZnC/FXP+hynCatn+nw== + dependencies: + "@aws-cdk/aws-iam" "1.74.0" + "@aws-cdk/aws-lambda" "1.74.0" + "@aws-cdk/aws-sns" "1.74.0" + "@aws-cdk/aws-sqs" "1.74.0" + "@aws-cdk/core" "1.74.0" + constructs "^3.2.0" + "@aws-cdk/aws-sns@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.74.0.tgz#c9289b34cb2512010a0b6813f684c93398502bdd" @@ -2373,6 +2440,13 @@ resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== +"@types/fs-extra@^9.0.6": + version "9.0.6" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.6.tgz#488e56b77299899a608b8269719c1d133027a6ab" + integrity sha512-ecNRHw4clCkowNOBJH1e77nvbPxHYnWIXMv1IAoG/9+MYGkgoyr3Ppxr7XYFNL41V422EDhyV4/4SSK8L2mlig== + dependencies: + "@types/node" "*" + "@types/glob@^7.1.1": version "7.1.3" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" @@ -2570,11 +2644,6 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-jsx@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" - integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== - acorn-jsx@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" @@ -2585,7 +2654,7 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^7.1.1, acorn@^7.3.1: +acorn@^7.1.1: version "7.4.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== @@ -2631,7 +2700,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3: +ajv@^6.10.0, ajv@^6.12.3: version "6.12.4" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== @@ -2870,11 +2939,6 @@ ast-types@^0.13.2: dependencies: tslib "^2.0.1" -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" @@ -4345,7 +4409,7 @@ eslint-rule-composer@^0.3.0: resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== -eslint-scope@5.1.0, eslint-scope@^5.0.0, eslint-scope@^5.1.0: +eslint-scope@5.1.0, eslint-scope@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== @@ -4421,57 +4485,6 @@ eslint@^7.16.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -eslint@^7.7.0: - version "7.7.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.7.0.tgz#18beba51411927c4b64da0a8ceadefe4030d6073" - integrity sha512-1KUxLzos0ZVsyL81PnRN335nDtQ8/vZUD6uMtWbF+5zDtjKcsklIi78XoE0MVL93QvWTu+E5y44VyyCsOMBrIg== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - eslint-scope "^5.1.0" - eslint-utils "^2.1.0" - eslint-visitor-keys "^1.3.0" - espree "^7.2.0" - esquery "^1.2.0" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash "^4.17.19" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.2.0.tgz#1c263d5b513dbad0ac30c4991b93ac354e948d69" - integrity sha512-H+cQ3+3JYRMEIOl87e7QdHX70ocly5iW4+dttuR8iYSPr/hXKFb+7dBsZ7+u1adC4VrnPlTkv0+OwuPnDop19g== - dependencies: - acorn "^7.3.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.3.0" - espree@^7.3.0, espree@^7.3.1: version "7.3.1" resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" @@ -4721,13 +4734,6 @@ figures@^3.2.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - file-entry-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" @@ -4794,15 +4800,6 @@ find-versions@^3.2.0: dependencies: semver-regex "^2.0.0" -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -4811,11 +4808,6 @@ flat-cache@^3.0.4: flatted "^3.1.0" rimraf "^3.0.2" -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - flatted@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067" @@ -6698,7 +6690,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.2.1: +lodash@^4.17.12, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.2.1: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== @@ -8384,13 +8376,6 @@ retry@^0.10.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -8596,15 +8581,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - slice-ansi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" @@ -9090,16 +9066,6 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - table@^6.0.3, table@^6.0.4: version "6.0.4" resolved "https://registry.yarnpkg.com/table/-/table-6.0.4.tgz#c523dd182177e926c723eb20e1b341238188aa0d" @@ -9831,13 +9797,6 @@ write-pkg@^3.1.0: sort-keys "^2.0.0" write-json-file "^2.2.0" -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - ws@^7.2.3: version "7.3.1" resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" From 1190a0f58b4c4a332f1d1be547b901ce504ec871 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 1 Jan 2021 22:54:14 -0500 Subject: [PATCH 176/481] Moving tests to yarn workspaces --- package.json | 3 +- packages/cli/assets/cdk-wrapper/run.js | 1 + packages/cli/test/add-cdk/add-cdk.test.js | 2 +- packages/cli/test/add-cdk/package.json | 15 +- packages/cli/test/add-cdk/yarn.lock | 4 - packages/cli/test/base-ts/package.json | 18 +- packages/cli/test/base-ts/yarn.lock | 500 -- packages/cli/test/cdk-command/package.json | 14 +- packages/cli/test/cdk-command/yarn.lock | 109 - packages/cli/test/config-invalid/package.json | 16 +- packages/cli/test/config-invalid/yarn.lock | 4 - packages/cli/test/config-no-name/package.json | 16 +- packages/cli/test/config-no-name/yarn.lock | 4 - packages/cli/test/config-no-type/package.json | 16 +- packages/cli/test/config-no-type/yarn.lock | 4 - .../cli/test/config-not-found/package.json | 16 +- packages/cli/test/config-not-found/yarn.lock | 4 - packages/cli/test/config/package.json | 18 +- packages/cli/test/config/yarn.lock | 373 - packages/cli/test/context/package.json | 16 +- packages/cli/test/context/yarn.lock | 373 - .../cli/test/eslint-ignore-rule/package.json | 14 +- .../cli/test/eslint-ignore-rule/yarn.lock | 109 - packages/cli/test/eslint-ignore/package.json | 14 +- packages/cli/test/eslint-ignore/yarn.lock | 109 - packages/cli/test/eslint-ts/package.json | 14 +- packages/cli/test/eslint-ts/yarn.lock | 109 - packages/cli/test/eslint/package.json | 14 +- packages/cli/test/eslint/yarn.lock | 109 - .../handler-function-not-found/package.json | 16 +- .../test/handler-function-not-found/yarn.lock | 4 - .../cli/test/handler-not-found/package.json | 16 +- packages/cli/test/handler-not-found/yarn.lock | 4 - packages/cli/test/helpers/copy-symlinks.js | 10 +- packages/cli/test/jest-ts/package.json | 23 +- packages/cli/test/jest-ts/yarn.lock | 6628 ----------------- packages/cli/test/jest/package.json | 14 +- packages/cli/test/jest/yarn.lock | 553 -- .../test/mismatched-cdk-versions/package.json | 14 +- .../test/mismatched-cdk-versions/yarn.lock | 475 -- .../cli/test/stack-no-prefix/package.json | 14 +- packages/cli/test/stack-no-prefix/yarn.lock | 320 - packages/cli/test/stack-set-env/package.json | 14 +- packages/cli/test/stack-set-env/yarn.lock | 109 - packages/resources/src/App.ts | 8 +- yarn.lock | 494 +- 46 files changed, 672 insertions(+), 10062 deletions(-) delete mode 100644 packages/cli/test/add-cdk/yarn.lock delete mode 100644 packages/cli/test/base-ts/yarn.lock delete mode 100644 packages/cli/test/cdk-command/yarn.lock delete mode 100644 packages/cli/test/config-invalid/yarn.lock delete mode 100644 packages/cli/test/config-no-name/yarn.lock delete mode 100644 packages/cli/test/config-no-type/yarn.lock delete mode 100644 packages/cli/test/config-not-found/yarn.lock delete mode 100644 packages/cli/test/config/yarn.lock delete mode 100644 packages/cli/test/context/yarn.lock delete mode 100644 packages/cli/test/eslint-ignore-rule/yarn.lock delete mode 100644 packages/cli/test/eslint-ignore/yarn.lock delete mode 100644 packages/cli/test/eslint-ts/yarn.lock delete mode 100644 packages/cli/test/eslint/yarn.lock delete mode 100644 packages/cli/test/handler-function-not-found/yarn.lock delete mode 100644 packages/cli/test/handler-not-found/yarn.lock delete mode 100644 packages/cli/test/jest-ts/yarn.lock delete mode 100644 packages/cli/test/jest/yarn.lock delete mode 100644 packages/cli/test/mismatched-cdk-versions/yarn.lock delete mode 100644 packages/cli/test/stack-no-prefix/yarn.lock delete mode 100644 packages/cli/test/stack-set-env/yarn.lock diff --git a/package.json b/package.json index c84b2b7f40..dd8419faa5 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,7 @@ "private": true, "workspaces": [ "packages/*", - "packages/cli/test/base", - "packages/cli/test/start" + "packages/cli/test/*" ], "scripts": { "lint": "eslint . --fix --ext .js,.ts", diff --git a/packages/cli/assets/cdk-wrapper/run.js b/packages/cli/assets/cdk-wrapper/run.js index c3f2855601..334fa6122f 100644 --- a/packages/cli/assets/cdk-wrapper/run.js +++ b/packages/cli/assets/cdk-wrapper/run.js @@ -35,6 +35,7 @@ handler.default( stage: config.stage, region: config.region, }, + {}, { appPath, debugEndpoint: config.debugEndpoint, diff --git a/packages/cli/test/add-cdk/add-cdk.test.js b/packages/cli/test/add-cdk/add-cdk.test.js index f8661dd051..2e30a4bb8d 100644 --- a/packages/cli/test/add-cdk/add-cdk.test.js +++ b/packages/cli/test/add-cdk/add-cdk.test.js @@ -18,6 +18,6 @@ test("add-cdk", async () => { ); expect(result).toMatch( - /yarn add --exact @aws-cdk\/aws-s3@\d+.\d+.\d+ @aws-cdk\/aws-iam@\d+.\d+.\d+/ + /npm install --save-exact @aws-cdk\/aws-s3@\d+.\d+.\d+ @aws-cdk\/aws-iam@\d+.\d+.\d+/ ); }); diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index a4be7b3346..3c966f35df 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -1,13 +1,14 @@ { "name": "add-cdk", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "add-cdk": "../../bin/scripts.js add-cdk" + "postinstall": "node ../helpers/copy-symlinks.js", + "add-cdk": "sst add-cdk" + }, + "dependencies": { + "@serverless-stack/cli": "^1.0.0-alpha.5" }, - "keywords": [], - "author": "", - "dependencies": {}, "license": "ISC" } diff --git a/packages/cli/test/add-cdk/yarn.lock b/packages/cli/test/add-cdk/yarn.lock deleted file mode 100644 index fb57ccd13a..0000000000 --- a/packages/cli/test/add-cdk/yarn.lock +++ /dev/null @@ -1,4 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index ec313590d0..0d7a2be90f 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -1,17 +1,21 @@ { "name": "base-ts", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "build": "../../bin/scripts.js build" + "postinstall": "node ../helpers/copy-symlinks.js", + "start": "sst start", + "build": "sst build", + "deploy": "sst deploy", + "remove": "sst remove", + "cdk": "sst cdk" }, - "keywords": [], - "author": "", "dependencies": { "@aws-cdk/aws-s3": "1.74.0", "@aws-cdk/core": "1.74.0", - "@serverless-stack/resources": "../../../resources" + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/base-ts/yarn.lock b/packages/cli/test/base-ts/yarn.lock deleted file mode 100644 index 2f257a7d82..0000000000 --- a/packages/cli/test/base-ts/yarn.lock +++ /dev/null @@ -1,500 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-cdk/assert@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.74.0.tgz#82795a3bb21ede93288a60322804f6f4e2d4959e" - integrity sha512-5M3M4lcSS2dGPgVANhv5GjqC6nNBy9bL1XECAJj3lg7q+6zJ00+0wq4bB0wyvm/mE+S0axkGZ4LVHF5QA2gCfQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/cloudformation-diff" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/assets@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.74.0.tgz#8aea948a32afcf7c60449346a087c4b5aecff251" - integrity sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ== - dependencies: - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-applicationautoscaling@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz#ad5e946e68bd4094c3236e983d36f67d66135dfc" - integrity sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-autoscaling-common@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz#f6bcbb987830f299b6e2ef454944afdde9a8a82e" - integrity sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-cloudwatch@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz#94a29d2998a5c08412084b346d404b3a8b90f8a8" - integrity sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-codeguruprofiler@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz#d749688e9edb252ce6fc68efa4f9977f7ba02cb6" - integrity sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-ec2@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz#eae31df9045ca9374daf6b1562674e31d8053aff" - integrity sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/aws-ssm" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-efs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz#367b89f14ccd090f98227dbc975076571b31faac" - integrity sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA== - dependencies: - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-events@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz#2ed5a4cdd737ce4c8950506df496d0b43ac6aa12" - integrity sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-iam@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz#c255c9676fb6048ab27c00d111ed5e7d8b46877c" - integrity sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA== - dependencies: - "@aws-cdk/core" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-kms@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz#73531f7b5d2542eb5e3f7bb54604944921e34995" - integrity sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-lambda-nodejs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.74.0.tgz#aa818270e4dcd74be51d402cdb114da311b3c966" - integrity sha512-1mc8I+Yz43El8O8SjsfkABsI31tcpO5e3fAz7/40DKuFgM9jkL6vyiL55MLIckAqmE2N9mRYU0xF4RC7uRZdmQ== - dependencies: - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-lambda@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz#52175fbc9e679ca5c0f4d15e0666c99fc4a953d0" - integrity sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-codeguruprofiler" "1.74.0" - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-efs" "1.74.0" - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/aws-sqs" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-logs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz#cd40afe70ffeb5250ecea1db0ee0a2f68fb2084a" - integrity sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-s3-assets@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz#7f1988f3931e95d88a8c1357f98c47f7f9b73dee" - integrity sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg== - dependencies: - "@aws-cdk/assets" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-s3@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz#5b53839c3af0f67bfb1e96061f6a1ea5be445fe9" - integrity sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q== - dependencies: - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-sqs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz#998da5838d4310805432f0cf55fcc7c8f34657e2" - integrity sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-ssm@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz#426dd65c0b933618d5c196cb38386c1035b0fdc4" - integrity sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/cfnspec@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.74.0.tgz#03577e266721fe87287f9fc710a95d7b7e5886cd" - integrity sha512-9rdFgRUoV3lbAD6lnU+hGdkit8ILmUq+XCXzRdc9xWHUXIKxMmFK9frXTT+wGmjgdz/GpPyfSbFjzyqk4QE5+w== - dependencies: - md5 "^2.3.0" - -"@aws-cdk/cloud-assembly-schema@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz#f1bbd8411ec320dd9e14ef2dce626a05019c42bc" - integrity sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw== - dependencies: - jsonschema "^1.4.0" - semver "^7.3.2" - -"@aws-cdk/cloudformation-diff@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.74.0.tgz#d86199db530f9df641cff7f3996939c47645d59f" - integrity sha512-aYAg85fkpX39euUo5HjsGtqOpyD5fAz1+jZ/F/5erA8Y/+rB4ifCVJH0cLYHVdYwo8oc3poB6jW4tVMxNYxbrg== - dependencies: - "@aws-cdk/cfnspec" "1.74.0" - colors "^1.4.0" - diff "^5.0.0" - fast-deep-equal "^3.1.3" - string-width "^4.2.0" - table "^6.0.3" - -"@aws-cdk/core@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.74.0.tgz#132d31c0ab9d39394827431ccd804cf10de34273" - integrity sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - "@balena/dockerignore" "^1.0.2" - constructs "^3.2.0" - fs-extra "^9.0.1" - ignore "^5.1.8" - minimatch "^3.0.4" - -"@aws-cdk/cx-api@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz#922c11389d723eadef2bc12666ced4980fe9e4cc" - integrity sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - semver "^7.3.2" - -"@aws-cdk/region-info@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.74.0.tgz#e53eabe2d8980c360e63ea956615253551005182" - integrity sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA== - -"@balena/dockerignore@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" - integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== - -"@serverless-stack/resources@../../../resources": - version "0.4.3" - dependencies: - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-lambda-nodejs" "1.74.0" - "@aws-cdk/core" "1.74.0" - -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^4.0.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" - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -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== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -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" - -charenc@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= - -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== - -colors@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -constructs@^3.2.0: - version "3.2.40" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.40.tgz#e8c0e1020ad254ff73d9ea6c85cc90c3a33c71f1" - integrity sha512-XtKn+Pzq8EZNe1zasQem6X09dprZ8pXvNxECKQLZC+jU5BdkgDKe0nak4Wp+k7uvDFlyh9NccaGtxqP6w2YS0A== - -crypt@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= - -diff@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -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== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - 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-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -ignore@^5.1.8: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -is-buffer@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -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== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonschema@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" - integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== - -lodash@^4.17.20: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== - -md5@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" - integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== - dependencies: - charenc "0.0.2" - crypt "0.0.2" - is-buffer "~1.1.6" - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -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== - -semver@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -table@^6.0.3: - version "6.0.4" - resolved "https://registry.yarnpkg.com/table/-/table-6.0.4.tgz#c523dd182177e926c723eb20e1b341238188aa0d" - integrity sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw== - dependencies: - ajv "^6.12.4" - lodash "^4.17.20" - slice-ansi "^4.0.0" - string-width "^4.2.0" - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index 1eb5d1dff1..9974356da6 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -1,15 +1,15 @@ { "name": "cdk-command", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "cdk": "../../bin/scripts.js cdk" + "postinstall": "node ../helpers/copy-symlinks.js", + "cdk": "sst cdk" }, - "keywords": [], - "author": "", "dependencies": { - "@serverless-stack/resources": "../../../resources" + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5" }, "license": "ISC" } diff --git a/packages/cli/test/cdk-command/yarn.lock b/packages/cli/test/cdk-command/yarn.lock deleted file mode 100644 index 4a2a4116c5..0000000000 --- a/packages/cli/test/cdk-command/yarn.lock +++ /dev/null @@ -1,109 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - fs-extra "^9.0.1" - minimatch "^3.0.4" - -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" - -"@serverless-stack/resources@../../../resources": - version "0.1.10" - dependencies: - "@aws-cdk/core" "1.61.0" - -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== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -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" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== - -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -semver@^7.2.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index 62ac3bac5e..7adde81969 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -1,13 +1,15 @@ { "name": "config-invalid", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "build": "../../bin/scripts.js build" + "postinstall": "node ../helpers/copy-symlinks.js", + "build": "sst build" + }, + "dependencies": { + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5" }, - "keywords": [], - "author": "", - "dependencies": {}, "license": "ISC" } diff --git a/packages/cli/test/config-invalid/yarn.lock b/packages/cli/test/config-invalid/yarn.lock deleted file mode 100644 index fb57ccd13a..0000000000 --- a/packages/cli/test/config-invalid/yarn.lock +++ /dev/null @@ -1,4 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index 0f6a33b45d..3b0c44e459 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -1,13 +1,15 @@ { "name": "config-no-name", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "build": "../../bin/scripts.js build" + "postinstall": "node ../helpers/copy-symlinks.js", + "build": "sst build" + }, + "dependencies": { + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5" }, - "keywords": [], - "author": "", - "dependencies": {}, "license": "ISC" } diff --git a/packages/cli/test/config-no-name/yarn.lock b/packages/cli/test/config-no-name/yarn.lock deleted file mode 100644 index fb57ccd13a..0000000000 --- a/packages/cli/test/config-no-name/yarn.lock +++ /dev/null @@ -1,4 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - diff --git a/packages/cli/test/config-no-type/package.json b/packages/cli/test/config-no-type/package.json index b41de9dfca..f3673caa1f 100644 --- a/packages/cli/test/config-no-type/package.json +++ b/packages/cli/test/config-no-type/package.json @@ -1,13 +1,15 @@ { "name": "config-no-type", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "build": "../../bin/scripts.js build" + "postinstall": "node ../helpers/copy-symlinks.js", + "build": "sst build" + }, + "dependencies": { + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5" }, - "keywords": [], - "author": "", - "dependencies": {}, "license": "ISC" } diff --git a/packages/cli/test/config-no-type/yarn.lock b/packages/cli/test/config-no-type/yarn.lock deleted file mode 100644 index fb57ccd13a..0000000000 --- a/packages/cli/test/config-no-type/yarn.lock +++ /dev/null @@ -1,4 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index 5854b66f0a..37bcdf6914 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -1,13 +1,15 @@ { "name": "config-not-found", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "build": "../../bin/scripts.js build" + "postinstall": "node ../helpers/copy-symlinks.js", + "build": "sst build" + }, + "dependencies": { + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5" }, - "keywords": [], - "author": "", - "dependencies": {}, "license": "ISC" } diff --git a/packages/cli/test/config-not-found/yarn.lock b/packages/cli/test/config-not-found/yarn.lock deleted file mode 100644 index fb57ccd13a..0000000000 --- a/packages/cli/test/config-not-found/yarn.lock +++ /dev/null @@ -1,4 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index b945257815..d9c6da7050 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -1,18 +1,16 @@ { "name": "config-test", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "build": "../../bin/scripts.js build", - "deploy": "../../bin/scripts.js deploy", - "remove": "../../bin/scripts.js remove" + "postinstall": "node ../helpers/copy-symlinks.js", + "build": "sst build" }, - "keywords": [], - "author": "", "dependencies": { - "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-dynamodb": "1.74.0" + "@aws-cdk/aws-dynamodb": "1.74.0", + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5" }, "license": "ISC" } diff --git a/packages/cli/test/config/yarn.lock b/packages/cli/test/config/yarn.lock deleted file mode 100644 index a6b35a0548..0000000000 --- a/packages/cli/test/config/yarn.lock +++ /dev/null @@ -1,373 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-cdk/assets@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.74.0.tgz#8aea948a32afcf7c60449346a087c4b5aecff251" - integrity sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ== - dependencies: - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-applicationautoscaling@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz#ad5e946e68bd4094c3236e983d36f67d66135dfc" - integrity sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-autoscaling-common@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz#f6bcbb987830f299b6e2ef454944afdde9a8a82e" - integrity sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-cloudformation@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.74.0.tgz#04fffb02403fb52ee05ec43172b845a29a903a9e" - integrity sha512-VOyuMhoxA9vk3zSUfzqSg1YjYYgc+qyB0bpaOJIW/iinXYXhA64z5YQnTxdwd/exlFgA59chOanA7aRrNM2YIg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-sns" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-cloudwatch@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz#94a29d2998a5c08412084b346d404b3a8b90f8a8" - integrity sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-codeguruprofiler@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz#d749688e9edb252ce6fc68efa4f9977f7ba02cb6" - integrity sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-dynamodb@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.74.0.tgz#7e0ef530e9c3d7301a9db616ddf6d650f7acb76f" - integrity sha512-YU38dFYLMyMe5u2GLy8sFCFTVxwDgWZ67HzFg41kSj8WpAsVQEE5Zxh1nf0+8Ai1J4MNeLeMCaXtuliHipoQSw== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/custom-resources" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-ec2@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz#eae31df9045ca9374daf6b1562674e31d8053aff" - integrity sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/aws-ssm" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-efs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz#367b89f14ccd090f98227dbc975076571b31faac" - integrity sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA== - dependencies: - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-events@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz#2ed5a4cdd737ce4c8950506df496d0b43ac6aa12" - integrity sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-iam@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz#c255c9676fb6048ab27c00d111ed5e7d8b46877c" - integrity sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA== - dependencies: - "@aws-cdk/core" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-kms@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz#73531f7b5d2542eb5e3f7bb54604944921e34995" - integrity sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-lambda-nodejs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.74.0.tgz#aa818270e4dcd74be51d402cdb114da311b3c966" - integrity sha512-1mc8I+Yz43El8O8SjsfkABsI31tcpO5e3fAz7/40DKuFgM9jkL6vyiL55MLIckAqmE2N9mRYU0xF4RC7uRZdmQ== - dependencies: - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-lambda@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz#52175fbc9e679ca5c0f4d15e0666c99fc4a953d0" - integrity sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-codeguruprofiler" "1.74.0" - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-efs" "1.74.0" - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/aws-sqs" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-logs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz#cd40afe70ffeb5250ecea1db0ee0a2f68fb2084a" - integrity sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-s3-assets@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz#7f1988f3931e95d88a8c1357f98c47f7f9b73dee" - integrity sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg== - dependencies: - "@aws-cdk/assets" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-s3@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz#5b53839c3af0f67bfb1e96061f6a1ea5be445fe9" - integrity sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q== - dependencies: - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-sns@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.74.0.tgz#c9289b34cb2512010a0b6813f684c93398502bdd" - integrity sha512-O0HDGvl1WjCTU53auNJKCW5/6vpbVYlj0RwLgGaOOlTeKnfuq53kGvL/t3QdZQlJWxSvkbN61O+rZB7GacXV0g== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-sqs" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-sqs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz#998da5838d4310805432f0cf55fcc7c8f34657e2" - integrity sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-ssm@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz#426dd65c0b933618d5c196cb38386c1035b0fdc4" - integrity sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/cloud-assembly-schema@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz#f1bbd8411ec320dd9e14ef2dce626a05019c42bc" - integrity sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw== - dependencies: - jsonschema "^1.4.0" - semver "^7.3.2" - -"@aws-cdk/core@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.74.0.tgz#132d31c0ab9d39394827431ccd804cf10de34273" - integrity sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - "@balena/dockerignore" "^1.0.2" - constructs "^3.2.0" - fs-extra "^9.0.1" - ignore "^5.1.8" - minimatch "^3.0.4" - -"@aws-cdk/custom-resources@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.74.0.tgz#19329e8a9b9bc0ca66e00c791b008c416a67265f" - integrity sha512-KDXgyRCeCMIj42nQcd2RXc4GYQpd7SWtx2iw0G4Wvs/wG4i3nR1qdlvEJvAlNgsYeqM4pp3mIp3PgdX341HsCg== - dependencies: - "@aws-cdk/aws-cloudformation" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-sns" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/cx-api@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz#922c11389d723eadef2bc12666ced4980fe9e4cc" - integrity sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - semver "^7.3.2" - -"@aws-cdk/region-info@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.74.0.tgz#e53eabe2d8980c360e63ea956615253551005182" - integrity sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA== - -"@balena/dockerignore@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" - integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== - -"@serverless-stack/resources@../../../resources": - version "0.4.3" - dependencies: - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-lambda-nodejs" "1.74.0" - "@aws-cdk/core" "1.74.0" - -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== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -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" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -constructs@^3.2.0: - version "3.2.40" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.40.tgz#e8c0e1020ad254ff73d9ea6c85cc90c3a33c71f1" - integrity sha512-XtKn+Pzq8EZNe1zasQem6X09dprZ8pXvNxECKQLZC+jU5BdkgDKe0nak4Wp+k7uvDFlyh9NccaGtxqP6w2YS0A== - -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -ignore@^5.1.8: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonschema@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" - integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -semver@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index e14beb5728..e1ce87edca 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -1,16 +1,16 @@ { "name": "context", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "build": "../../bin/scripts.js build" + "postinstall": "node ../helpers/copy-symlinks.js", + "build": "sst build" }, - "keywords": [], - "author": "", "dependencies": { - "@serverless-stack/resources": "../../../resources", - "@aws-cdk/aws-dynamodb": "1.74.0" + "@aws-cdk/aws-dynamodb": "1.74.0", + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5" }, "license": "ISC" } diff --git a/packages/cli/test/context/yarn.lock b/packages/cli/test/context/yarn.lock deleted file mode 100644 index a6b35a0548..0000000000 --- a/packages/cli/test/context/yarn.lock +++ /dev/null @@ -1,373 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-cdk/assets@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.74.0.tgz#8aea948a32afcf7c60449346a087c4b5aecff251" - integrity sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ== - dependencies: - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-applicationautoscaling@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz#ad5e946e68bd4094c3236e983d36f67d66135dfc" - integrity sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-autoscaling-common@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz#f6bcbb987830f299b6e2ef454944afdde9a8a82e" - integrity sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-cloudformation@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.74.0.tgz#04fffb02403fb52ee05ec43172b845a29a903a9e" - integrity sha512-VOyuMhoxA9vk3zSUfzqSg1YjYYgc+qyB0bpaOJIW/iinXYXhA64z5YQnTxdwd/exlFgA59chOanA7aRrNM2YIg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-sns" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-cloudwatch@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz#94a29d2998a5c08412084b346d404b3a8b90f8a8" - integrity sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-codeguruprofiler@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz#d749688e9edb252ce6fc68efa4f9977f7ba02cb6" - integrity sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-dynamodb@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.74.0.tgz#7e0ef530e9c3d7301a9db616ddf6d650f7acb76f" - integrity sha512-YU38dFYLMyMe5u2GLy8sFCFTVxwDgWZ67HzFg41kSj8WpAsVQEE5Zxh1nf0+8Ai1J4MNeLeMCaXtuliHipoQSw== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/custom-resources" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-ec2@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz#eae31df9045ca9374daf6b1562674e31d8053aff" - integrity sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/aws-ssm" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-efs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz#367b89f14ccd090f98227dbc975076571b31faac" - integrity sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA== - dependencies: - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-events@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz#2ed5a4cdd737ce4c8950506df496d0b43ac6aa12" - integrity sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-iam@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz#c255c9676fb6048ab27c00d111ed5e7d8b46877c" - integrity sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA== - dependencies: - "@aws-cdk/core" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-kms@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz#73531f7b5d2542eb5e3f7bb54604944921e34995" - integrity sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-lambda-nodejs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.74.0.tgz#aa818270e4dcd74be51d402cdb114da311b3c966" - integrity sha512-1mc8I+Yz43El8O8SjsfkABsI31tcpO5e3fAz7/40DKuFgM9jkL6vyiL55MLIckAqmE2N9mRYU0xF4RC7uRZdmQ== - dependencies: - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-lambda@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz#52175fbc9e679ca5c0f4d15e0666c99fc4a953d0" - integrity sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-codeguruprofiler" "1.74.0" - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-efs" "1.74.0" - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/aws-sqs" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-logs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz#cd40afe70ffeb5250ecea1db0ee0a2f68fb2084a" - integrity sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-s3-assets@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz#7f1988f3931e95d88a8c1357f98c47f7f9b73dee" - integrity sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg== - dependencies: - "@aws-cdk/assets" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-s3@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz#5b53839c3af0f67bfb1e96061f6a1ea5be445fe9" - integrity sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q== - dependencies: - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-sns@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.74.0.tgz#c9289b34cb2512010a0b6813f684c93398502bdd" - integrity sha512-O0HDGvl1WjCTU53auNJKCW5/6vpbVYlj0RwLgGaOOlTeKnfuq53kGvL/t3QdZQlJWxSvkbN61O+rZB7GacXV0g== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-sqs" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-sqs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz#998da5838d4310805432f0cf55fcc7c8f34657e2" - integrity sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-ssm@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz#426dd65c0b933618d5c196cb38386c1035b0fdc4" - integrity sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/cloud-assembly-schema@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz#f1bbd8411ec320dd9e14ef2dce626a05019c42bc" - integrity sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw== - dependencies: - jsonschema "^1.4.0" - semver "^7.3.2" - -"@aws-cdk/core@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.74.0.tgz#132d31c0ab9d39394827431ccd804cf10de34273" - integrity sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - "@balena/dockerignore" "^1.0.2" - constructs "^3.2.0" - fs-extra "^9.0.1" - ignore "^5.1.8" - minimatch "^3.0.4" - -"@aws-cdk/custom-resources@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.74.0.tgz#19329e8a9b9bc0ca66e00c791b008c416a67265f" - integrity sha512-KDXgyRCeCMIj42nQcd2RXc4GYQpd7SWtx2iw0G4Wvs/wG4i3nR1qdlvEJvAlNgsYeqM4pp3mIp3PgdX341HsCg== - dependencies: - "@aws-cdk/aws-cloudformation" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-sns" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/cx-api@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz#922c11389d723eadef2bc12666ced4980fe9e4cc" - integrity sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - semver "^7.3.2" - -"@aws-cdk/region-info@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.74.0.tgz#e53eabe2d8980c360e63ea956615253551005182" - integrity sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA== - -"@balena/dockerignore@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" - integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== - -"@serverless-stack/resources@../../../resources": - version "0.4.3" - dependencies: - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-lambda-nodejs" "1.74.0" - "@aws-cdk/core" "1.74.0" - -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== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -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" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -constructs@^3.2.0: - version "3.2.40" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.40.tgz#e8c0e1020ad254ff73d9ea6c85cc90c3a33c71f1" - integrity sha512-XtKn+Pzq8EZNe1zasQem6X09dprZ8pXvNxECKQLZC+jU5BdkgDKe0nak4Wp+k7uvDFlyh9NccaGtxqP6w2YS0A== - -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -ignore@^5.1.8: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonschema@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" - integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -semver@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index 088de2133a..ea3e0a49b8 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -1,15 +1,15 @@ { "name": "eslint-ignore-rule", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "build": "../../bin/scripts.js build" + "postinstall": "node ../helpers/copy-symlinks.js", + "build": "sst build" }, - "keywords": [], - "author": "", "dependencies": { - "@serverless-stack/resources": "../../../resources" + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore-rule/yarn.lock b/packages/cli/test/eslint-ignore-rule/yarn.lock deleted file mode 100644 index 4a2a4116c5..0000000000 --- a/packages/cli/test/eslint-ignore-rule/yarn.lock +++ /dev/null @@ -1,109 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - fs-extra "^9.0.1" - minimatch "^3.0.4" - -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" - -"@serverless-stack/resources@../../../resources": - version "0.1.10" - dependencies: - "@aws-cdk/core" "1.61.0" - -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== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -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" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== - -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -semver@^7.2.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index 1a528a22a4..e312ede97d 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -1,15 +1,15 @@ { "name": "eslint-ignore", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "build": "../../bin/scripts.js build" + "postinstall": "node ../helpers/copy-symlinks.js", + "build": "sst build" }, - "keywords": [], - "author": "", "dependencies": { - "@serverless-stack/resources": "../../../resources" + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore/yarn.lock b/packages/cli/test/eslint-ignore/yarn.lock deleted file mode 100644 index 4a2a4116c5..0000000000 --- a/packages/cli/test/eslint-ignore/yarn.lock +++ /dev/null @@ -1,109 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - fs-extra "^9.0.1" - minimatch "^3.0.4" - -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" - -"@serverless-stack/resources@../../../resources": - version "0.1.10" - dependencies: - "@aws-cdk/core" "1.61.0" - -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== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -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" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== - -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -semver@^7.2.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index bc61b90df9..c89068a063 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -1,15 +1,15 @@ { "name": "eslint-ts", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "build": "../../bin/scripts.js build" + "postinstall": "node ../helpers/copy-symlinks.js", + "build": "sst build" }, - "keywords": [], - "author": "", "dependencies": { - "@serverless-stack/resources": "../../../resources" + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ts/yarn.lock b/packages/cli/test/eslint-ts/yarn.lock deleted file mode 100644 index 4a2a4116c5..0000000000 --- a/packages/cli/test/eslint-ts/yarn.lock +++ /dev/null @@ -1,109 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - fs-extra "^9.0.1" - minimatch "^3.0.4" - -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" - -"@serverless-stack/resources@../../../resources": - version "0.1.10" - dependencies: - "@aws-cdk/core" "1.61.0" - -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== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -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" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== - -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -semver@^7.2.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index 5b94b30ab5..c814d95b65 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -1,15 +1,15 @@ { "name": "eslint", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "build": "../../bin/scripts.js build" + "postinstall": "node ../helpers/copy-symlinks.js", + "build": "sst build" }, - "keywords": [], - "author": "", "dependencies": { - "@serverless-stack/resources": "../../../resources" + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5" }, "license": "ISC" } diff --git a/packages/cli/test/eslint/yarn.lock b/packages/cli/test/eslint/yarn.lock deleted file mode 100644 index 4a2a4116c5..0000000000 --- a/packages/cli/test/eslint/yarn.lock +++ /dev/null @@ -1,109 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - fs-extra "^9.0.1" - minimatch "^3.0.4" - -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" - -"@serverless-stack/resources@../../../resources": - version "0.1.10" - dependencies: - "@aws-cdk/core" "1.61.0" - -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== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -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" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== - -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -semver@^7.2.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index f5f365e74c..d091620349 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -1,13 +1,15 @@ { "name": "handler-function-not-found", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "build": "../../bin/scripts.js build" + "postinstall": "node ../helpers/copy-symlinks.js", + "build": "sst build" + }, + "dependencies": { + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5" }, - "keywords": [], - "author": "", - "dependencies": {}, "license": "ISC" } diff --git a/packages/cli/test/handler-function-not-found/yarn.lock b/packages/cli/test/handler-function-not-found/yarn.lock deleted file mode 100644 index fb57ccd13a..0000000000 --- a/packages/cli/test/handler-function-not-found/yarn.lock +++ /dev/null @@ -1,4 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index b6b1131632..44e5371b91 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -1,13 +1,15 @@ { "name": "handler-not-found", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "build": "../../bin/scripts.js build" + "postinstall": "node ../helpers/copy-symlinks.js", + "build": "sst build" + }, + "dependencies": { + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5" }, - "keywords": [], - "author": "", - "dependencies": {}, "license": "ISC" } diff --git a/packages/cli/test/handler-not-found/yarn.lock b/packages/cli/test/handler-not-found/yarn.lock deleted file mode 100644 index fb57ccd13a..0000000000 --- a/packages/cli/test/handler-not-found/yarn.lock +++ /dev/null @@ -1,4 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - diff --git a/packages/cli/test/helpers/copy-symlinks.js b/packages/cli/test/helpers/copy-symlinks.js index e5fac195b0..7dc23797a1 100644 --- a/packages/cli/test/helpers/copy-symlinks.js +++ b/packages/cli/test/helpers/copy-symlinks.js @@ -10,6 +10,12 @@ const path = require("path"); const rootBin = path.join(__dirname, "../../../../node_modules", ".bin"); +const appBin = path.join("node_modules", ".bin"); + +if (!fs.existsSync(appBin)) { + fs.mkdirSync(appBin); +} + const files = fs.readdirSync(rootBin, { encoding: "utf8", withFileTypes: true, @@ -22,10 +28,10 @@ files.forEach((file) => { const fullPath = path.join(rootBin, relPath); try { - fs.symlinkSync(fullPath, path.join("node_modules", ".bin", name)); + fs.symlinkSync(fullPath, path.join(appBin, name)); } catch (e) { if (e.code !== "EEXIST") { - throw e; + console.log(`Failed to copy symlink ${name}`); } } } diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index 765f96db0a..c41dfe12e5 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -1,30 +1,31 @@ { "name": "jest-ts", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "build": "../../bin/scripts.js build", - "test": "../../bin/scripts.js test" + "postinstall": "node ../helpers/copy-symlinks.js", + "build": "sst build", + "test": "sst test" }, "jest": { "testPathIgnorePatterns": [ "./jest-ts.test.js" ] }, - "keywords": [], - "author": "", "dependencies": { - "@serverless-stack/cli": "../../../cli", - "@serverless-stack/resources": "../../../resources", "@aws-cdk/aws-dynamodb": "1.74.0", "@aws-cdk/aws-sns": "1.74.0", "@aws-cdk/aws-sns-subscriptions": "1.74.0", "@aws-cdk/aws-sqs": "1.74.0", - "@aws-cdk/core": "1.74.0" + "@aws-cdk/core": "1.74.0", + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5" }, "license": "ISC", "devDependencies": { - "@aws-cdk/assert": "1.74.0" + "@aws-cdk/assert": "1.74.0", + "@types/jest": "^26.0.19", + "@types/node": "^14.14.19" } } diff --git a/packages/cli/test/jest-ts/yarn.lock b/packages/cli/test/jest-ts/yarn.lock deleted file mode 100644 index f98b9069a3..0000000000 --- a/packages/cli/test/jest-ts/yarn.lock +++ /dev/null @@ -1,6628 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-cdk/assert@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.74.0.tgz#82795a3bb21ede93288a60322804f6f4e2d4959e" - integrity sha512-5M3M4lcSS2dGPgVANhv5GjqC6nNBy9bL1XECAJj3lg7q+6zJ00+0wq4bB0wyvm/mE+S0axkGZ4LVHF5QA2gCfQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/cloudformation-diff" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/assets@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.74.0.tgz#8aea948a32afcf7c60449346a087c4b5aecff251" - integrity sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ== - dependencies: - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-apigatewayv2@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.74.0.tgz#c65c94e25b70fcee53a3e15e211f74819eff4d77" - integrity sha512-Z8GRXYZX6MHZeyKQpiiCUvtxIKh6y9UGRM9f6+xfjMa75WwjoM8cFm9h41720LwKcUXYj0TlKiqEyeL12UIAYA== - dependencies: - "@aws-cdk/aws-certificatemanager" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-applicationautoscaling@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz#ad5e946e68bd4094c3236e983d36f67d66135dfc" - integrity sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-autoscaling-common@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz#f6bcbb987830f299b6e2ef454944afdde9a8a82e" - integrity sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-certificatemanager@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.74.0.tgz#35b07c4b396a3db96da5d431e549460d1edc2251" - integrity sha512-Ve1SYM6qpUysHLD5bzHiE4kXBeo7VAEQlUti0cjkkjkuPh+dKHti/TqYhA0tkfUIMjZylnvkogBzMYdIUBTNxg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-route53" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-cloudformation@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.74.0.tgz#04fffb02403fb52ee05ec43172b845a29a903a9e" - integrity sha512-VOyuMhoxA9vk3zSUfzqSg1YjYYgc+qyB0bpaOJIW/iinXYXhA64z5YQnTxdwd/exlFgA59chOanA7aRrNM2YIg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-sns" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-cloudwatch@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz#94a29d2998a5c08412084b346d404b3a8b90f8a8" - integrity sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-codeguruprofiler@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz#d749688e9edb252ce6fc68efa4f9977f7ba02cb6" - integrity sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-dynamodb@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.74.0.tgz#7e0ef530e9c3d7301a9db616ddf6d650f7acb76f" - integrity sha512-YU38dFYLMyMe5u2GLy8sFCFTVxwDgWZ67HzFg41kSj8WpAsVQEE5Zxh1nf0+8Ai1J4MNeLeMCaXtuliHipoQSw== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/custom-resources" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-ec2@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz#eae31df9045ca9374daf6b1562674e31d8053aff" - integrity sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/aws-ssm" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-efs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz#367b89f14ccd090f98227dbc975076571b31faac" - integrity sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA== - dependencies: - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-events@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz#2ed5a4cdd737ce4c8950506df496d0b43ac6aa12" - integrity sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-iam@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz#c255c9676fb6048ab27c00d111ed5e7d8b46877c" - integrity sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA== - dependencies: - "@aws-cdk/core" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-kms@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz#73531f7b5d2542eb5e3f7bb54604944921e34995" - integrity sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-lambda-nodejs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.74.0.tgz#aa818270e4dcd74be51d402cdb114da311b3c966" - integrity sha512-1mc8I+Yz43El8O8SjsfkABsI31tcpO5e3fAz7/40DKuFgM9jkL6vyiL55MLIckAqmE2N9mRYU0xF4RC7uRZdmQ== - dependencies: - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-lambda@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz#52175fbc9e679ca5c0f4d15e0666c99fc4a953d0" - integrity sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-codeguruprofiler" "1.74.0" - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-efs" "1.74.0" - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/aws-sqs" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-logs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz#cd40afe70ffeb5250ecea1db0ee0a2f68fb2084a" - integrity sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-route53@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.74.0.tgz#f9b3c770cf613227bba31c4a7499c8f19966f3e4" - integrity sha512-TYnAByXLc6B/uAG03bYLV0kPi1TU8G95kW6wNhfiqvPCSwfizbsg5rztbUoydJpBocbOs9qbtCM7v6gbDsB2bQ== - dependencies: - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-s3-assets@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz#7f1988f3931e95d88a8c1357f98c47f7f9b73dee" - integrity sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg== - dependencies: - "@aws-cdk/assets" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-s3@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz#5b53839c3af0f67bfb1e96061f6a1ea5be445fe9" - integrity sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q== - dependencies: - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-sns-subscriptions@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.74.0.tgz#6cdad4a409359122e8a410543e33da59d21b54cc" - integrity sha512-MOuArbCx1nxL5B40RMQzHNnU0SZWkaQfRDTURTQbX4e0OHyq5DnQrtXTu/XyI/MYPBU+ZnC/FXP+hynCatn+nw== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-sns" "1.74.0" - "@aws-cdk/aws-sqs" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-sns@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.74.0.tgz#c9289b34cb2512010a0b6813f684c93398502bdd" - integrity sha512-O0HDGvl1WjCTU53auNJKCW5/6vpbVYlj0RwLgGaOOlTeKnfuq53kGvL/t3QdZQlJWxSvkbN61O+rZB7GacXV0g== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-sqs" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-sqs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz#998da5838d4310805432f0cf55fcc7c8f34657e2" - integrity sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-ssm@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz#426dd65c0b933618d5c196cb38386c1035b0fdc4" - integrity sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/cfnspec@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.61.0.tgz#69e998ab83c0a478b76e1c5deb8484171dfd95f9" - integrity sha512-Ss5N3unY6iVh9SjYAYvTyvhdb7Kaz6dVFeV8K68UGewiFcHpC5tQi3YmlVBw3HCgKoRt20emiHAfmdfeGO/PUQ== - dependencies: - md5 "^2.3.0" - -"@aws-cdk/cfnspec@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.74.0.tgz#03577e266721fe87287f9fc710a95d7b7e5886cd" - integrity sha512-9rdFgRUoV3lbAD6lnU+hGdkit8ILmUq+XCXzRdc9xWHUXIKxMmFK9frXTT+wGmjgdz/GpPyfSbFjzyqk4QE5+w== - dependencies: - md5 "^2.3.0" - -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/cloud-assembly-schema@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz#f1bbd8411ec320dd9e14ef2dce626a05019c42bc" - integrity sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw== - dependencies: - jsonschema "^1.4.0" - semver "^7.3.2" - -"@aws-cdk/cloudformation-diff@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.61.0.tgz#8acb549fd1dd819aa61dfed47e011b44827045a8" - integrity sha512-TrrmywhYkXxGNTmDd1k2biJMVtEvb0QcbZ/IGM6biMXIJ+wsjw/n5snvwciQ8/PHZmsUYk67qulGdso1rpy06Q== - dependencies: - "@aws-cdk/cfnspec" "1.61.0" - colors "^1.4.0" - diff "^4.0.2" - fast-deep-equal "^3.1.3" - string-width "^4.2.0" - table "^5.4.6" - -"@aws-cdk/cloudformation-diff@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.74.0.tgz#d86199db530f9df641cff7f3996939c47645d59f" - integrity sha512-aYAg85fkpX39euUo5HjsGtqOpyD5fAz1+jZ/F/5erA8Y/+rB4ifCVJH0cLYHVdYwo8oc3poB6jW4tVMxNYxbrg== - dependencies: - "@aws-cdk/cfnspec" "1.74.0" - colors "^1.4.0" - diff "^5.0.0" - fast-deep-equal "^3.1.3" - string-width "^4.2.0" - table "^6.0.3" - -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - fs-extra "^9.0.1" - minimatch "^3.0.4" - -"@aws-cdk/core@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.74.0.tgz#132d31c0ab9d39394827431ccd804cf10de34273" - integrity sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - "@balena/dockerignore" "^1.0.2" - constructs "^3.2.0" - fs-extra "^9.0.1" - ignore "^5.1.8" - minimatch "^3.0.4" - -"@aws-cdk/custom-resources@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.74.0.tgz#19329e8a9b9bc0ca66e00c791b008c416a67265f" - integrity sha512-KDXgyRCeCMIj42nQcd2RXc4GYQpd7SWtx2iw0G4Wvs/wG4i3nR1qdlvEJvAlNgsYeqM4pp3mIp3PgdX341HsCg== - dependencies: - "@aws-cdk/aws-cloudformation" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-sns" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" - -"@aws-cdk/cx-api@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz#922c11389d723eadef2bc12666ced4980fe9e4cc" - integrity sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - semver "^7.3.2" - -"@aws-cdk/region-info@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.61.0.tgz#663e44206a92da544183c3a405cd73490fdc3103" - integrity sha512-/10gvecycNJhYM2LIkA0XaoWgUZQ6K5FIIRaf/o4PbgHyR8WTyEPO6lbT0GoKi69TvC+18xzJ4iZ1p3ZdRnUYw== - -"@aws-cdk/region-info@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.74.0.tgz#e53eabe2d8980c360e63ea956615253551005182" - integrity sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA== - -"@aws-cdk/yaml-cfn@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/yaml-cfn/-/yaml-cfn-1.74.0.tgz#ea66da39391acf4d2f385845bb1c3466779bb90c" - integrity sha512-fJyS9apCC6lk3MHramd8Kjz4UwGWqM5gDRBci68Vs/nfXcpXY2ekHGjUMUfcel7VPobNKWszxWAMxXttAHa1zg== - dependencies: - yaml "1.10.0" - -"@babel/cli@^7.10.5": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.5.tgz#57df2987c8cf89d0fc7d4b157ec59d7619f1b77a" - integrity sha512-j9H9qSf3kLdM0Ao3aGPbGZ73mEA9XazuupcS6cDGWuiyAcANoguhP0r2Lx32H5JGw4sSSoHG3x/mxVnHgvOoyA== - dependencies: - commander "^4.0.1" - convert-source-map "^1.1.0" - fs-readdir-recursive "^1.1.0" - glob "^7.0.0" - lodash "^4.17.19" - make-dir "^2.1.0" - slash "^2.0.0" - source-map "^0.5.0" - optionalDependencies: - chokidar "^2.1.8" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" - integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ== - dependencies: - browserslist "^4.12.0" - invariant "^2.2.4" - semver "^5.5.0" - -"@babel/core@^7.1.0", "@babel/core@^7.10.5", "@babel/core@^7.7.5": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.1.tgz#2c55b604e73a40dc21b0e52650b11c65cf276643" - integrity sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.0" - "@babel/helper-module-transforms" "^7.11.0" - "@babel/helpers" "^7.10.4" - "@babel/parser" "^7.11.1" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.11.0" - "@babel/types" "^7.11.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/eslint-parser@^7.11.3": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.11.5.tgz#398192b8d1cd3678efb709f5ab09d9aa2a2218fd" - integrity sha512-DZ3maD3ciwRg1pOzEpJ1outlV1DA/A8XHDQoyL69fC3RIJMlMq1UPudgfRkW0YFqmQPR6OPvu8chaT7Yq2Mm8A== - dependencies: - eslint-scope "5.1.0" - eslint-visitor-keys "^1.3.0" - semver "^6.3.0" - -"@babel/eslint-plugin@^7.11.3": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/eslint-plugin/-/eslint-plugin-7.11.5.tgz#651fed485493cee8ae803d6a22e3b4f21315f328" - integrity sha512-klliWjB6CeMeqZ7IeJporPr7raD3Ttc8MF9HPNyTvddmBB9Bg7gbiN43rZvaqvsYiktPQLHZrD/Of7vtl6EYpw== - dependencies: - eslint-rule-composer "^0.3.0" - -"@babel/generator@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.0.tgz#4b90c78d8c12825024568cbe83ee6c9af193585c" - integrity sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ== - dependencies: - "@babel/types" "^7.11.0" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" - integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" - integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-compilation-targets@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" - integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== - dependencies: - "@babel/compat-data" "^7.10.4" - browserslist "^4.12.0" - invariant "^2.2.4" - levenary "^1.1.1" - semver "^5.5.0" - -"@babel/helper-create-class-features-plugin@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" - integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-member-expression-to-functions" "^7.10.5" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" - -"@babel/helper-create-regexp-features-plugin@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" - integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-regex" "^7.10.4" - regexpu-core "^4.7.0" - -"@babel/helper-define-map@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" - integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/types" "^7.10.5" - lodash "^4.17.19" - -"@babel/helper-explode-assignable-expression@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c" - integrity sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A== - dependencies: - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" - integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== - dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-get-function-arity@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" - integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-hoist-variables@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" - integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" - integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== - dependencies: - "@babel/types" "^7.11.0" - -"@babel/helper-module-imports@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" - integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" - integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-simple-access" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/template" "^7.10.4" - "@babel/types" "^7.11.0" - lodash "^4.17.19" - -"@babel/helper-optimise-call-expression@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" - integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" - integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== - -"@babel/helper-regex@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" - integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== - dependencies: - lodash "^4.17.19" - -"@babel/helper-remap-async-to-generator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz#fce8bea4e9690bbe923056ded21e54b4e8b68ed5" - integrity sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-wrap-function" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-replace-supers@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" - integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.10.4" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-simple-access@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" - integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== - dependencies: - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-skip-transparent-expression-wrappers@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" - integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q== - dependencies: - "@babel/types" "^7.11.0" - -"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" - integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== - dependencies: - "@babel/types" "^7.11.0" - -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== - -"@babel/helper-wrap-function@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" - integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helpers@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" - integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== - dependencies: - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.0", "@babel/parser@^7.11.1": - version "7.11.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.3.tgz#9e1eae46738bcd08e23e867bab43e7b95299a8f9" - integrity sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA== - -"@babel/plugin-proposal-async-generator-functions@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" - integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-remap-async-to-generator" "^7.10.4" - "@babel/plugin-syntax-async-generators" "^7.8.0" - -"@babel/plugin-proposal-class-properties@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" - integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-proposal-dynamic-import@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" - integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - -"@babel/plugin-proposal-export-namespace-from@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" - integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" - integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.0" - -"@babel/plugin-proposal-logical-assignment-operators@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8" - integrity sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" - integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - -"@babel/plugin-proposal-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" - integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" - integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.10.4" - -"@babel/plugin-proposal-optional-catch-binding@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" - integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - -"@babel/plugin-proposal-optional-chaining@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" - integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - -"@babel/plugin-proposal-private-methods@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" - integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" - integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.10.4", "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" - integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-dynamic-import@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-top-level-await@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" - integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-arrow-functions@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" - integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-async-to-generator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" - integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-remap-async-to-generator" "^7.10.4" - -"@babel/plugin-transform-block-scoped-functions@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" - integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-block-scoping@^7.10.4": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" - integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-classes@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" - integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-define-map" "^7.10.4" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" - integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-destructuring@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" - integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" - integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-duplicate-keys@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" - integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-exponentiation-operator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" - integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-for-of@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" - integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" - integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-literals@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" - integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" - integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-modules-amd@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" - integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== - dependencies: - "@babel/helper-module-transforms" "^7.10.5" - "@babel/helper-plugin-utils" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" - integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== - dependencies: - "@babel/helper-module-transforms" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-simple-access" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" - integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== - dependencies: - "@babel/helper-hoist-variables" "^7.10.4" - "@babel/helper-module-transforms" "^7.10.5" - "@babel/helper-plugin-utils" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" - integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== - dependencies: - "@babel/helper-module-transforms" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" - integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - -"@babel/plugin-transform-new-target@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" - integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-object-super@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" - integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - -"@babel/plugin-transform-parameters@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" - integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== - dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-property-literals@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" - integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-regenerator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" - integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" - integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-shorthand-properties@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" - integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-spread@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" - integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" - -"@babel/plugin-transform-sticky-regex@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" - integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-regex" "^7.10.4" - -"@babel/plugin-transform-template-literals@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" - integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-typeof-symbol@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" - integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-unicode-escapes@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" - integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-unicode-regex@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" - integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/preset-env@^7.10.4": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.0.tgz#860ee38f2ce17ad60480c2021ba9689393efb796" - integrity sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg== - dependencies: - "@babel/compat-data" "^7.11.0" - "@babel/helper-compilation-targets" "^7.10.4" - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-proposal-async-generator-functions" "^7.10.4" - "@babel/plugin-proposal-class-properties" "^7.10.4" - "@babel/plugin-proposal-dynamic-import" "^7.10.4" - "@babel/plugin-proposal-export-namespace-from" "^7.10.4" - "@babel/plugin-proposal-json-strings" "^7.10.4" - "@babel/plugin-proposal-logical-assignment-operators" "^7.11.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" - "@babel/plugin-proposal-numeric-separator" "^7.10.4" - "@babel/plugin-proposal-object-rest-spread" "^7.11.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" - "@babel/plugin-proposal-optional-chaining" "^7.11.0" - "@babel/plugin-proposal-private-methods" "^7.10.4" - "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" - "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-class-properties" "^7.10.4" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.0" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.10.4" - "@babel/plugin-transform-arrow-functions" "^7.10.4" - "@babel/plugin-transform-async-to-generator" "^7.10.4" - "@babel/plugin-transform-block-scoped-functions" "^7.10.4" - "@babel/plugin-transform-block-scoping" "^7.10.4" - "@babel/plugin-transform-classes" "^7.10.4" - "@babel/plugin-transform-computed-properties" "^7.10.4" - "@babel/plugin-transform-destructuring" "^7.10.4" - "@babel/plugin-transform-dotall-regex" "^7.10.4" - "@babel/plugin-transform-duplicate-keys" "^7.10.4" - "@babel/plugin-transform-exponentiation-operator" "^7.10.4" - "@babel/plugin-transform-for-of" "^7.10.4" - "@babel/plugin-transform-function-name" "^7.10.4" - "@babel/plugin-transform-literals" "^7.10.4" - "@babel/plugin-transform-member-expression-literals" "^7.10.4" - "@babel/plugin-transform-modules-amd" "^7.10.4" - "@babel/plugin-transform-modules-commonjs" "^7.10.4" - "@babel/plugin-transform-modules-systemjs" "^7.10.4" - "@babel/plugin-transform-modules-umd" "^7.10.4" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" - "@babel/plugin-transform-new-target" "^7.10.4" - "@babel/plugin-transform-object-super" "^7.10.4" - "@babel/plugin-transform-parameters" "^7.10.4" - "@babel/plugin-transform-property-literals" "^7.10.4" - "@babel/plugin-transform-regenerator" "^7.10.4" - "@babel/plugin-transform-reserved-words" "^7.10.4" - "@babel/plugin-transform-shorthand-properties" "^7.10.4" - "@babel/plugin-transform-spread" "^7.11.0" - "@babel/plugin-transform-sticky-regex" "^7.10.4" - "@babel/plugin-transform-template-literals" "^7.10.4" - "@babel/plugin-transform-typeof-symbol" "^7.10.4" - "@babel/plugin-transform-unicode-escapes" "^7.10.4" - "@babel/plugin-transform-unicode-regex" "^7.10.4" - "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.11.0" - browserslist "^4.12.0" - core-js-compat "^3.6.2" - invariant "^2.2.2" - levenary "^1.1.1" - semver "^5.5.0" - -"@babel/preset-modules@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" - integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/runtime@^7.8.4": - version "7.11.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" - integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.10.4", "@babel/template@^7.3.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" - integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/parser" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.0.tgz#9b996ce1b98f53f7c3e4175115605d56ed07dd24" - integrity sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.0" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.11.0" - "@babel/types" "^7.11.0" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.19" - -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d" - integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - lodash "^4.17.19" - to-fast-properties "^2.0.0" - -"@balena/dockerignore@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" - integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" - integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== - -"@jest/console@^26.2.0": - version "26.2.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.2.0.tgz#d18f2659b90930e7ec3925fb7209f1ba2cf463f0" - integrity sha512-mXQfx3nSLwiHm1i7jbu+uvi+vvpVjNGzIQYLCfsat9rapC+MJkS4zBseNrgJE0vU921b3P67bQzhduphjY3Tig== - dependencies: - "@jest/types" "^26.2.0" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^26.2.0" - jest-util "^26.2.0" - slash "^3.0.0" - -"@jest/core@^26.2.2": - version "26.2.2" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.2.2.tgz#63de01ffce967618003dd7a0164b05c8041b81a9" - integrity sha512-UwA8gNI8aeV4FHGfGAUfO/DHjrFVvlBravF1Tm9Kt6qFE+6YHR47kFhgdepOFpADEKstyO+MVdPvkV6/dyt9sA== - dependencies: - "@jest/console" "^26.2.0" - "@jest/reporters" "^26.2.2" - "@jest/test-result" "^26.2.0" - "@jest/transform" "^26.2.2" - "@jest/types" "^26.2.0" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^26.2.0" - jest-config "^26.2.2" - jest-haste-map "^26.2.2" - jest-message-util "^26.2.0" - jest-regex-util "^26.0.0" - jest-resolve "^26.2.2" - jest-resolve-dependencies "^26.2.2" - jest-runner "^26.2.2" - jest-runtime "^26.2.2" - jest-snapshot "^26.2.2" - jest-util "^26.2.0" - jest-validate "^26.2.0" - jest-watcher "^26.2.0" - micromatch "^4.0.2" - p-each-series "^2.1.0" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^26.2.0": - version "26.2.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.2.0.tgz#f6faee1630fcc2fad208953164bccb31dbe0e45f" - integrity sha512-oCgp9NmEiJ5rbq9VI/v/yYLDpladAAVvFxZgNsnJxOETuzPZ0ZcKKHYjKYwCtPOP1WCrM5nmyuOhMStXFGHn+g== - dependencies: - "@jest/fake-timers" "^26.2.0" - "@jest/types" "^26.2.0" - "@types/node" "*" - jest-mock "^26.2.0" - -"@jest/fake-timers@^26.2.0": - version "26.2.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.2.0.tgz#b485c57dc4c74d61406a339807a9af4bac74b75a" - integrity sha512-45Gfe7YzYTKqTayBrEdAF0qYyAsNRBzfkV0IyVUm3cx7AsCWlnjilBM4T40w7IXT5VspOgMPikQlV0M6gHwy/g== - dependencies: - "@jest/types" "^26.2.0" - "@sinonjs/fake-timers" "^6.0.1" - "@types/node" "*" - jest-message-util "^26.2.0" - jest-mock "^26.2.0" - jest-util "^26.2.0" - -"@jest/globals@^26.2.0": - version "26.2.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.2.0.tgz#ad78f1104f250c1a4bf5184a2ba51facc59b23f6" - integrity sha512-Hoc6ScEIPaym7RNytIL2ILSUWIGKlwEv+JNFof9dGYOdvPjb2evEURSslvCMkNuNg1ECEClTE8PH7ULlMJntYA== - dependencies: - "@jest/environment" "^26.2.0" - "@jest/types" "^26.2.0" - expect "^26.2.0" - -"@jest/reporters@^26.2.2": - version "26.2.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.2.2.tgz#5a8632ab410f4fc57782bc05dcf115e91818e869" - integrity sha512-7854GPbdFTAorWVh+RNHyPO9waRIN6TcvCezKVxI1khvFq9YjINTW7J3WU+tbR038Ynn6WjYred6vtT0YmIWVQ== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.2.0" - "@jest/test-result" "^26.2.0" - "@jest/transform" "^26.2.2" - "@jest/types" "^26.2.0" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^26.2.2" - jest-resolve "^26.2.2" - jest-util "^26.2.0" - jest-worker "^26.2.1" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^4.1.3" - optionalDependencies: - node-notifier "^7.0.0" - -"@jest/source-map@^26.1.0": - version "26.1.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.1.0.tgz#a6a020d00e7d9478f4b690167c5e8b77e63adb26" - integrity sha512-XYRPYx4eEVX15cMT9mstnO7hkHP3krNtKfxUYd8L7gbtia8JvZZ6bMzSwa6IQJENbudTwKMw5R1BePRD+bkEmA== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" - -"@jest/test-result@^26.2.0": - version "26.2.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.2.0.tgz#51c9b165c8851cfcf7a3466019114785e154f76b" - integrity sha512-kgPlmcVafpmfyQEu36HClK+CWI6wIaAWDHNxfQtGuKsgoa2uQAYdlxjMDBEa3CvI40+2U3v36gQF6oZBkoKatw== - dependencies: - "@jest/console" "^26.2.0" - "@jest/types" "^26.2.0" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^26.2.2": - version "26.2.2" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.2.2.tgz#5e8091f2e6c61fdf242af566cb820a4eadc6c4af" - integrity sha512-SliZWon5LNqV/lVXkeowSU6L8++FGOu3f43T01L1Gv6wnFDP00ER0utV9jyK9dVNdXqfMNCN66sfcyar/o7BNw== - dependencies: - "@jest/test-result" "^26.2.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.2.2" - jest-runner "^26.2.2" - jest-runtime "^26.2.2" - -"@jest/transform@^26.2.2": - version "26.2.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.2.2.tgz#86c005c8d5d749ac54d8df53ea58675fffe7a97e" - integrity sha512-c1snhvi5wRVre1XyoO3Eef5SEWpuBCH/cEbntBUd9tI5sNYiBDmO0My/lc5IuuGYKp/HFIHV1eZpSx5yjdkhKw== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^26.2.0" - babel-plugin-istanbul "^6.0.0" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.2.2" - jest-regex-util "^26.0.0" - jest-util "^26.2.0" - micromatch "^4.0.2" - pirates "^4.0.1" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/types@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" - integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" - -"@jest/types@^26.2.0": - version "26.2.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.2.0.tgz#b28ca1fb517a4eb48c0addea7fcd9edc4ab45721" - integrity sha512-lvm3rJvctxd7+wxKSxxbzpDbr4FXDLaC57WEKdUIZ2cjTYuxYSc0zlyD7Z4Uqr5VdKxRUrtwIkiqBuvgf8uKJA== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - -"@serverless-stack/cli@../../../cli": - version "0.4.3" - dependencies: - "@aws-cdk/aws-apigatewayv2" "1.74.0" - "@aws-cdk/aws-dynamodb" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@babel/cli" "^7.10.5" - "@babel/core" "^7.10.5" - "@babel/eslint-parser" "^7.11.3" - "@babel/eslint-plugin" "^7.11.3" - "@babel/plugin-proposal-class-properties" "^7.10.4" - "@babel/preset-env" "^7.10.4" - "@serverless-stack/core" "^0.4.3" - "@serverless-stack/resources" "^0.4.3" - "@types/jest" "^26.0.7" - "@types/node" "^14.0.27" - "@typescript-eslint/eslint-plugin" "^3.9.1" - "@typescript-eslint/parser" "^3.9.1" - aws-cdk "1.74.0" - chalk "^4.1.0" - core-js "^3.6.5" - cross-spawn "^7.0.3" - eslint "^7.7.0" - fs-extra "^9.0.1" - jest "^26.1.0" - source-map-support "^0.5.19" - ts-jest "^26.1.4" - typescript "^3.9.7" - ws "^7.4.0" - yargs "^15.4.1" - -"@serverless-stack/core@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@serverless-stack/core/-/core-0.4.3.tgz#1f9c8b0221c718250dbadd3a7081e2e8fbef28bb" - integrity sha512-R+iUsOKMYFof+nu4O9VhZrNmiJs3ap6sxuKjXfiUwTI6Iy8wCFE5aIb3Wu0EIBmfeVe7vR4PPH9TYjh3kJ4UdA== - dependencies: - aws-sdk "^2.761.0" - chalk "^4.1.0" - sst-cdk "1.61.0-rc.25" - -"@serverless-stack/resources@../../../resources": - version "0.4.3" - dependencies: - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-lambda-nodejs" "1.74.0" - "@aws-cdk/core" "1.74.0" - -"@serverless-stack/resources@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@serverless-stack/resources/-/resources-0.4.3.tgz#1a9143ccedb1e5458d6c3cd32e8be531ee27e4a6" - integrity sha512-cYE2aTHbToj71xZyEbCMH5+5jZEHx2ebL/gA5eEC0JUnlrfCIt6K3buO4nIKvOY01hQD/kS6OLM40x6keV2F3A== - dependencies: - "@aws-cdk/core" "1.61.0" - -"@sinonjs/commons@^1.7.0": - version "1.8.1" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" - integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" - integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== - dependencies: - "@sinonjs/commons" "^1.7.0" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": - version "7.1.9" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d" - integrity sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.1" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04" - integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" - integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.13" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.13.tgz#1874914be974a492e1b4cb00585cabb274e8ba18" - integrity sha512-i+zS7t6/s9cdQvbqKDARrcbrPvtJGlbYsMkazo03nTAK3RX9FNrLllXys22uiTGJapPOTZTQ35nHh4ISph4SLQ== - dependencies: - "@babel/types" "^7.3.0" - -"@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== - -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - -"@types/graceful-fs@^4.1.2": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.3.tgz#039af35fe26bec35003e8d86d2ee9c586354348f" - integrity sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" - integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - -"@types/jest@^26.0.7": - version "26.0.9" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.9.tgz#0543b57da5f0cd949c5f423a00c56c492289c989" - integrity sha512-k4qFfJ5AUKrWok5KYXp2EPm89b0P/KZpl7Vg4XuOTVVQEhLDBDBU3iBFrjjdgd8fLw96aAtmnwhXHl63bWeBQQ== - dependencies: - jest-diff "^25.2.1" - pretty-format "^25.2.1" - -"@types/json-schema@^7.0.3": - version "7.0.5" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" - integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== - -"@types/node@*", "@types/node@^14.0.27": - version "14.0.27" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1" - integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g== - -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== - -"@types/prettier@^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.0.2.tgz#5bb52ee68d0f8efa9cc0099920e56be6cc4e37f3" - integrity sha512-IkVfat549ggtkZUthUzEX49562eGikhSYeVGX97SkMFn+sTZrgRewXjQ4tPKFPCykZHkX1Zfd9OoELGqKU2jJA== - -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== - -"@types/yargs-parser@*": - version "15.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" - integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== - -"@types/yargs@^15.0.0": - version "15.0.5" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79" - integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^3.9.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz#7e061338a1383f59edc204c605899f93dc2e2c8f" - integrity sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ== - dependencies: - "@typescript-eslint/experimental-utils" "3.10.1" - debug "^4.1.1" - functional-red-black-tree "^1.0.1" - regexpp "^3.0.0" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/experimental-utils@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686" - integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/types" "3.10.1" - "@typescript-eslint/typescript-estree" "3.10.1" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/parser@^3.9.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.10.1.tgz#1883858e83e8b442627e1ac6f408925211155467" - integrity sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw== - dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "3.10.1" - "@typescript-eslint/types" "3.10.1" - "@typescript-eslint/typescript-estree" "3.10.1" - eslint-visitor-keys "^1.1.0" - -"@typescript-eslint/types@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" - integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== - -"@typescript-eslint/typescript-estree@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853" - integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w== - dependencies: - "@typescript-eslint/types" "3.10.1" - "@typescript-eslint/visitor-keys" "3.10.1" - debug "^4.1.1" - glob "^7.1.6" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/visitor-keys@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931" - integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ== - dependencies: - eslint-visitor-keys "^1.1.0" - -abab@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.4.tgz#6dfa57b417ca06d21b2478f0e638302f99c2405c" - integrity sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ== - -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-jsx@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" - integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.1.1, acorn@^7.4.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" - integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== - -agent-base@4, agent-base@^4.2.0, agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== - dependencies: - es6-promisify "^5.0.0" - -agent-base@6, agent-base@^6.0.0: - 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" - -agent-base@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== - dependencies: - es6-promisify "^5.0.0" - -ajv@^6.10.0: - version "6.12.4" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" - integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^6.10.2, ajv@^6.12.3: - version "6.12.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" - integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-escapes@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" - integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== - dependencies: - type-fest "^0.11.0" - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== - dependencies: - "@types/color-name" "^1.1.1" - color-convert "^2.0.1" - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -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@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-4.0.2.tgz#43c72865eadb4ddaaa2fb74852527b6a450d927c" - integrity sha512-B9IZjlGwaxF33UN4oPbfBkyA4V1SxNLeIhR1qY8sRXSsbdUkEHrrOvwlYFPx+8uQeCe9M+FG6KgO+imDmQ79CQ== - dependencies: - archiver-utils "^2.1.0" - async "^3.2.0" - buffer-crc32 "^0.2.1" - glob "^7.1.6" - readable-stream "^3.6.0" - tar-stream "^2.1.2" - zip-stream "^3.0.1" - -archiver@^5.0.2: - version "5.1.0" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.1.0.tgz#05b0f6f7836f3e6356a0532763d2bb91017a7e37" - integrity sha512-iKuQUP1nuKzBC2PFlGet5twENzCfyODmvkxwDV0cEFXavwcLrIW5ssTuHi9dyTPvpWr6Faweo2eQaQiLIwyXTA== - dependencies: - archiver-utils "^2.1.0" - async "^3.2.0" - buffer-crc32 "^0.2.1" - readable-stream "^3.6.0" - readdir-glob "^1.0.0" - tar-stream "^2.1.4" - zip-stream "^4.0.4" - -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" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -ast-types@0.x.x: - version "0.13.3" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.3.tgz#50da3f28d17bdbc7969a3a2d83a0e4a72ae755a7" - integrity sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA== - -ast-types@^0.13.2: - version "0.13.4" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" - integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== - dependencies: - tslib "^2.0.1" - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" - integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -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== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -aws-cdk@1.74.0: - version "1.74.0" - resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-1.74.0.tgz#d049631ea578a8b75244b13a3028134ebb56add2" - integrity sha512-D4LKNlmvLHv+CWI/35Esaoij4v5VSqKyc+Gvnjhj1K3I4lG/AAxEy1CmRBhN/w1LJt70U9jnBpIsb6hGUlrV8A== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/cloudformation-diff" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - "@aws-cdk/yaml-cfn" "1.74.0" - archiver "^5.0.2" - aws-sdk "^2.792.0" - camelcase "^6.2.0" - cdk-assets "1.74.0" - colors "^1.4.0" - decamelize "^4.0.0" - fs-extra "^9.0.1" - glob "^7.1.6" - json-diff "^0.5.4" - minimatch ">=3.0" - promptly "^3.2.0" - proxy-agent "^4.0.0" - semver "^7.3.2" - source-map-support "^0.5.19" - table "^6.0.3" - uuid "^8.3.1" - wrap-ansi "^7.0.0" - yargs "^16.1.1" - -aws-sdk@^2.739.0: - version "2.743.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.743.0.tgz#c72a471c80cf88d78d854c780de861fb8475ae34" - integrity sha512-xujZGeA5gnbPBIlq6w/b+WYDKLXYiPWeVHvR0LKcvLLAr8IgzYYInmLx+7CU6ynXuBwVQtqGl2lZ2JSZbnMydg== - dependencies: - buffer "4.9.2" - events "1.1.1" - ieee754 "1.1.13" - jmespath "0.15.0" - querystring "0.2.0" - sax "1.2.1" - url "0.10.3" - uuid "3.3.2" - xml2js "0.4.19" - -aws-sdk@^2.761.0: - version "2.774.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.774.0.tgz#1d9512ae42f0cfb9b98d0d6e0d7df7634cf4e680" - integrity sha512-3a/fM1E3nCPwT4AVbysOWCMmsu/TOdJDD3urjywWE/qO1JShxRwLSdRLD1xRkacR9JcnydfkmdU0qk+VsM3nqg== - dependencies: - buffer "4.9.2" - events "1.1.1" - ieee754 "1.1.13" - jmespath "0.15.0" - querystring "0.2.0" - sax "1.2.1" - url "0.10.3" - uuid "3.3.2" - xml2js "0.4.19" - -aws-sdk@^2.792.0: - version "2.799.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.799.0.tgz#8b1a64c1a9f8ccf5794eb07bdd8051e4cb6adcfd" - integrity sha512-NYAoiNU+bJXhlJsC0rFqrmD5t5ho7/VxldmziP6HLPYHfOCI9Uvk6UVjfPmhLWPm0mHnIxhsHqmsNGyjhHNYmw== - dependencies: - buffer "4.9.2" - events "1.1.1" - ieee754 "1.1.13" - jmespath "0.15.0" - querystring "0.2.0" - sax "1.2.1" - url "0.10.3" - uuid "3.3.2" - xml2js "0.4.19" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" - integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== - -babel-jest@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.2.2.tgz#70f618f2d7016ed71b232241199308985462f812" - integrity sha512-JmLuePHgA+DSOdOL8lPxCgD2LhPPm+rdw1vnxR73PpIrnmKCS2/aBhtkAcxQWuUcW2hBrH8MJ3LKXE7aWpNZyA== - dependencies: - "@jest/transform" "^26.2.2" - "@jest/types" "^26.2.0" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.2.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.2.0.tgz#bdd0011df0d3d513e5e95f76bd53b51147aca2dd" - integrity sha512-B/hVMRv8Nh1sQ1a3EY8I0n4Y1Wty3NrR5ebOyVT302op+DOAau+xNEImGMsUWOC3++ZlMooCytKz+NgN8aKGbA== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - -babel-preset-current-node-syntax@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.3.tgz#b4b547acddbf963cba555ba9f9cbbb70bfd044da" - integrity sha512-uyexu1sVwcdFnyq9o8UQYsXwXflIh8LvrF5+cKrYam93ned1CStffB3+BEcsxGSgagoA3GEyjDqO4a/58hyPYQ== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -babel-preset-jest@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.2.0.tgz#f198201a4e543a43eb40bc481e19736e095fd3e0" - integrity sha512-R1k8kdP3R9phYQugXeNnK/nvCGlBzG4m3EoIIukC80GXb6wCv2XiwPhK6K9MAkQcMszWBYvl2Wm+yigyXFQqXg== - dependencies: - babel-plugin-jest-hoist "^26.2.0" - babel-preset-current-node-syntax "^0.1.2" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bl@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a" - integrity sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -bl@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" - integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.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" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.1: - 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" - -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserslist@^4.12.0, browserslist@^4.8.5: - version "4.14.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.0.tgz#2908951abfe4ec98737b72f34c3bcedc8d43b000" - integrity sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ== - dependencies: - caniuse-lite "^1.0.30001111" - electron-to-chromium "^1.3.523" - escalade "^3.0.2" - node-releases "^1.1.60" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -buffer-from@1.x, buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -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.1.0, buffer@^5.5.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" - integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" - integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== - -camelcase@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== - -caniuse-lite@^1.0.30001111: - version "1.0.30001112" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001112.tgz#0fffc3b934ff56ff0548c37bc9dad7d882bcf672" - integrity sha512-J05RTQlqsatidif/38aN3PGULCLrg8OYQOlJUKbeYVzC2mGZkZLIztwRlB3MtrfLmawUmjFlNJvy/uhwniIe1Q== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -cdk-assets@1.61.0: - version "1.61.0" - resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.61.0.tgz#677d85bb23ae7aa104a1b0d5892e3cfd36580a08" - integrity sha512-nZJNQq6vktb5j8xl+IYLWbN82E6EVANJQIZvOM1H/SLuYsjyuoAlIxBp6e50XqYRApnLYJ7BpDdAnLWOmfY8MQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - archiver "^4.0.2" - aws-sdk "^2.739.0" - glob "^7.1.6" - yargs "^15.4.1" - -cdk-assets@1.74.0: - version "1.74.0" - resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.74.0.tgz#d70d5d5351181d91d9ee91791a858c2eb5d5e723" - integrity sha512-YF3nE1zAJU4dlWVnY30a4ALNzHhSTMMoAMv4bYkwXTLqzu+QB2v3MQdPpCLdGTGUYDaeRZy/Z/4R4MqM+/KPAA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - archiver "^5.0.2" - aws-sdk "^2.792.0" - glob "^7.1.6" - yargs "^16.1.1" - -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -charenc@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= - -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -cli-color@~0.1.6: - version "0.1.7" - resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-0.1.7.tgz#adc3200fa471cc211b0da7f566b71e98b9d67347" - integrity sha1-rcMgD6RxzCEbDaf1ZrcemLnWc0c= - dependencies: - es5-ext "0.8.x" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -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" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -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.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -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== - -colors@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -combined-stream@^1.0.6, combined-stream@~1.0.6: - 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@^4.0.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.2.1: - 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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-3.0.0.tgz#833944d84596e537224dd91cf92f5246823d4f1d" - integrity sha512-FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg== - dependencies: - buffer-crc32 "^0.2.13" - crc32-stream "^3.0.1" - normalize-path "^3.0.0" - readable-stream "^2.3.7" - -compress-commons@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.0.2.tgz#d6896be386e52f37610cef9e6fa5defc58c31bd7" - integrity sha512-qhd32a9xgzmpfoga1VQEiLEwdKZ6Plnpx5UCgIsf89FSolyJ7WnifY4Gtjgv5WR6hWAyRaHxC5MiEhU/38U70A== - dependencies: - buffer-crc32 "^0.2.13" - crc32-stream "^4.0.1" - 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 sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== - -constructs@^3.2.0: - version "3.2.40" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.40.tgz#e8c0e1020ad254ff73d9ea6c85cc90c3a33c71f1" - integrity sha512-XtKn+Pzq8EZNe1zasQem6X09dprZ8pXvNxECKQLZC+jU5BdkgDKe0nak4Wp+k7uvDFlyh9NccaGtxqP6w2YS0A== - -convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-js-compat@^3.6.2: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" - integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== - dependencies: - browserslist "^4.8.5" - semver "7.0.0" - -core-js@^3.6.5: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" - integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -crc-32@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" - integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== - dependencies: - exit-on-epipe "~1.0.1" - printj "~1.1.0" - -crc32-stream@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85" - integrity sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w== - dependencies: - crc "^3.4.4" - readable-stream "^3.4.0" - -crc32-stream@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.1.tgz#0f047d74041737f8a55e86837a1b826bd8ab0067" - integrity sha512-FN5V+weeO/8JaXsamelVYO1PHyeCsuL3HcG4cqsj0ceARcocxalaShCsohZMSAF+db7UYFwBy1rARK/0oFItUw== - dependencies: - crc-32 "^1.2.0" - readable-stream "^3.4.0" - -crc@^3.4.4: - version "3.8.0" - resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" - integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== - dependencies: - buffer "^5.1.0" - -cross-spawn@^6.0.0: - 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" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypt@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= - -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -data-uri-to-buffer@1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" - integrity sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ== - -data-uri-to-buffer@3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" - integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - -debug@2, debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -debug@^3.1.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - -decimal.js@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.0.tgz#39466113a9e036111d02f82489b5fd6b0b5ed231" - integrity sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw== - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -deep-is@^0.1.3, deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -define-properties@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -degenerator@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" - integrity sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU= - dependencies: - ast-types "0.x.x" - escodegen "1.x.x" - esprima "3.x.x" - -degenerator@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-2.2.0.tgz#49e98c11fa0293c5b26edfbb52f15729afcdb254" - integrity sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg== - dependencies: - ast-types "^0.13.2" - escodegen "^1.8.1" - esprima "^4.0.0" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -diff-sequences@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" - integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== - -diff-sequences@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.0.0.tgz#0760059a5c287637b842bd7085311db7060e88a6" - integrity sha512-JC/eHYEC3aSS0vZGjuoc4vHA0yAQTzhQQldXMeMF+JlxLGJlCO38Gma82NV9gk1jGFz8mDzUMeaKXvjRRdJ2dg== - -diff@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -diff@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -difflib@~0.2.1: - version "0.2.4" - resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" - integrity sha1-teMDYabbAjF21WKJLbhZQKcY9H4= - dependencies: - heap ">= 0.2.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - -dreamopt@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/dreamopt/-/dreamopt-0.6.0.tgz#d813ccdac8d39d8ad526775514a13dda664d6b4b" - integrity sha1-2BPM2sjTnYrVJndVFKE92mZNa0s= - dependencies: - wordwrap ">=0.0.2" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -electron-to-chromium@^1.3.523: - version "1.3.526" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.526.tgz#0e004899edf75afc172cce1b8189aac5dca646aa" - integrity sha512-HiroW5ZbGwgT8kCnoEO8qnGjoTPzJxduvV/Vv/wH63eo2N6Zj3xT5fmmaSPAPUM05iN9/5fIEkIg3owTtV6QZg== - -emittery@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.1.tgz#c02375a927a40948c0345cc903072597f5270451" - integrity sha512-d34LN4L6h18Bzz9xpoku2nPwKxCPlPMr3EEKTkoEBi+1/+b0lcRkRJ1UVyyZaKNeqGR3swcGl6s390DNO4YVgQ== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -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.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" - -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es5-ext@0.8.x: - version "0.8.2" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab" - integrity sha1-q6jZ4ZQ6iVrJaDemKjmz9V7NlKs= - -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - -escalade@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" - integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== - -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.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escodegen@1.x.x, escodegen@^1.14.1, escodegen@^1.8.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-rule-composer@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" - integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== - -eslint-scope@5.1.0, eslint-scope@^5.0.0, eslint-scope@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" - integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^2.0.0, eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint@^7.7.0: - version "7.7.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.7.0.tgz#18beba51411927c4b64da0a8ceadefe4030d6073" - integrity sha512-1KUxLzos0ZVsyL81PnRN335nDtQ8/vZUD6uMtWbF+5zDtjKcsklIi78XoE0MVL93QvWTu+E5y44VyyCsOMBrIg== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - eslint-scope "^5.1.0" - eslint-utils "^2.1.0" - eslint-visitor-keys "^1.3.0" - espree "^7.2.0" - esquery "^1.2.0" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash "^4.17.19" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^7.2.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" - integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.3.0" - -esprima@3.x.x: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" - integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1, estraverse@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -events@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= - -exec-sh@^0.3.2: - version "0.3.4" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" - integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2" - integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -exit-on-epipe@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" - integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expect@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.2.0.tgz#0140dd9cc7376d7833852e9cda88c05414f1efba" - integrity sha512-8AMBQ9UVcoUXt0B7v+5/U5H6yiUR87L6eKCfjE3spx7Ya5lF+ebUo37MCFBML2OiLfkX1sxmQOZhIDonyVTkcw== - dependencies: - "@jest/types" "^26.2.0" - ansi-styles "^4.0.0" - jest-get-type "^26.0.0" - jest-matcher-utils "^26.2.0" - jest-message-util "^26.2.0" - jest-regex-util "^26.0.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - 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-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - -file-uri-to-path@1, file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -file-uri-to-path@2: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba" - integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -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-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -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@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -fs-readdir-recursive@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" - integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - -ftp@^0.3.10, ftp@~0.3.10: - version "0.3.10" - resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" - integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0= - dependencies: - readable-stream "1.1.x" - xregexp "2.0.0" - -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== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -gensync@^1.0.0-beta.1: - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" - integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== - -get-caller-file@^2.0.1, 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-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" - integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== - dependencies: - pump "^3.0.0" - -get-uri@3: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c" - integrity sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg== - dependencies: - "@tootallnate/once" "1" - data-uri-to-buffer "3" - debug "4" - file-uri-to-path "2" - fs-extra "^8.1.0" - ftp "^0.3.10" - -get-uri@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.4.tgz#d4937ab819e218d4cb5ae18e4f5962bef169cc6a" - integrity sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q== - dependencies: - data-uri-to-buffer "1" - debug "2" - extend "~3.0.2" - file-uri-to-path "1" - ftp "~0.3.10" - readable-stream "2" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== - dependencies: - is-glob "^4.0.1" - -glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - -graceful-fs@^4.1.11, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -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-symbols@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -"heap@>= 0.2.0": - version "0.2.6" - resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" - integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= - -hosted-git-info@^2.1.4: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== - -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -http-errors@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== - dependencies: - agent-base "4" - debug "3.1.0" - -http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-proxy-agent@5, https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - -https-proxy-agent@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81" - integrity sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg== - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -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, ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.8: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -import-fresh@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, 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== - -invariant@^2.2.2, invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - -ip@1.1.5, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.1.5, is-buffer@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-docker@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" - integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -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-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -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-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-potential-custom-element-name@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" - integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -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@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isarray@1.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 sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -istanbul-lib-coverage@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" - integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== - -istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" - integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" - integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jest-changed-files@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.2.0.tgz#b4946201defe0c919a2f3d601e9f98cb21dacc15" - integrity sha512-+RyJb+F1K/XBLIYiL449vo5D+CvlHv29QveJUWNPXuUicyZcq+tf1wNxmmFeRvAU1+TzhwqczSjxnCCFt7+8iA== - dependencies: - "@jest/types" "^26.2.0" - execa "^4.0.0" - throat "^5.0.0" - -jest-cli@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.2.2.tgz#4c273e5474baafac1eb15fd25aaafb4703f5ffbc" - integrity sha512-vVcly0n/ijZvdy6gPQiQt0YANwX2hLTPQZHtW7Vi3gcFdKTtif7YpI85F8R8JYy5DFSWz4x1OW0arnxlziu5Lw== - dependencies: - "@jest/core" "^26.2.2" - "@jest/test-result" "^26.2.0" - "@jest/types" "^26.2.0" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^26.2.2" - jest-util "^26.2.0" - jest-validate "^26.2.0" - prompts "^2.0.1" - yargs "^15.3.1" - -jest-config@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.2.2.tgz#f3ebc7e2bc3f49de8ed3f8007152f345bb111917" - integrity sha512-2lhxH0y4YFOijMJ65usuf78m7+9/8+hAb1PZQtdRdgnQpAb4zP6KcVDDktpHEkspBKnc2lmFu+RQdHukUUbiTg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.2.2" - "@jest/types" "^26.2.0" - babel-jest "^26.2.2" - chalk "^4.0.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^26.2.0" - jest-environment-node "^26.2.0" - jest-get-type "^26.0.0" - jest-jasmine2 "^26.2.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.2.2" - jest-util "^26.2.0" - jest-validate "^26.2.0" - micromatch "^4.0.2" - pretty-format "^26.2.0" - -jest-diff@^25.2.1: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" - integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== - dependencies: - chalk "^3.0.0" - diff-sequences "^25.2.6" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - -jest-diff@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.2.0.tgz#dee62c771adbb23ae585f3f1bd289a6e8ef4f298" - integrity sha512-Wu4Aopi2nzCsHWLBlD48TgRy3Z7OsxlwvHNd1YSnHc7q1NJfrmyCPoUXrTIrydQOG5ApaYpsAsdfnMbJqV1/wQ== - dependencies: - chalk "^4.0.0" - diff-sequences "^26.0.0" - jest-get-type "^26.0.0" - pretty-format "^26.2.0" - -jest-docblock@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" - integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== - dependencies: - detect-newline "^3.0.0" - -jest-each@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.2.0.tgz#aec8efa01d072d7982c900e74940863385fa884e" - integrity sha512-gHPCaho1twWHB5bpcfnozlc6mrMi+VAewVPNgmwf81x2Gzr6XO4dl+eOrwPWxbkYlgjgrYjWK2xgKnixbzH3Ew== - dependencies: - "@jest/types" "^26.2.0" - chalk "^4.0.0" - jest-get-type "^26.0.0" - jest-util "^26.2.0" - pretty-format "^26.2.0" - -jest-environment-jsdom@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.2.0.tgz#6443a6f3569297dcaa4371dddf93acaf167302dc" - integrity sha512-sDG24+5M4NuIGzkI3rJW8XUlrpkvIdE9Zz4jhD8OBnVxAw+Y1jUk9X+lAOD48nlfUTlnt3lbAI3k2Ox+WF3S0g== - dependencies: - "@jest/environment" "^26.2.0" - "@jest/fake-timers" "^26.2.0" - "@jest/types" "^26.2.0" - "@types/node" "*" - jest-mock "^26.2.0" - jest-util "^26.2.0" - jsdom "^16.2.2" - -jest-environment-node@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.2.0.tgz#fee89e06bdd4bed3f75ee2978d73ede9bb57a681" - integrity sha512-4M5ExTYkJ19efBzkiXtBi74JqKLDciEk4CEsp5tTjWGYMrlKFQFtwIVG3tW1OGE0AlXhZjuHPwubuRYY4j4uOw== - dependencies: - "@jest/environment" "^26.2.0" - "@jest/fake-timers" "^26.2.0" - "@jest/types" "^26.2.0" - "@types/node" "*" - jest-mock "^26.2.0" - jest-util "^26.2.0" - -jest-get-type@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" - integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== - -jest-get-type@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.0.0.tgz#381e986a718998dbfafcd5ec05934be538db4039" - integrity sha512-zRc1OAPnnws1EVfykXOj19zo2EMw5Hi6HLbFCSjpuJiXtOWAYIjNsHVSbpQ8bDX7L5BGYGI8m+HmKdjHYFF0kg== - -jest-haste-map@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.2.2.tgz#6d4267b1903854bfdf6a871419f35a82f03ae71e" - integrity sha512-3sJlMSt+NHnzCB+0KhJ1Ut4zKJBiJOlbrqEYNdRQGlXTv8kqzZWjUKQRY3pkjmlf+7rYjAV++MQ4D6g4DhAyOg== - dependencies: - "@jest/types" "^26.2.0" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.2.0" - jest-util "^26.2.0" - jest-worker "^26.2.1" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" - -jest-jasmine2@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.2.2.tgz#d82b1721fac2b153a4f8b3f0c95e81e702812de2" - integrity sha512-Q8AAHpbiZMVMy4Hz9j1j1bg2yUmPa1W9StBvcHqRaKa9PHaDUMwds8LwaDyzP/2fkybcTQE4+pTMDOG9826tEw== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.2.0" - "@jest/source-map" "^26.1.0" - "@jest/test-result" "^26.2.0" - "@jest/types" "^26.2.0" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^26.2.0" - is-generator-fn "^2.0.0" - jest-each "^26.2.0" - jest-matcher-utils "^26.2.0" - jest-message-util "^26.2.0" - jest-runtime "^26.2.2" - jest-snapshot "^26.2.2" - jest-util "^26.2.0" - pretty-format "^26.2.0" - throat "^5.0.0" - -jest-leak-detector@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.2.0.tgz#073ee6d8db7a9af043e7ce99d8eea17a4fb0cc50" - integrity sha512-aQdzTX1YiufkXA1teXZu5xXOJgy7wZQw6OJ0iH5CtQlOETe6gTSocaYKUNui1SzQ91xmqEUZ/WRavg9FD82rtQ== - dependencies: - jest-get-type "^26.0.0" - pretty-format "^26.2.0" - -jest-matcher-utils@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.2.0.tgz#b107af98c2b8c557ffd46c1adf06f794aa52d622" - integrity sha512-2cf/LW2VFb3ayPHrH36ZDjp9+CAeAe/pWBAwsV8t3dKcrINzXPVxq8qMWOxwt5BaeBCx4ZupVGH7VIgB8v66vQ== - dependencies: - chalk "^4.0.0" - jest-diff "^26.2.0" - jest-get-type "^26.0.0" - pretty-format "^26.2.0" - -jest-message-util@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.2.0.tgz#757fbc1323992297092bb9016a71a2eb12fd22ea" - integrity sha512-g362RhZaJuqeqG108n1sthz5vNpzTNy926eNDszo4ncRbmmcMRIUAZibnd6s5v2XSBCChAxQtCoN25gnzp7JbQ== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.2.0" - "@types/stack-utils" "^1.0.1" - chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - slash "^3.0.0" - stack-utils "^2.0.2" - -jest-mock@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.2.0.tgz#a1b3303ab38c34aa1dbbc16ab57cdc1a59ed50d1" - integrity sha512-XeC7yWtWmWByoyVOHSsE7NYsbXJLtJNgmhD7z4MKumKm6ET0si81bsSLbQ64L5saK3TgsHo2B/UqG5KNZ1Sp/Q== - dependencies: - "@jest/types" "^26.2.0" - "@types/node" "*" - -jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== - -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== - -jest-resolve-dependencies@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.2.2.tgz#2ad3cd9281730e9a5c487cd846984c5324e47929" - integrity sha512-S5vufDmVbQXnpP7435gr710xeBGUFcKNpNswke7RmFvDQtmqPjPVU/rCeMlEU0p6vfpnjhwMYeaVjKZAy5QYJA== - dependencies: - "@jest/types" "^26.2.0" - jest-regex-util "^26.0.0" - jest-snapshot "^26.2.2" - -jest-resolve@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.2.2.tgz#324a20a516148d61bffa0058ed0c77c510ecfd3e" - integrity sha512-ye9Tj/ILn/0OgFPE/3dGpQPUqt4dHwIocxt5qSBkyzxQD8PbL0bVxBogX2FHxsd3zJA7V2H/cHXnBnNyyT9YoQ== - dependencies: - "@jest/types" "^26.2.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.2" - jest-util "^26.2.0" - read-pkg-up "^7.0.1" - resolve "^1.17.0" - slash "^3.0.0" - -jest-runner@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.2.2.tgz#6d03d057886e9c782e10b2cf37443f902fe0e39e" - integrity sha512-/qb6ptgX+KQ+aNMohJf1We695kaAfuu3u3ouh66TWfhTpLd9WbqcF6163d/tMoEY8GqPztXPLuyG0rHRVDLxCA== - dependencies: - "@jest/console" "^26.2.0" - "@jest/environment" "^26.2.0" - "@jest/test-result" "^26.2.0" - "@jest/types" "^26.2.0" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.7.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^26.2.2" - jest-docblock "^26.0.0" - jest-haste-map "^26.2.2" - jest-leak-detector "^26.2.0" - jest-message-util "^26.2.0" - jest-resolve "^26.2.2" - jest-runtime "^26.2.2" - jest-util "^26.2.0" - jest-worker "^26.2.1" - source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runtime@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.2.2.tgz#2480ff79320680a643031dd21998d7c63d83ab68" - integrity sha512-a8VXM3DxCDnCIdl9+QucWFfQ28KdqmyVFqeKLigHdErtsx56O2ZIdQkhFSuP1XtVrG9nTNHbKxjh5XL1UaFDVQ== - dependencies: - "@jest/console" "^26.2.0" - "@jest/environment" "^26.2.0" - "@jest/fake-timers" "^26.2.0" - "@jest/globals" "^26.2.0" - "@jest/source-map" "^26.1.0" - "@jest/test-result" "^26.2.0" - "@jest/transform" "^26.2.2" - "@jest/types" "^26.2.0" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^26.2.2" - jest-haste-map "^26.2.2" - jest-message-util "^26.2.0" - jest-mock "^26.2.0" - jest-regex-util "^26.0.0" - jest-resolve "^26.2.2" - jest-snapshot "^26.2.2" - jest-util "^26.2.0" - jest-validate "^26.2.0" - slash "^3.0.0" - strip-bom "^4.0.0" - yargs "^15.3.1" - -jest-serializer@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.2.0.tgz#92dcae5666322410f4bf50211dd749274959ddac" - integrity sha512-V7snZI9IVmyJEu0Qy0inmuXgnMWDtrsbV2p9CRAcmlmPVwpC2ZM8wXyYpiugDQnwLHx0V4+Pnog9Exb3UO8M6Q== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - -jest-snapshot@^26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.2.2.tgz#9d2eda083a4a1017b157e351868749bd63211799" - integrity sha512-NdjD8aJS7ePu268Wy/n/aR1TUisG0BOY+QOW4f6h46UHEKOgYmmkvJhh2BqdVZQ0BHSxTMt04WpCf9njzx8KtA== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^26.2.0" - "@types/prettier" "^2.0.0" - chalk "^4.0.0" - expect "^26.2.0" - graceful-fs "^4.2.4" - jest-diff "^26.2.0" - jest-get-type "^26.0.0" - jest-haste-map "^26.2.2" - jest-matcher-utils "^26.2.0" - jest-message-util "^26.2.0" - jest-resolve "^26.2.2" - natural-compare "^1.4.0" - pretty-format "^26.2.0" - semver "^7.3.2" - -jest-util@26.x, jest-util@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.2.0.tgz#0597d2a27c559340957609f106c408c17c1d88ac" - integrity sha512-YmDwJxLZ1kFxpxPfhSJ0rIkiZOM0PQbRcfH0TzJOhqCisCAsI1WcmoQqO83My9xeVA2k4n+rzg2UuexVKzPpig== - dependencies: - "@jest/types" "^26.2.0" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" - -jest-validate@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.2.0.tgz#97fedf3e7984b7608854cbf925b9ca6ebcbdb78a" - integrity sha512-8XKn3hM6VIVmLNuyzYLCPsRCT83o8jMZYhbieh4dAyKLc4Ypr36rVKC+c8WMpWkfHHpGnEkvWUjjIAyobEIY/Q== - dependencies: - "@jest/types" "^26.2.0" - camelcase "^6.0.0" - chalk "^4.0.0" - jest-get-type "^26.0.0" - leven "^3.1.0" - pretty-format "^26.2.0" - -jest-watcher@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.2.0.tgz#45bdf2fecadd19c0a501f3b071a474dca636825b" - integrity sha512-674Boco4Joe0CzgKPL6K4Z9LgyLx+ZvW2GilbpYb8rFEUkmDGgsZdv1Hv5rxsRpb1HLgKUOL/JfbttRCuFdZXQ== - dependencies: - "@jest/test-result" "^26.2.0" - "@jest/types" "^26.2.0" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - jest-util "^26.2.0" - string-length "^4.0.1" - -jest-worker@^26.2.1: - version "26.2.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.2.1.tgz#5d630ab93f666b53f911615bc13e662b382bd513" - integrity sha512-+XcGMMJDTeEGncRb5M5Zq9P7K4sQ1sirhjdOxsN1462h6lFo9w59bl2LVQmdGEEeU3m+maZCkS2Tcc9SfCHO4A== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest@^26.1.0: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.2.2.tgz#a022303887b145147204c5f66e6a5c832333c7e7" - integrity sha512-EkJNyHiAG1+A8pqSz7cXttoVa34hOEzN/MrnJhYnfp5VHxflVcf2pu3oJSrhiy6LfIutLdWo+n6q63tjcoIeig== - dependencies: - "@jest/core" "^26.2.2" - import-local "^3.0.2" - jest-cli "^26.2.2" - -jmespath@0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" - integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc= - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsdom@^16.2.2: - version "16.4.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" - integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== - dependencies: - abab "^2.0.3" - acorn "^7.1.1" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.2.0" - data-urls "^2.0.0" - decimal.js "^10.2.0" - domexception "^2.0.1" - escodegen "^1.14.1" - html-encoding-sniffer "^2.0.1" - is-potential-custom-element-name "^1.0.0" - nwsapi "^2.2.0" - parse5 "5.1.1" - request "^2.88.2" - request-promise-native "^1.0.8" - saxes "^5.0.0" - symbol-tree "^3.2.4" - tough-cookie "^3.0.1" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - ws "^7.2.3" - xml-name-validator "^3.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-diff@^0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/json-diff/-/json-diff-0.5.4.tgz#7bc8198c441756632aab66c7d9189d365a7a035a" - integrity sha512-q5Xmx9QXNOzOzIlMoYtLrLiu4Jl/Ce2bn0CNcv54PhyH89CI4GWlGVDye8ei2Ijt9R3U+vsWPsXpLUNob8bs8Q== - dependencies: - cli-color "~0.1.6" - difflib "~0.2.1" - dreamopt "~0.6.0" - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json5@2.x, json5@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" - integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== - dependencies: - minimist "^1.2.5" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== - -jsonschema@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" - integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -lazystream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" - integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= - dependencies: - readable-stream "^2.0.5" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levenary@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" - integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== - dependencies: - leven "^3.1.0" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= - -lodash.difference@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" - integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= - -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= - -lodash.union@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= - -lodash@^4.17.14, lodash@^4.17.19: - version "4.17.19" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" - integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== - -lodash@^4.17.15, lodash@^4.17.20: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== - -loose-envify@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.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.x: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= - dependencies: - tmpl "1.0.x" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -md5@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" - integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== - dependencies: - charenc "0.0.2" - crypt "0.0.2" - is-buffer "~1.1.6" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" - -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== - dependencies: - mime-db "1.44.0" - -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== - -minimatch@>=3.0, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@1.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mkdirp@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@^2.1.1: - 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.4: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nan@^2.12.1: - version "2.14.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" - integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -netmask@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" - integrity sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU= - -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-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-notifier@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-7.0.2.tgz#3a70b1b70aca5e919d0b1b022530697466d9c675" - integrity sha512-ux+n4hPVETuTL8+daJXTOC6uKLgMsl1RYfFv7DKRzyvzBapqco0rZZ9g72ZN8VS6V+gvNYHYa/ofcCY8fkJWsA== - dependencies: - growly "^1.3.0" - is-wsl "^2.2.0" - semver "^7.3.2" - shellwords "^0.1.1" - uuid "^8.2.0" - which "^2.0.2" - -node-releases@^1.1.60: - version "1.1.60" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084" - integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA== - -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -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== - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-keys@^1.0.11, object-keys@^1.0.12: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -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 sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.1.tgz#5c8016847b0d67fcedb7eef254751cfcdc7e9418" - integrity sha512-ZpZpjcJeugQfWsfyQlshVoowIIQ1qBGSVll4rfDq6JJVO//fesjoX808hXWfBjY+ROZgpKDI5TRSRBSoJiZ8eg== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -p-each-series@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" - integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -pac-proxy-agent@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz#115b1e58f92576cac2eba718593ca7b0e37de2ad" - integrity sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ== - dependencies: - agent-base "^4.2.0" - debug "^4.1.1" - get-uri "^2.0.0" - http-proxy-agent "^2.1.0" - https-proxy-agent "^3.0.0" - pac-resolver "^3.0.0" - raw-body "^2.2.0" - socks-proxy-agent "^4.0.1" - -pac-proxy-agent@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz#66883eeabadc915fc5e95457324cb0f0ac78defb" - integrity sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - get-uri "3" - http-proxy-agent "^4.0.1" - https-proxy-agent "5" - pac-resolver "^4.1.0" - raw-body "^2.2.0" - socks-proxy-agent "5" - -pac-resolver@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26" - integrity sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA== - dependencies: - co "^4.6.0" - degenerator "^1.0.4" - ip "^1.1.5" - netmask "^1.0.6" - thunkify "^2.1.2" - -pac-resolver@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-4.1.0.tgz#4b12e7d096b255a3b84e53f6831f32e9c7e5fe95" - integrity sha512-d6lf2IrZJJ7ooVHr7BfwSjRO1yKSJMaiiWYSHcrxSIUtZrCa4KKGwcztdkZ/E9LFleJfjoi1yl+XLR7AX24nbQ== - dependencies: - degenerator "^2.2.0" - ip "^1.1.5" - netmask "^1.0.6" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.1.tgz#7cfe35c1ccd641bce3981467e6c2ece61b3b3878" - integrity sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - lines-and-columns "^1.1.6" - -parse5@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -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 sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -picomatch@^2.0.4, picomatch@^2.0.5: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pirates@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -pretty-format@^25.2.1, pretty-format@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" - integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== - dependencies: - "@jest/types" "^25.5.0" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^16.12.0" - -pretty-format@^26.2.0: - version "26.2.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.2.0.tgz#83ecc8d7de676ff224225055e72bd64821cec4f1" - integrity sha512-qi/8IuBu2clY9G7qCXgCdD1Bf9w+sXakdHTRToknzMtVy0g7c4MBWaZy7MfB7ndKZovRO6XRwJiAYqq+MC7SDA== - dependencies: - "@jest/types" "^26.2.0" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^16.12.0" - -printj@~1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" - integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== - -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== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promptly@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/promptly/-/promptly-3.0.3.tgz#e178f722e73d82c60d019462044bccfdd9872f42" - integrity sha512-EWnzOsxVKUjqKeE6SStH1/cO4+DE44QolaoJ4ojGd9z6pcNkpgfJKr1ncwxrOFHSTIzoudo7jG8y0re30/LO1g== - dependencies: - pify "^3.0.0" - read "^1.0.4" - -promptly@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/promptly/-/promptly-3.2.0.tgz#a5517fbbf59bd31c1751d4e1d9bef1714f42b9d8" - integrity sha512-WnR9obtgW+rG4oUV3hSnNGl1pHm3V1H/qD9iJBumGSmVsSC5HpZOLuu8qdMb6yCItGfT7dcRszejr/5P3i9Pug== - dependencies: - read "^1.0.4" - -prompts@^2.0.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" - integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.4" - -proxy-agent@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.1.1.tgz#7e04e06bf36afa624a1540be247b47c970bd3014" - integrity sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw== - dependencies: - agent-base "^4.2.0" - debug "4" - http-proxy-agent "^2.1.0" - https-proxy-agent "^3.0.0" - lru-cache "^5.1.1" - pac-proxy-agent "^3.0.1" - proxy-from-env "^1.0.0" - socks-proxy-agent "^4.0.1" - -proxy-agent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-4.0.0.tgz#a92976af3fbc7d846f2e850e2ac5ac6ca3fb74c7" - integrity sha512-8P0Y2SkwvKjiGU1IkEfYuTteioMIDFxPL4/j49zzt5Mz3pG1KO+mIrDG1qH0PQUHTTczjwGcYl+EzfXiFj5vUQ== - dependencies: - agent-base "^6.0.0" - debug "4" - http-proxy-agent "^4.0.0" - https-proxy-agent "^5.0.0" - lru-cache "^5.1.1" - pac-proxy-agent "^4.1.0" - proxy-from-env "^1.0.0" - socks-proxy-agent "^5.0.0" - -proxy-from-env@^1.0.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== - -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -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 sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^2.1.0, punycode@^2.1.1: - 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.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -raw-body@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" - integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== - dependencies: - bytes "3.1.0" - http-errors "1.7.3" - iconv-lite "0.4.24" - unpipe "1.0.0" - -react-is@^16.12.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -read@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= - dependencies: - mute-stream "~0.0.4" - -readable-stream@1.1.x: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.3.7: - 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.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" - -readdir-glob@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4" - integrity sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA== - dependencies: - minimatch "^3.0.4" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" - integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== - -regenerator-runtime@^0.13.4: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== - -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== - dependencies: - "@babel/runtime" "^7.8.4" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexpp@^3.0.0, regexpp@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== - -regexpu-core@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" - integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - -regjsparser@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" - integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== - dependencies: - jsesc "~0.5.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.8: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.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 sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.10.0, resolve@^1.17.0, resolve@^1.3.2: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -safe-buffer@^5.0.1, safe-buffer@^5.1.2, 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@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -sax@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" - integrity sha1-e45lYZCyKOgaZq6nSEgNgozS03o= - -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== - -saxes@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@7.x, semver@^7.2.1, semver@^7.2.2, semver@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -semver@^6.0.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.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 sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -sisteransi@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -smart-buffer@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" - integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -socks-proxy-agent@5, socks-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" - integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== - dependencies: - agent-base "6" - debug "4" - socks "^2.3.3" - -socks-proxy-agent@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" - integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== - dependencies: - agent-base "~4.2.1" - socks "~2.3.2" - -socks@^2.3.3: - version "2.5.0" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.5.0.tgz#3a7c286db114f67864a4bd8b4207a91d1db3d6db" - integrity sha512-00OqQHp5SCbwm9ecOMJj9aQtMSjwi1uVuGQoxnpKCS50VKZcOZ8z11CTKypmR8sEy7nZimy/qXY7rYJYbRlXmA== - dependencies: - ip "^1.1.5" - smart-buffer "^4.1.0" - -socks@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" - integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== - dependencies: - ip "1.1.5" - smart-buffer "^4.1.0" - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.19, source-map-support@^0.5.6: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^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 sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -sst-cdk@1.61.0-rc.25: - version "1.61.0-rc.25" - resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.61.0-rc.25.tgz#f9066a46ebec56f32165890eba99eaf558cf61d8" - integrity sha512-Vc9pRpTIV0xUBZHK6Qj3Xrb/LCPiXw2nVJaWZPiSiUc2mi566KsxpmWFvjqrYXKFesRSwUoIVgfEwop12CiLzw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cloudformation-diff" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - "@aws-cdk/region-info" "1.61.0" - archiver "^4.0.2" - aws-sdk "^2.739.0" - camelcase "^6.0.0" - cdk-assets "1.61.0" - colors "^1.4.0" - decamelize "^4.0.0" - fs-extra "^9.0.1" - glob "^7.1.6" - json-diff "^0.5.4" - minimatch ">=3.0" - promptly "^3.0.3" - proxy-agent "^3.1.1" - semver "^7.2.2" - source-map-support "^0.5.19" - table "^5.4.6" - uuid "^8.3.0" - wrap-ansi "^7.0.0" - yaml "^1.10.0" - yargs "^15.4.1" - -stack-utils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593" - integrity sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg== - dependencies: - escape-string-regexp "^2.0.0" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.5.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - -string-length@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" - integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -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@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - -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@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== - dependencies: - has-flag "^4.0.0" - -supports-hyperlinks@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" - integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -table@^5.2.3, table@^5.4.6: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -table@^6.0.3: - version "6.0.4" - resolved "https://registry.yarnpkg.com/table/-/table-6.0.4.tgz#c523dd182177e926c723eb20e1b341238188aa0d" - integrity sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw== - dependencies: - ajv "^6.12.4" - lodash "^4.17.20" - slice-ansi "^4.0.0" - string-width "^4.2.0" - -tar-stream@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.3.tgz#1e2022559221b7866161660f118255e20fa79e41" - integrity sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA== - dependencies: - bl "^4.0.1" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar-stream@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.4.tgz#c4fb1a11eb0da29b893a5b25476397ba2d053bfa" - integrity sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw== - 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" - -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -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== - -thunkify@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" - integrity sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0= - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -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" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tough-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== - dependencies: - ip-regex "^2.1.0" - psl "^1.1.28" - punycode "^2.1.1" - -tr46@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" - integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== - dependencies: - punycode "^2.1.1" - -ts-jest@^26.1.4: - version "26.1.4" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.1.4.tgz#87d41a96016a8efe4b8cc14501d3785459af6fa6" - integrity sha512-Nd7diUX6NZWfWq6FYyvcIPR/c7GbEF75fH1R6coOp3fbNzbRJBZZAn0ueVS0r8r9ral1VcrpneAFAwB3TsVS1Q== - dependencies: - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - jest-util "26.x" - json5 "2.x" - lodash.memoize "4.x" - make-error "1.x" - mkdirp "1.x" - semver "7.x" - yargs-parser "18.x" - -tslib@^1.8.1: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" - integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== - -tslib@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" - integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== - -tsutils@^3.17.1: - version "3.17.1" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" - integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== - dependencies: - tslib "^1.8.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" - integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typescript@^3.9.7: - version "3.9.7" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" - integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== - -unpipe@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" - integrity sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -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 sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -uuid@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^8.2.0, uuid@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" - integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== - -uuid@^8.3.1: - version "8.3.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" - integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== - -v8-compile-cache@^2.0.3: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" - integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== - -v8-to-istanbul@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6" - integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7, walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= - dependencies: - makeerror "1.0.x" - -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.1.0.tgz#c628acdcf45b82274ce7281ee31dd3c839791771" - integrity sha512-vEIkwNi9Hqt4TV9RdnaBPNt+E2Sgmo3gePebCRgZ1R7g6d23+53zCTnuB0amKI4AXq6VM8jj2DUAa0S1vjJxkw== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^2.0.2" - webidl-conversions "^5.0.0" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -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.1, 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" - -word-wrap@^1.2.3, word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wordwrap@>=0.0.2: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.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 sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -ws@^7.2.3: - version "7.3.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" - integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== - -ws@^7.4.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.0.tgz#a5dd76a24197940d4a8bb9e0e152bb4503764da7" - integrity sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ== - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -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 sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -xregexp@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" - integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= - -y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - -y18n@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" - integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yaml@1.10.0, yaml@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" - integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== - -yargs-parser@18.x, yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^20.2.2: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs@^15.3.1, yargs@^15.4.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yargs@^16.1.1: - version "16.1.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.1.1.tgz#5a4a095bd1ca806b0a50d0c03611d38034d219a1" - integrity sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w== - 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" - -zip-stream@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-3.0.1.tgz#cb8db9d324a76c09f9b76b31a12a48638b0b9708" - integrity sha512-r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ== - dependencies: - archiver-utils "^2.1.0" - compress-commons "^3.0.0" - readable-stream "^3.6.0" - -zip-stream@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.0.4.tgz#3a8f100b73afaa7d1ae9338d910b321dec77ff3a" - integrity sha512-a65wQ3h5gcQ/nQGWV1mSZCEzCML6EK/vyVPcrPNynySP1j3VBbQKh3nhC8CbORb+jfl2vXvh56Ul5odP1bAHqw== - dependencies: - archiver-utils "^2.1.0" - compress-commons "^4.0.2" - readable-stream "^3.6.0" diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index 0866d8057f..684baec95e 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -1,20 +1,20 @@ { "name": "jest", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "test": "../../bin/scripts.js test" + "postinstall": "node ../helpers/copy-symlinks.js", + "test": "sst test" }, "jest": { "testPathIgnorePatterns": [ "./jest.test.js" ] }, - "keywords": [], - "author": "", "dependencies": { - "@serverless-stack/resources": "../../../resources", + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5", "@aws-cdk/aws-dynamodb": "1.74.0", "@aws-cdk/core": "1.74.0" }, diff --git a/packages/cli/test/jest/yarn.lock b/packages/cli/test/jest/yarn.lock deleted file mode 100644 index 8208baf489..0000000000 --- a/packages/cli/test/jest/yarn.lock +++ /dev/null @@ -1,553 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-cdk/assert@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.74.0.tgz#82795a3bb21ede93288a60322804f6f4e2d4959e" - integrity sha512-5M3M4lcSS2dGPgVANhv5GjqC6nNBy9bL1XECAJj3lg7q+6zJ00+0wq4bB0wyvm/mE+S0axkGZ4LVHF5QA2gCfQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/cloudformation-diff" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/assets@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.74.0.tgz#8aea948a32afcf7c60449346a087c4b5aecff251" - integrity sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ== - dependencies: - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-applicationautoscaling@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz#ad5e946e68bd4094c3236e983d36f67d66135dfc" - integrity sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-autoscaling-common@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz#f6bcbb987830f299b6e2ef454944afdde9a8a82e" - integrity sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-cloudformation@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.74.0.tgz#04fffb02403fb52ee05ec43172b845a29a903a9e" - integrity sha512-VOyuMhoxA9vk3zSUfzqSg1YjYYgc+qyB0bpaOJIW/iinXYXhA64z5YQnTxdwd/exlFgA59chOanA7aRrNM2YIg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-sns" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-cloudwatch@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz#94a29d2998a5c08412084b346d404b3a8b90f8a8" - integrity sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-codeguruprofiler@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz#d749688e9edb252ce6fc68efa4f9977f7ba02cb6" - integrity sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-dynamodb@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.74.0.tgz#7e0ef530e9c3d7301a9db616ddf6d650f7acb76f" - integrity sha512-YU38dFYLMyMe5u2GLy8sFCFTVxwDgWZ67HzFg41kSj8WpAsVQEE5Zxh1nf0+8Ai1J4MNeLeMCaXtuliHipoQSw== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/custom-resources" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-ec2@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz#eae31df9045ca9374daf6b1562674e31d8053aff" - integrity sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/aws-ssm" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-efs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz#367b89f14ccd090f98227dbc975076571b31faac" - integrity sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA== - dependencies: - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-events@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz#2ed5a4cdd737ce4c8950506df496d0b43ac6aa12" - integrity sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-iam@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz#c255c9676fb6048ab27c00d111ed5e7d8b46877c" - integrity sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA== - dependencies: - "@aws-cdk/core" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-kms@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz#73531f7b5d2542eb5e3f7bb54604944921e34995" - integrity sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-lambda-nodejs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.74.0.tgz#aa818270e4dcd74be51d402cdb114da311b3c966" - integrity sha512-1mc8I+Yz43El8O8SjsfkABsI31tcpO5e3fAz7/40DKuFgM9jkL6vyiL55MLIckAqmE2N9mRYU0xF4RC7uRZdmQ== - dependencies: - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-lambda@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz#52175fbc9e679ca5c0f4d15e0666c99fc4a953d0" - integrity sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-codeguruprofiler" "1.74.0" - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-efs" "1.74.0" - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/aws-sqs" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-logs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz#cd40afe70ffeb5250ecea1db0ee0a2f68fb2084a" - integrity sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-s3-assets@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz#7f1988f3931e95d88a8c1357f98c47f7f9b73dee" - integrity sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg== - dependencies: - "@aws-cdk/assets" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-s3@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz#5b53839c3af0f67bfb1e96061f6a1ea5be445fe9" - integrity sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q== - dependencies: - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-sns@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.74.0.tgz#c9289b34cb2512010a0b6813f684c93398502bdd" - integrity sha512-O0HDGvl1WjCTU53auNJKCW5/6vpbVYlj0RwLgGaOOlTeKnfuq53kGvL/t3QdZQlJWxSvkbN61O+rZB7GacXV0g== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-sqs" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-sqs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz#998da5838d4310805432f0cf55fcc7c8f34657e2" - integrity sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-ssm@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz#426dd65c0b933618d5c196cb38386c1035b0fdc4" - integrity sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/cfnspec@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.74.0.tgz#03577e266721fe87287f9fc710a95d7b7e5886cd" - integrity sha512-9rdFgRUoV3lbAD6lnU+hGdkit8ILmUq+XCXzRdc9xWHUXIKxMmFK9frXTT+wGmjgdz/GpPyfSbFjzyqk4QE5+w== - dependencies: - md5 "^2.3.0" - -"@aws-cdk/cloud-assembly-schema@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz#f1bbd8411ec320dd9e14ef2dce626a05019c42bc" - integrity sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw== - dependencies: - jsonschema "^1.4.0" - semver "^7.3.2" - -"@aws-cdk/cloudformation-diff@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.74.0.tgz#d86199db530f9df641cff7f3996939c47645d59f" - integrity sha512-aYAg85fkpX39euUo5HjsGtqOpyD5fAz1+jZ/F/5erA8Y/+rB4ifCVJH0cLYHVdYwo8oc3poB6jW4tVMxNYxbrg== - dependencies: - "@aws-cdk/cfnspec" "1.74.0" - colors "^1.4.0" - diff "^5.0.0" - fast-deep-equal "^3.1.3" - string-width "^4.2.0" - table "^6.0.3" - -"@aws-cdk/core@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.74.0.tgz#132d31c0ab9d39394827431ccd804cf10de34273" - integrity sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - "@balena/dockerignore" "^1.0.2" - constructs "^3.2.0" - fs-extra "^9.0.1" - ignore "^5.1.8" - minimatch "^3.0.4" - -"@aws-cdk/custom-resources@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.74.0.tgz#19329e8a9b9bc0ca66e00c791b008c416a67265f" - integrity sha512-KDXgyRCeCMIj42nQcd2RXc4GYQpd7SWtx2iw0G4Wvs/wG4i3nR1qdlvEJvAlNgsYeqM4pp3mIp3PgdX341HsCg== - dependencies: - "@aws-cdk/aws-cloudformation" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-sns" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/cx-api@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz#922c11389d723eadef2bc12666ced4980fe9e4cc" - integrity sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - semver "^7.3.2" - -"@aws-cdk/region-info@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.74.0.tgz#e53eabe2d8980c360e63ea956615253551005182" - integrity sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA== - -"@balena/dockerignore@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" - integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== - -"@serverless-stack/resources@../../../resources": - version "0.4.3" - dependencies: - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-lambda-nodejs" "1.74.0" - "@aws-cdk/core" "1.74.0" - -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^4.0.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" - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -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== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -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" - -charenc@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= - -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== - -colors@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -constructs@^3.2.0: - version "3.2.40" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.40.tgz#e8c0e1020ad254ff73d9ea6c85cc90c3a33c71f1" - integrity sha512-XtKn+Pzq8EZNe1zasQem6X09dprZ8pXvNxECKQLZC+jU5BdkgDKe0nak4Wp+k7uvDFlyh9NccaGtxqP6w2YS0A== - -crypt@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= - -diff@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -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== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - 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-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -ignore@^5.1.8: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -is-buffer@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -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== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonschema@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" - integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== - -lodash@^4.17.20: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== - -md5@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" - integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== - dependencies: - charenc "0.0.2" - crypt "0.0.2" - is-buffer "~1.1.6" - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -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== - -semver@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -table@^6.0.3: - version "6.0.4" - resolved "https://registry.yarnpkg.com/table/-/table-6.0.4.tgz#c523dd182177e926c723eb20e1b341238188aa0d" - integrity sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw== - dependencies: - ajv "^6.12.4" - lodash "^4.17.20" - slice-ansi "^4.0.0" - string-width "^4.2.0" - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index 1a99beb05e..d2e0983f0f 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -1,15 +1,15 @@ { "name": "mismatched-cdk-versions", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "build": "../../bin/scripts.js build" + "postinstall": "node ../helpers/copy-symlinks.js", + "build": "sst build" }, - "keywords": [], - "author": "", "dependencies": { - "@serverless-stack/resources": "../../../resources", + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5", "@aws-cdk/aws-cognito": "^1.55.0", "@aws-cdk/aws-dynamodb": "^1.55.0", "@aws-cdk/aws-iam": "1.57.0", diff --git a/packages/cli/test/mismatched-cdk-versions/yarn.lock b/packages/cli/test/mismatched-cdk-versions/yarn.lock deleted file mode 100644 index b79968a3b8..0000000000 --- a/packages/cli/test/mismatched-cdk-versions/yarn.lock +++ /dev/null @@ -1,475 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-cdk/assets@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.60.0.tgz#c9f315f3a7e6657adb2630764a0b6689c6ea8c23" - integrity sha512-QDs+KZ0a9A4eQiOH894W/nGW3A0vxE63hMcQbWCJx6BGEzF8mRlYhovrEWAc8T1hfO7Ze0ZOvrcznpjnxk650g== - dependencies: - "@aws-cdk/core" "1.60.0" - "@aws-cdk/cx-api" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-applicationautoscaling@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.60.0.tgz#a84974de862ea8e6a20fa2fb7b3b462c8066886e" - integrity sha512-DoTp7oW286zmuEAvvtT/XcPYc8xJe71v7EiSxjH2lbpnnp1ZuGWqqK6ZJHQuAKkfNh0ggni1AkAb/YUo4w4IFQ== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.60.0" - "@aws-cdk/aws-cloudwatch" "1.60.0" - "@aws-cdk/aws-iam" "1.60.0" - "@aws-cdk/core" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-autoscaling-common@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.60.0.tgz#9eb27ffb9b1c311168d66fd0d38d8e10938974fd" - integrity sha512-vkXIvJ4zmOkd39Trm1C07YdWL+GBRDSeAAqoc4rWbw/yAKEhvpqx/oNW4rRqABA1lC3490R/mSje7Dr8Z8y5Dw== - dependencies: - "@aws-cdk/aws-iam" "1.60.0" - "@aws-cdk/core" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-certificatemanager@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.60.0.tgz#6b179239578b36e68462f9a8936cd167bf043b96" - integrity sha512-kz1lbkYmWP/fmpPgYlODMseJUbSLlxtQJPlz5BN4lMkAcMpAsaPSLbU5/pO/XSqhPYl9vZb3NjCbNVdfQQaGhg== - dependencies: - "@aws-cdk/aws-iam" "1.60.0" - "@aws-cdk/aws-lambda" "1.60.0" - "@aws-cdk/aws-route53" "1.60.0" - "@aws-cdk/core" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-cloudformation@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.60.0.tgz#af74e5ebd710e750011e4926d3edd3463bc8c859" - integrity sha512-po+pj3LwxDEA5ReYLeNQ0UU4cXLKSguknL5w/9m2n1sip90XoxMI0a84q1NDs1cArEWnhqYY0rkfUydZmbCXqg== - dependencies: - "@aws-cdk/aws-iam" "1.60.0" - "@aws-cdk/aws-lambda" "1.60.0" - "@aws-cdk/aws-s3" "1.60.0" - "@aws-cdk/aws-sns" "1.60.0" - "@aws-cdk/core" "1.60.0" - "@aws-cdk/cx-api" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-cloudwatch@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.60.0.tgz#eb833c2e0eb4531070c138bd5ed562f8f105a538" - integrity sha512-12LK2Q/BR4HMwm2vBQHjQRyZT00FWGu9TO0wutJ78BYooqM4YpSdkRiNv74HRtG6RLPo9QmUFrUE5IFYpN0O2w== - dependencies: - "@aws-cdk/aws-iam" "1.60.0" - "@aws-cdk/core" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-codeguruprofiler@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.60.0.tgz#cf78a02c2eaa6dffbb06a7ab8f5519c9da5e0366" - integrity sha512-COcSgEUiz0wTaL9cCzxMiCIDbtA6AoFZjB2xVJXwm6YvkK4M2cUfiemTtSSsxGChHEkydHYdS0vZYqNesznOhQ== - dependencies: - "@aws-cdk/aws-iam" "1.60.0" - "@aws-cdk/core" "1.60.0" - -"@aws-cdk/aws-cognito@^1.55.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.60.0.tgz#0ea41f3fbce413874223e90266013ae34dcce667" - integrity sha512-NFnKnt8NzILvqPH4blOlnZMc3Qn4Gx1REF+Z3SHdoly/GHKRQ553nWGfCdGXhR+N3wgEb+UreaFnb19lZ794KQ== - dependencies: - "@aws-cdk/aws-certificatemanager" "1.60.0" - "@aws-cdk/aws-iam" "1.60.0" - "@aws-cdk/aws-lambda" "1.60.0" - "@aws-cdk/core" "1.60.0" - "@aws-cdk/custom-resources" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-dynamodb@^1.55.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.60.0.tgz#a7ab4a5482f69c48c2651c2d758711e609ba4cd8" - integrity sha512-ya3SGRk6gnVtZmReOdsJHJ+KlR1hz8OTIBL2RZ+1NhFqBJhVXYKVllJXc49iP2w6LsQuXcdRxbutrXqTk9uXyg== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.60.0" - "@aws-cdk/aws-cloudwatch" "1.60.0" - "@aws-cdk/aws-iam" "1.60.0" - "@aws-cdk/aws-kms" "1.60.0" - "@aws-cdk/aws-lambda" "1.60.0" - "@aws-cdk/core" "1.60.0" - "@aws-cdk/custom-resources" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-ec2@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.60.0.tgz#0dec15b2c81041c3ff7c6bcc102549a3286cfcc2" - integrity sha512-J1a9ffMLBBmUQcNVXFC14T7PU+n70WxGG3KFbapqretaAhPAtDh3bd/rCaLCmwj216f1t5XpH3fpeS7LGGqKuQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.60.0" - "@aws-cdk/aws-iam" "1.60.0" - "@aws-cdk/aws-kms" "1.60.0" - "@aws-cdk/aws-logs" "1.60.0" - "@aws-cdk/aws-s3" "1.60.0" - "@aws-cdk/aws-s3-assets" "1.60.0" - "@aws-cdk/aws-ssm" "1.60.0" - "@aws-cdk/cloud-assembly-schema" "1.60.0" - "@aws-cdk/core" "1.60.0" - "@aws-cdk/cx-api" "1.60.0" - "@aws-cdk/region-info" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-efs@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.60.0.tgz#017f710bdabb4bbad3c334a8bf469f48c7db57b1" - integrity sha512-+WZ51FfJAng3buDMFa5PnGIKPuaSdZ08QAIryZUiDMSo0bKw7fZk40++pk18e7CE1vHnS6NI1nR6wINwXyfNGA== - dependencies: - "@aws-cdk/aws-ec2" "1.60.0" - "@aws-cdk/aws-kms" "1.60.0" - "@aws-cdk/cloud-assembly-schema" "1.60.0" - "@aws-cdk/core" "1.60.0" - "@aws-cdk/cx-api" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-events@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.60.0.tgz#d22d7def2b4994498e84b8efa229397a92862c57" - integrity sha512-UxXrGvuPv3gvlogg8kHFCyhvZuKLFrgYKoAzQhPZAYIl8ojVQiNn67LLdlnZ5R7Th8h+BJRRRKZmEb/R1fqYjQ== - dependencies: - "@aws-cdk/aws-iam" "1.60.0" - "@aws-cdk/core" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-iam@1.57.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.57.0.tgz#d6c8e901fa81e3c872d209bd46fd41e3f024d6b2" - integrity sha512-vOltgt7CDEZ9Zko5tBhxP6bwuOAJA5ev04w1rwAcDD8W4UGHnz+2D1b0eAHfLhsICVagwfNEG+KmDyyKzrzyFw== - dependencies: - "@aws-cdk/core" "1.57.0" - "@aws-cdk/region-info" "1.57.0" - constructs "^3.0.2" - -"@aws-cdk/aws-iam@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.60.0.tgz#e78a097010be0984e5596094c871f547b3f50b78" - integrity sha512-p4Jm8Ws7ENuFduypLku/eKViWWBk7EXMXYUizqsI2/qIurwfkPJFrUEOBJiG4etr+5tRweTWM8KdK7jC823Ujw== - dependencies: - "@aws-cdk/core" "1.60.0" - "@aws-cdk/region-info" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-kms@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.60.0.tgz#a599e39555346d444ff4dc7c038aab01991fced0" - integrity sha512-BDkcFMya1XjAvfW8D6wFXtSxHrVC1rYwrj8QcY6wKpx6m/QD7WOUOhtoZCsx/tC8lds+aS04luKJp6hgXfn4eA== - dependencies: - "@aws-cdk/aws-iam" "1.60.0" - "@aws-cdk/core" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-lambda@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.60.0.tgz#f9015f2c06328ee52634c202a38a945c6e7e4667" - integrity sha512-xI5kG6zMWyYTMVagEzfqBCNe1DNpKegdjHoWFdnBVnxubI63iOARxTQQLuMRE4bZFR3gDprVgGh9auDO3RZ2jw== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.60.0" - "@aws-cdk/aws-cloudwatch" "1.60.0" - "@aws-cdk/aws-codeguruprofiler" "1.60.0" - "@aws-cdk/aws-ec2" "1.60.0" - "@aws-cdk/aws-efs" "1.60.0" - "@aws-cdk/aws-events" "1.60.0" - "@aws-cdk/aws-iam" "1.60.0" - "@aws-cdk/aws-logs" "1.60.0" - "@aws-cdk/aws-s3" "1.60.0" - "@aws-cdk/aws-s3-assets" "1.60.0" - "@aws-cdk/aws-sqs" "1.60.0" - "@aws-cdk/core" "1.60.0" - "@aws-cdk/cx-api" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-logs@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.60.0.tgz#abc367098f3b8378ce4da89c83be6cd847d5564f" - integrity sha512-cMtMlq2SLc1vJILrgoUheCotQeHkJPRajz/lP2vvY/vL1Bu5RJsJfNiOO+8ZFN3wNOK+foM1h+LV5dAyl9n7Bw== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.60.0" - "@aws-cdk/aws-iam" "1.60.0" - "@aws-cdk/core" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-route53@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.60.0.tgz#946349cbdd524a306788d2b80eab531e37453b93" - integrity sha512-WBUOfUAiLQR0N9f2fXBmYjEtHN79mvLqXmN2i0rifxs8hEn4OXWXHYwtOqU1nAziF127D3urYgOPlZZ99PjJ4Q== - dependencies: - "@aws-cdk/aws-ec2" "1.60.0" - "@aws-cdk/aws-logs" "1.60.0" - "@aws-cdk/cloud-assembly-schema" "1.60.0" - "@aws-cdk/core" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-s3-assets@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.60.0.tgz#6866c182abf7f0d26873b74a680e3355dabc82cf" - integrity sha512-rBxJqwjWBuhPrV7svY+10qcBS8DJR+IGATbn7viezSlEVTVyPeHCOVJfMvNPhsum9QMZVQE0cbQEGT+Mr8B9Cw== - dependencies: - "@aws-cdk/assets" "1.60.0" - "@aws-cdk/aws-iam" "1.60.0" - "@aws-cdk/aws-kms" "1.60.0" - "@aws-cdk/aws-s3" "1.60.0" - "@aws-cdk/core" "1.60.0" - "@aws-cdk/cx-api" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-s3@1.60.0", "@aws-cdk/aws-s3@^1.57.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.60.0.tgz#ed12ace237a2cb8c81239d53f5fb4785076203a4" - integrity sha512-Kl+Lfe+5+5m+PHoE06xNs9rAF0Cy8i4ZI9NBfxnKxLb+5MEiVIwHWK91k8ofsTH7T/s/1Pmrw7TwwipCKhCAvA== - dependencies: - "@aws-cdk/aws-events" "1.60.0" - "@aws-cdk/aws-iam" "1.60.0" - "@aws-cdk/aws-kms" "1.60.0" - "@aws-cdk/core" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-sns@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.60.0.tgz#5e98af08a7123c8d5a02ed9ce661352b196e9085" - integrity sha512-N37Fo8WQTkv9JAmiZeI5gPSuaL1nftNRXOjX6i+WRgx/wpWdnAzdMcRnGy/ValzgVyfk8lF3UkgZWORGHhlHsA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.60.0" - "@aws-cdk/aws-events" "1.60.0" - "@aws-cdk/aws-iam" "1.60.0" - "@aws-cdk/aws-kms" "1.60.0" - "@aws-cdk/aws-sqs" "1.60.0" - "@aws-cdk/core" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-sqs@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.60.0.tgz#95d66315febdd313ca1fa6832bac04770e27a765" - integrity sha512-g9FpZ6xrxvSqhvd+QS283XrJwFdDnJMf20Z7Iyx24HTdkTK25sjbAZ5xgjZl57VlDtl1E+ITzbuAvv6jGQTAHQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.60.0" - "@aws-cdk/aws-iam" "1.60.0" - "@aws-cdk/aws-kms" "1.60.0" - "@aws-cdk/core" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/aws-ssm@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.60.0.tgz#90351b23c168099c60f7719531f79eb17c27bb5d" - integrity sha512-AbsyfASy8voakl1nBiJxmSPoTmOKsvWs7NuYb2P4/EzHs/Qo355zFkhPJf8AdSETYXlrISBUsptIVyBWeCxICw== - dependencies: - "@aws-cdk/aws-iam" "1.60.0" - "@aws-cdk/aws-kms" "1.60.0" - "@aws-cdk/cloud-assembly-schema" "1.60.0" - "@aws-cdk/core" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/cloud-assembly-schema@1.56.0": - version "1.56.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.56.0.tgz#b2b3cb687ead39ab8cecfaac6a4bee14666d6abc" - integrity sha512-QLuUOoEzrTyiBbPue1QzMmMLjh6FjuD6dIPJ1O81jPpBuIYiAN7MXzXQ9+4gqM0UrnMpSzB8DW2joENDPtJgFg== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/cloud-assembly-schema@1.57.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.57.0.tgz#bf9c63cf3ca8cbf0f37886b43b12f5fab5c7c989" - integrity sha512-IJyV3pgMvpbaIVYpUkBGsxIWh+VK7TxuTbEyHfBra5+VgXLoFdSG2UO80b4v6ou+occRqUGbqAnc/VfYr1uuvw== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/cloud-assembly-schema@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.60.0.tgz#11eb4bb3b243aa8771f5cee9bda188112e696a50" - integrity sha512-FI0YB6h+SjxChfjnEpQfOYez1B01STDGhn4FQkZ0lbZuAkfW3DUbZYHzR8bTwKo/wgGt/vJ+MYrqxdMyLn62og== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/core@1.56.0": - version "1.56.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.56.0.tgz#499bf691a9937f5f5dfb2b83330fc3f9d9294662" - integrity sha512-MeImBUTbU8ipZAC6gYQHfJRXH+63XD1VBv9g1AO5GpERKHOZ58qiBroQOkVWD5/u+iasXJ7JSC9JKUBC/+2PlQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.56.0" - "@aws-cdk/cx-api" "1.56.0" - constructs "^3.0.2" - fs-extra "^9.0.1" - minimatch "^3.0.4" - -"@aws-cdk/core@1.57.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.57.0.tgz#44e19a18f05d0b0742e5d406474000ef2f6f5db9" - integrity sha512-NOE9u2tVwEF+EN5CYaoC34csBgKLA9rjCWCB6R64RPQ2MlhBFCvQxdG2ZO26nOOvH+yv/3zlylM7F546mfQMHg== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.57.0" - "@aws-cdk/cx-api" "1.57.0" - constructs "^3.0.2" - fs-extra "^9.0.1" - minimatch "^3.0.4" - -"@aws-cdk/core@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.60.0.tgz#d4c8a109bb52d9bd9ed3500a27cd2cc7a9217656" - integrity sha512-h6P5z6E/8ttINA9IqrFxXamHZraPj1NlCE83I5QHaWPACaVe+EJbvjU3dITDyK/+fGjmQ/1m4rFaNMyBd43mVg== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.60.0" - "@aws-cdk/cx-api" "1.60.0" - constructs "^3.0.2" - fs-extra "^9.0.1" - minimatch "^3.0.4" - -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - fs-extra "^9.0.1" - minimatch "^3.0.4" - -"@aws-cdk/custom-resources@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.60.0.tgz#295828b349e8402a6d7e36a9dd73f3cef990552d" - integrity sha512-qt2w7cOuADrkt8echZlNWVjvERcYW2862QoTvbUnTgllAuXDvYBavlYd53uoUrm20SCw+qFlK8CBMaf9Jn4IHA== - dependencies: - "@aws-cdk/aws-cloudformation" "1.60.0" - "@aws-cdk/aws-iam" "1.60.0" - "@aws-cdk/aws-lambda" "1.60.0" - "@aws-cdk/aws-logs" "1.60.0" - "@aws-cdk/aws-sns" "1.60.0" - "@aws-cdk/core" "1.60.0" - constructs "^3.0.2" - -"@aws-cdk/cx-api@1.56.0": - version "1.56.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.56.0.tgz#36bf05de73d26ecc69054855f238beaf0bf2a482" - integrity sha512-IuBmbz025AnuYAKv+ZOvnRV7Wwa/wdCiqiJ3BlVEqPsdvE4ZUMJTqLTY25ho5VT07o8Z/iQg7M6dRs9ccVC9Dw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.56.0" - semver "^7.2.2" - -"@aws-cdk/cx-api@1.57.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.57.0.tgz#e6ad6936e1781b821317be60978fb20111cb4d16" - integrity sha512-h2qTTofE8cE1rSZB9ny+7AjjmxEdKoxhq+GsQebQ5NZkrN/Rbc+DL77S/GG53koPG4u/ZoA4UcdLz/JqiGgdPA== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.57.0" - semver "^7.2.2" - -"@aws-cdk/cx-api@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.60.0.tgz#e9fbbeae6743eaa9f197c98d362802328943cfea" - integrity sha512-Lx1KOB4HowdlPiftkplgaCZWYPeOEeqZgCNxeo1lRa3ypDYkrpcwVsLgLIsWhph0Lb7qtmrMmubiwaE1VTiLwQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.60.0" - semver "^7.2.2" - -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" - -"@aws-cdk/region-info@1.57.0": - version "1.57.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.57.0.tgz#ae45fcf82fe7c66348c8b7ecfbb738dfb08bde9d" - integrity sha512-U2V2f/PdD2VDGVwGGShb+7dqhmEEmShlOOdvDQvTmAg2SW6HwOt/rsz+va6EzvWV7fmxtFEfMiJVpnheZ1Vwyg== - -"@aws-cdk/region-info@1.60.0": - version "1.60.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.60.0.tgz#e5f337abcad54b3fbdddfed97233bee72f2e83c3" - integrity sha512-rz2HUVTM42wVXbx+T2nwT8WKSY9BFB+ThhdGAT81l1dsi/Vtne1Ql5AlnBRCWW4TXR6Nvt3DjGEsG4o6DZmsdw== - -"@serverless-stack/resources@../../../resources": - version "0.1.10" - dependencies: - "@aws-cdk/core" "1.61.0" - -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== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -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" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -constructs@^3.0.2, constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== - -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -semver@^7.2.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index 80d9dfa1f4..4285133cfa 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -1,15 +1,15 @@ { "name": "stack-no-prefix", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "build": "../../bin/scripts.js build" + "postinstall": "node ../helpers/copy-symlinks.js", + "build": "sst build" }, - "keywords": [], - "author": "", "dependencies": { - "@serverless-stack/resources": "../../../resources", + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5", "@aws-cdk/core": "1.74.0" }, "license": "ISC" diff --git a/packages/cli/test/stack-no-prefix/yarn.lock b/packages/cli/test/stack-no-prefix/yarn.lock deleted file mode 100644 index 252e46aa79..0000000000 --- a/packages/cli/test/stack-no-prefix/yarn.lock +++ /dev/null @@ -1,320 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-cdk/assets@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.74.0.tgz#8aea948a32afcf7c60449346a087c4b5aecff251" - integrity sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ== - dependencies: - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-applicationautoscaling@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz#ad5e946e68bd4094c3236e983d36f67d66135dfc" - integrity sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw== - dependencies: - "@aws-cdk/aws-autoscaling-common" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-autoscaling-common@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz#f6bcbb987830f299b6e2ef454944afdde9a8a82e" - integrity sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-cloudwatch@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz#94a29d2998a5c08412084b346d404b3a8b90f8a8" - integrity sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-codeguruprofiler@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz#d749688e9edb252ce6fc68efa4f9977f7ba02cb6" - integrity sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-ec2@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz#eae31df9045ca9374daf6b1562674e31d8053aff" - integrity sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/aws-ssm" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-efs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz#367b89f14ccd090f98227dbc975076571b31faac" - integrity sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA== - dependencies: - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-events@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz#2ed5a4cdd737ce4c8950506df496d0b43ac6aa12" - integrity sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-iam@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz#c255c9676fb6048ab27c00d111ed5e7d8b46877c" - integrity sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA== - dependencies: - "@aws-cdk/core" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-kms@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz#73531f7b5d2542eb5e3f7bb54604944921e34995" - integrity sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-lambda-nodejs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.74.0.tgz#aa818270e4dcd74be51d402cdb114da311b3c966" - integrity sha512-1mc8I+Yz43El8O8SjsfkABsI31tcpO5e3fAz7/40DKuFgM9jkL6vyiL55MLIckAqmE2N9mRYU0xF4RC7uRZdmQ== - dependencies: - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-lambda@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz#52175fbc9e679ca5c0f4d15e0666c99fc4a953d0" - integrity sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-codeguruprofiler" "1.74.0" - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-efs" "1.74.0" - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/aws-sqs" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-logs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz#cd40afe70ffeb5250ecea1db0ee0a2f68fb2084a" - integrity sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-s3-assets@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz#7f1988f3931e95d88a8c1357f98c47f7f9b73dee" - integrity sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg== - dependencies: - "@aws-cdk/assets" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-s3@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz#5b53839c3af0f67bfb1e96061f6a1ea5be445fe9" - integrity sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q== - dependencies: - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-sqs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz#998da5838d4310805432f0cf55fcc7c8f34657e2" - integrity sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/aws-ssm@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz#426dd65c0b933618d5c196cb38386c1035b0fdc4" - integrity sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - constructs "^3.2.0" - -"@aws-cdk/cloud-assembly-schema@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz#f1bbd8411ec320dd9e14ef2dce626a05019c42bc" - integrity sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw== - dependencies: - jsonschema "^1.4.0" - semver "^7.3.2" - -"@aws-cdk/core@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.74.0.tgz#132d31c0ab9d39394827431ccd804cf10de34273" - integrity sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - "@balena/dockerignore" "^1.0.2" - constructs "^3.2.0" - fs-extra "^9.0.1" - ignore "^5.1.8" - minimatch "^3.0.4" - -"@aws-cdk/cx-api@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz#922c11389d723eadef2bc12666ced4980fe9e4cc" - integrity sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - semver "^7.3.2" - -"@aws-cdk/region-info@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.74.0.tgz#e53eabe2d8980c360e63ea956615253551005182" - integrity sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA== - -"@balena/dockerignore@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" - integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== - -"@serverless-stack/resources@../../../resources": - version "0.4.3" - dependencies: - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-lambda-nodejs" "1.74.0" - "@aws-cdk/core" "1.74.0" - -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== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -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" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -constructs@^3.2.0: - version "3.2.40" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.40.tgz#e8c0e1020ad254ff73d9ea6c85cc90c3a33c71f1" - integrity sha512-XtKn+Pzq8EZNe1zasQem6X09dprZ8pXvNxECKQLZC+jU5BdkgDKe0nak4Wp+k7uvDFlyh9NccaGtxqP6w2YS0A== - -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -ignore@^5.1.8: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonschema@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" - integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -semver@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index 8a1feaa7ab..ce1f95cd94 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -1,15 +1,15 @@ { "name": "stack-set-env", - "version": "1.0.0", - "description": "", - "main": "index.js", + "private": true, + "description": "tests", + "version": "0.0.1", "scripts": { - "build": "../../bin/scripts.js build" + "postinstall": "node ../helpers/copy-symlinks.js", + "build": "sst build" }, - "keywords": [], - "author": "", "dependencies": { - "@serverless-stack/resources": "../../../resources" + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5" }, "license": "ISC" } diff --git a/packages/cli/test/stack-set-env/yarn.lock b/packages/cli/test/stack-set-env/yarn.lock deleted file mode 100644 index 4a2a4116c5..0000000000 --- a/packages/cli/test/stack-set-env/yarn.lock +++ /dev/null @@ -1,109 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-cdk/cloud-assembly-schema@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.61.0.tgz#d4d7f75cba3c52bb0b5406085dc77eefc6393aa9" - integrity sha512-+D1K159eNxWDGJNiyQcwczddzqFDS08b2VAJrgJFvqhMNbNWWuYxxxEJoh5jH9iULr2a52WXrrQfF72HbB0jUQ== - dependencies: - jsonschema "^1.2.5" - semver "^7.2.2" - -"@aws-cdk/core@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.61.0.tgz#817689a087cb97741fd5e4b407ee603610f30fb3" - integrity sha512-g6vOR7zqWfbSzIM2kqUPH0Tdk4tOUFGX1TM5crty1ndkNja84PvAzEjQZr34U2aCGk+EI2pyB/4D7BLiAhAvKw== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - "@aws-cdk/cx-api" "1.61.0" - constructs "^3.0.4" - fs-extra "^9.0.1" - minimatch "^3.0.4" - -"@aws-cdk/cx-api@1.61.0": - version "1.61.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.61.0.tgz#23f0e0cff978277626d42091907b71a6c4d98580" - integrity sha512-SOn1aLhp2Zot1Qqev1REbgL2n0Ccl9sfg1nJMWnGxAmjarazJfvW22llYKnJPuFkgHswaBlifBxAA4WgKbUn6g== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.61.0" - semver "^7.2.2" - -"@serverless-stack/resources@../../../resources": - version "0.1.10" - dependencies: - "@aws-cdk/core" "1.61.0" - -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== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -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" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -constructs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.0.4.tgz#eb1ed5b80f6600b8d50de83971357ae0fe8e29a2" - integrity sha512-CDvg7gMjphE3DFX4pzkF6j73NREbR8npPFW8Mx/CLRnMR035+Y1o1HrXIsNSss/dq3ZUnNTU9jKyd3fL9EOlfw== - -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonschema@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" - integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -semver@^7.2.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 66a13aa376..1ed6942855 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -34,7 +34,7 @@ export interface BuildProps { /** * The root path for the SST app. */ - readonly appPath: string; + readonly appPath?: string; /** * The local WebSockets debug enpoint used by `sst start`. @@ -84,8 +84,8 @@ export class App extends cdk.App { constructor( deployProps: DeployProps = {}, - buildProps: BuildProps, - props: AppProps = {} + props: AppProps = {}, + buildProps: BuildProps = {}, ) { super(props); @@ -93,7 +93,7 @@ export class App extends cdk.App { this.name = deployProps.name || "my-app"; this.region = deployProps.region || "us-east-1"; - this.appPath = buildProps.appPath; + this.appPath = buildProps.appPath || ""; if (buildProps.debugEndpoint) { this.local = true; diff --git a/yarn.lock b/yarn.lock index f1ef3706a7..630415b853 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,17 @@ # yarn lockfile v1 +"@aws-cdk/assert@1.74.0": + version "1.74.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.74.0.tgz#82795a3bb21ede93288a60322804f6f4e2d4959e" + integrity sha512-5M3M4lcSS2dGPgVANhv5GjqC6nNBy9bL1XECAJj3lg7q+6zJ00+0wq4bB0wyvm/mE+S0axkGZ4LVHF5QA2gCfQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/cloudformation-diff" "1.74.0" + "@aws-cdk/core" "1.74.0" + "@aws-cdk/cx-api" "1.74.0" + constructs "^3.2.0" + "@aws-cdk/assets@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.74.0.tgz#8aea948a32afcf7c60449346a087c4b5aecff251" @@ -11,6 +22,15 @@ "@aws-cdk/cx-api" "1.74.0" constructs "^3.2.0" +"@aws-cdk/assets@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.81.0.tgz#b6feee81c02e78c9f34dca42d54689fd563b28b1" + integrity sha512-rhBiWsSe5iJTl52xL1+S4ulMIZPFKOnfzFP6kYfq24M7rljFgT8N3p1XgeT2VAWxVWyOWbOi68lldj8fgFcdLw== + dependencies: + "@aws-cdk/core" "1.81.0" + "@aws-cdk/cx-api" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/aws-apigatewayv2-integrations@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2-integrations/-/aws-apigatewayv2-integrations-1.74.0.tgz#a242aaa74e0f294da9b3beefd46a28fb53de5355" @@ -48,6 +68,17 @@ "@aws-cdk/core" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-applicationautoscaling@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.81.0.tgz#21febdccd9d58e9d53ea39afb9d4a96aafc223d4" + integrity sha512-69HrZ/Oxbc7vNj9Urv3Cdx2gHzv4Q2+LvsEcGJEKS4yayQGGyoy8bc9yRmkEostO6p0VwfCPUBpH3jn8ZbFl+g== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.81.0" + "@aws-cdk/aws-cloudwatch" "1.81.0" + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/core" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/aws-autoscaling-common@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz#f6bcbb987830f299b6e2ef454944afdde9a8a82e" @@ -57,6 +88,15 @@ "@aws-cdk/core" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-autoscaling-common@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.81.0.tgz#f65daa0e084d5db715794428f19366c55d69691a" + integrity sha512-weiDP9HVsAsp3DgcjhcWqtaqMpomrX5zQzlH7ujmDqUrTeBKdSBt58B0TcYpctCu4oKmBSGB3ka93Y//TH7ETg== + dependencies: + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/core" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/aws-certificatemanager@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.74.0.tgz#35b07c4b396a3db96da5d431e549460d1edc2251" @@ -68,6 +108,17 @@ "@aws-cdk/core" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-certificatemanager@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.81.0.tgz#b7469164cae692c9174e8918bce7bd225816d531" + integrity sha512-4Eq0MnNlBFapF5zPFazc7T4H9k0oza4W7IT8o+xkMZkvs15538E/aE+6EYo29X8JSy56Vk3iT5GIZJKIczJFsQ== + dependencies: + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/aws-lambda" "1.81.0" + "@aws-cdk/aws-route53" "1.81.0" + "@aws-cdk/core" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/aws-cloudformation@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.74.0.tgz#04fffb02403fb52ee05ec43172b845a29a903a9e" @@ -81,6 +132,19 @@ "@aws-cdk/cx-api" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-cloudformation@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.81.0.tgz#7019430cc3cb79009032a9cb58b420168dd32d27" + integrity sha512-45YxS/dYPRCQAjSVwFP8UcsXmIMd79RGPXkbVy1eE/dwEQl/nPN40ehiOn6LlcF/Q/QbxmxuXgKyMH3Mr5WDTw== + dependencies: + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/aws-lambda" "1.81.0" + "@aws-cdk/aws-s3" "1.81.0" + "@aws-cdk/aws-sns" "1.81.0" + "@aws-cdk/core" "1.81.0" + "@aws-cdk/cx-api" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/aws-cloudwatch@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz#94a29d2998a5c08412084b346d404b3a8b90f8a8" @@ -90,6 +154,15 @@ "@aws-cdk/core" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-cloudwatch@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.81.0.tgz#590373beb27a7bd1c7361a38ec6d392ab18b3724" + integrity sha512-7kTlVVN9rtqJtxtAY9AZ62OLDhYNhdGXeEDPKqdrRr3euoQ7F7zTZ+wsMXvTurJ3ATlKHrHPymDWonVqMpYhvg== + dependencies: + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/core" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/aws-codeguruprofiler@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz#d749688e9edb252ce6fc68efa4f9977f7ba02cb6" @@ -99,6 +172,15 @@ "@aws-cdk/core" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-codeguruprofiler@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.81.0.tgz#acbaf9c985e675fc8e948bb66470e25cf4b670da" + integrity sha512-RHSINKRw0UxxIk8xP6hwArzYkp4d/zHa3pXReJOfZJgOJiid5iWrJcArGYiAPqI6C7p0Rj2j1/KfGh1Ex9qECw== + dependencies: + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/core" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/aws-cognito@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.74.0.tgz#740f51269cbe00b46ae6327814dd8c0dbb470912" @@ -112,6 +194,19 @@ constructs "^3.2.0" punycode "^2.1.1" +"@aws-cdk/aws-cognito@^1.55.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.81.0.tgz#3911c5314a8adb730f51782d05abd8f39e5cba65" + integrity sha512-RBmw9VAd3TUcJQQQJhehBaoX9HKu5ilKsk+a7RmEp3YEMD3gZae7eIK867S7VauThUJK6mQ6ikpMQ9bRx8IL5A== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.81.0" + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/aws-lambda" "1.81.0" + "@aws-cdk/core" "1.81.0" + "@aws-cdk/custom-resources" "1.81.0" + constructs "^3.2.0" + punycode "^2.1.1" + "@aws-cdk/aws-dynamodb@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.74.0.tgz#7e0ef530e9c3d7301a9db616ddf6d650f7acb76f" @@ -126,6 +221,20 @@ "@aws-cdk/custom-resources" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-dynamodb@^1.55.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.81.0.tgz#dc06e26e239818b683eb2a518608a1986ccbeff0" + integrity sha512-R7DaHMQu1DtnIWveC6Icl63wLyOx4ETP4wRz6lBC/c57JJCci7Wt3+X7SUFsqjO9pSgJK2wTw6oghz09WH8lTw== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.81.0" + "@aws-cdk/aws-cloudwatch" "1.81.0" + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/aws-kms" "1.81.0" + "@aws-cdk/aws-lambda" "1.81.0" + "@aws-cdk/core" "1.81.0" + "@aws-cdk/custom-resources" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/aws-ec2@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz#eae31df9045ca9374daf6b1562674e31d8053aff" @@ -144,6 +253,48 @@ "@aws-cdk/region-info" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-ec2@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.81.0.tgz#91f31dd82ce44b41c171a00f1814c96d9df7b305" + integrity sha512-xhxClHAoD0RTYdrW6Q5m7Z78C2jTxORNzk6FRl46djowAACoWpo3ZzqaJEnL/buW/Yn1oIMzD9B7Clsc5ruiSQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.81.0" + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/aws-kms" "1.81.0" + "@aws-cdk/aws-logs" "1.81.0" + "@aws-cdk/aws-s3" "1.81.0" + "@aws-cdk/aws-s3-assets" "1.81.0" + "@aws-cdk/aws-ssm" "1.81.0" + "@aws-cdk/cloud-assembly-schema" "1.81.0" + "@aws-cdk/core" "1.81.0" + "@aws-cdk/cx-api" "1.81.0" + "@aws-cdk/region-info" "1.81.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ecr-assets@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.81.0.tgz#2e60b5d451fc55199b907d9e2185833b2027a408" + integrity sha512-yQP8o99NafJSCrEhTd+ILrTdJT9JvLI6R42xSpMInFQ6Wc6VazKuK9Xqc3rCdkUj4bSdNqXrX4jzwOs5NIiHNg== + dependencies: + "@aws-cdk/assets" "1.81.0" + "@aws-cdk/aws-ecr" "1.81.0" + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/aws-s3" "1.81.0" + "@aws-cdk/core" "1.81.0" + "@aws-cdk/cx-api" "1.81.0" + constructs "^3.2.0" + minimatch "^3.0.4" + +"@aws-cdk/aws-ecr@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr/-/aws-ecr-1.81.0.tgz#c4b4674688c7cab775ffe5c865413025d9e51009" + integrity sha512-T6Pe9JCXiv45KT+ZwoEhbi+kTQQkdWlpGvbDzEPUxVa/PkndN/yecVeq/ZCNMIERF4LBTY3igo2o06BA0xIypA== + dependencies: + "@aws-cdk/aws-events" "1.81.0" + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/core" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/aws-efs@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz#367b89f14ccd090f98227dbc975076571b31faac" @@ -156,6 +307,18 @@ "@aws-cdk/cx-api" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-efs@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.81.0.tgz#88a14e1ad9b08891dd5e62949ec40e2426349062" + integrity sha512-3pcOktvVcjIkuK05jaoI3gI7XF4H0z2jlWnCO/2VxpCTDO7z8BjgZhMFqeSB45EoCCTlf8W/NxDPo2asAXCG1g== + dependencies: + "@aws-cdk/aws-ec2" "1.81.0" + "@aws-cdk/aws-kms" "1.81.0" + "@aws-cdk/cloud-assembly-schema" "1.81.0" + "@aws-cdk/core" "1.81.0" + "@aws-cdk/cx-api" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/aws-elasticloadbalancingv2@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.74.0.tgz#794ee49baac329e43884748ecda3e66348fd5088" @@ -182,6 +345,24 @@ "@aws-cdk/core" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-events@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.81.0.tgz#8aa9b7c5163ef27df9b1537ec52751b4f3995b05" + integrity sha512-dfzGSc9SbB8TeOARz/tsZyqRpYWTsUWgJtX22wj26NzHJd0gnbgoSNj4p/PLmFSTzbHoYXngZfLjRyx19xlVXQ== + dependencies: + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/core" "1.81.0" + constructs "^3.2.0" + +"@aws-cdk/aws-iam@1.57.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.57.0.tgz#d6c8e901fa81e3c872d209bd46fd41e3f024d6b2" + integrity sha512-vOltgt7CDEZ9Zko5tBhxP6bwuOAJA5ev04w1rwAcDD8W4UGHnz+2D1b0eAHfLhsICVagwfNEG+KmDyyKzrzyFw== + dependencies: + "@aws-cdk/core" "1.57.0" + "@aws-cdk/region-info" "1.57.0" + constructs "^3.0.2" + "@aws-cdk/aws-iam@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz#c255c9676fb6048ab27c00d111ed5e7d8b46877c" @@ -191,6 +372,15 @@ "@aws-cdk/region-info" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-iam@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.81.0.tgz#120107ac24a417f461f698385c7bf3dab6bfd223" + integrity sha512-Vgoj8q+E8Qj486rwcw5OsPEZLeWU3X8vT2eqEwb7CeK/Ct1MJWmvZszUQCtUTr/bPnEv91DsBl/0umJwxGrb3w== + dependencies: + "@aws-cdk/core" "1.81.0" + "@aws-cdk/region-info" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/aws-kms@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz#73531f7b5d2542eb5e3f7bb54604944921e34995" @@ -200,6 +390,16 @@ "@aws-cdk/core" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-kms@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.81.0.tgz#9ede0b4cac909817bf5fca9cb56a5dba70e30954" + integrity sha512-oC8Og9nGJFKpeYmi4bxoAfM0lf0E1VI4lpuSv+mYv2ixdQ5LwbB0gyKxtQiNnyyYSLDAIOv3Mk9uUa0l5aKwfQ== + dependencies: + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/core" "1.81.0" + "@aws-cdk/cx-api" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/aws-lambda-nodejs@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.74.0.tgz#aa818270e4dcd74be51d402cdb114da311b3c966" @@ -229,6 +429,29 @@ "@aws-cdk/cx-api" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-lambda@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.81.0.tgz#5d8c41d1eafbae51feb654424ba2d695636f5623" + integrity sha512-qyQsHM6N8y34tV+Fnv26CF5qXAxOsJsQprQJzHY7rv3d+1cIaI8F3Wcg7JxxhTo/7V8ZE89nmfhutFsELM8CHA== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.81.0" + "@aws-cdk/aws-cloudwatch" "1.81.0" + "@aws-cdk/aws-codeguruprofiler" "1.81.0" + "@aws-cdk/aws-ec2" "1.81.0" + "@aws-cdk/aws-ecr" "1.81.0" + "@aws-cdk/aws-ecr-assets" "1.81.0" + "@aws-cdk/aws-efs" "1.81.0" + "@aws-cdk/aws-events" "1.81.0" + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/aws-kms" "1.81.0" + "@aws-cdk/aws-logs" "1.81.0" + "@aws-cdk/aws-s3" "1.81.0" + "@aws-cdk/aws-s3-assets" "1.81.0" + "@aws-cdk/aws-sqs" "1.81.0" + "@aws-cdk/core" "1.81.0" + "@aws-cdk/cx-api" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/aws-logs@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz#cd40afe70ffeb5250ecea1db0ee0a2f68fb2084a" @@ -241,6 +464,18 @@ "@aws-cdk/core" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-logs@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.81.0.tgz#6589b2d9510659b7633124ff99f740524ddeb6e7" + integrity sha512-iFuRXwWbVvUGOt/2H4CaBdD2Xl9YJgw3Jhli0BlssjfI3C8R+8HM3VSJKg0O4V3puTr1S5RJfbMLqDXt4MOmxQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.81.0" + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/aws-kms" "1.81.0" + "@aws-cdk/aws-s3-assets" "1.81.0" + "@aws-cdk/core" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/aws-route53@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.74.0.tgz#f9b3c770cf613227bba31c4a7499c8f19966f3e4" @@ -252,6 +487,18 @@ "@aws-cdk/core" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-route53@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.81.0.tgz#06d9a43695e3a5b8ec0c79a291a6963f2c380c34" + integrity sha512-trnWcspC5BpNFPsOSX2x+VUaN/XnwZcPk5ZmSUQ3scypkhmWtb+vHgXlfO9T3Tnch/xaJyB5Suo5WXuDTSNFDA== + dependencies: + "@aws-cdk/aws-ec2" "1.81.0" + "@aws-cdk/aws-logs" "1.81.0" + "@aws-cdk/cloud-assembly-schema" "1.81.0" + "@aws-cdk/core" "1.81.0" + "@aws-cdk/custom-resources" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/aws-s3-assets@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz#7f1988f3931e95d88a8c1357f98c47f7f9b73dee" @@ -265,6 +512,19 @@ "@aws-cdk/cx-api" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-s3-assets@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.81.0.tgz#a7042a7e2b522150f7f9cba59aca4a898f8c386f" + integrity sha512-kNSkOsR1mJGrTKAMGVbiduDGWAJc7W8oHls37Ncm/26AcA4hLc/3fQanTF3f1J44TJbQ+EIdcLNcm+yBtJLmiA== + dependencies: + "@aws-cdk/assets" "1.81.0" + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/aws-kms" "1.81.0" + "@aws-cdk/aws-s3" "1.81.0" + "@aws-cdk/core" "1.81.0" + "@aws-cdk/cx-api" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/aws-s3@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz#5b53839c3af0f67bfb1e96061f6a1ea5be445fe9" @@ -276,6 +536,17 @@ "@aws-cdk/core" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-s3@1.81.0", "@aws-cdk/aws-s3@^1.57.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.81.0.tgz#67deac6a8b638bae41b04a9c3526ffc5458ae382" + integrity sha512-eCgBUIzPGnMR6Xp68XSVv2XjJitDUeTNIvfN0WtmwqdDvi+XxziJShEbnw/IqbXbesNV9tF0YqyFZGYPY03Ykw== + dependencies: + "@aws-cdk/aws-events" "1.81.0" + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/aws-kms" "1.81.0" + "@aws-cdk/core" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/aws-servicediscovery@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.74.0.tgz#6e1145a4b85371431e8f6b21ce6ca7c9d855680c" @@ -312,6 +583,19 @@ "@aws-cdk/core" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-sns@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.81.0.tgz#4eb3c5184b658c1d98fa8e118b9aac5f35af0fb7" + integrity sha512-exltTnEbfsdBcKCp+mINKHTscZ+GOVyAKpgt3NmtkZHrrFtx2Ap4i0XtoJqqojnPHbSpjzDdhkiTmuvZqf4lWg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.81.0" + "@aws-cdk/aws-events" "1.81.0" + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/aws-kms" "1.81.0" + "@aws-cdk/aws-sqs" "1.81.0" + "@aws-cdk/core" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/aws-sqs@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz#998da5838d4310805432f0cf55fcc7c8f34657e2" @@ -323,6 +607,17 @@ "@aws-cdk/core" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-sqs@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.81.0.tgz#dd158dce698cac3ab7ae1c84cd449e703e5953aa" + integrity sha512-xmoTdyQ4l8M5dVTYuo0XzqVvciQVHIeIsz8mlPGyT6yNk12YAyTfLXsre7LpatsEY8haKAeMOFsy89fZgtEYNA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.81.0" + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/aws-kms" "1.81.0" + "@aws-cdk/core" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/aws-ssm@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz#426dd65c0b933618d5c196cb38386c1035b0fdc4" @@ -334,6 +629,17 @@ "@aws-cdk/core" "1.74.0" constructs "^3.2.0" +"@aws-cdk/aws-ssm@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.81.0.tgz#d198aba4ed2dd2f109c329be0b161132a251afb9" + integrity sha512-GLnFWviY8RiyletVvc98BqDfEgnZQ3BbpCafDzNvX2yHg1mfTzt/GcaGiY/suCtTuVM0k29Y/CkqUktidaZPFw== + dependencies: + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/aws-kms" "1.81.0" + "@aws-cdk/cloud-assembly-schema" "1.81.0" + "@aws-cdk/core" "1.81.0" + constructs "^3.2.0" + "@aws-cdk/cfnspec@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.74.0.tgz#03577e266721fe87287f9fc710a95d7b7e5886cd" @@ -341,6 +647,22 @@ dependencies: md5 "^2.3.0" +"@aws-cdk/cloud-assembly-schema@1.56.0": + version "1.56.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.56.0.tgz#b2b3cb687ead39ab8cecfaac6a4bee14666d6abc" + integrity sha512-QLuUOoEzrTyiBbPue1QzMmMLjh6FjuD6dIPJ1O81jPpBuIYiAN7MXzXQ9+4gqM0UrnMpSzB8DW2joENDPtJgFg== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + +"@aws-cdk/cloud-assembly-schema@1.57.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.57.0.tgz#bf9c63cf3ca8cbf0f37886b43b12f5fab5c7c989" + integrity sha512-IJyV3pgMvpbaIVYpUkBGsxIWh+VK7TxuTbEyHfBra5+VgXLoFdSG2UO80b4v6ou+occRqUGbqAnc/VfYr1uuvw== + dependencies: + jsonschema "^1.2.5" + semver "^7.2.2" + "@aws-cdk/cloud-assembly-schema@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz#f1bbd8411ec320dd9e14ef2dce626a05019c42bc" @@ -349,6 +671,14 @@ jsonschema "^1.4.0" semver "^7.3.2" +"@aws-cdk/cloud-assembly-schema@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.81.0.tgz#a6b670e99a60d6dff0391dec3825af8a5bac2125" + integrity sha512-ohYnrazmhaaboj9iuS88P+UMOKaet/HLIJPe8t1XVisTv+79qWXjQqhVNHa4sm9U3+5aurtsDAC7ET+eaC8gZw== + dependencies: + jsonschema "^1.4.0" + semver "^7.3.2" + "@aws-cdk/cloudformation-diff@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.74.0.tgz#d86199db530f9df641cff7f3996939c47645d59f" @@ -361,6 +691,28 @@ string-width "^4.2.0" table "^6.0.3" +"@aws-cdk/core@1.56.0": + version "1.56.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.56.0.tgz#499bf691a9937f5f5dfb2b83330fc3f9d9294662" + integrity sha512-MeImBUTbU8ipZAC6gYQHfJRXH+63XD1VBv9g1AO5GpERKHOZ58qiBroQOkVWD5/u+iasXJ7JSC9JKUBC/+2PlQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.56.0" + "@aws-cdk/cx-api" "1.56.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + +"@aws-cdk/core@1.57.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.57.0.tgz#44e19a18f05d0b0742e5d406474000ef2f6f5db9" + integrity sha512-NOE9u2tVwEF+EN5CYaoC34csBgKLA9rjCWCB6R64RPQ2MlhBFCvQxdG2ZO26nOOvH+yv/3zlylM7F546mfQMHg== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.57.0" + "@aws-cdk/cx-api" "1.57.0" + constructs "^3.0.2" + fs-extra "^9.0.1" + minimatch "^3.0.4" + "@aws-cdk/core@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.74.0.tgz#132d31c0ab9d39394827431ccd804cf10de34273" @@ -375,6 +727,20 @@ ignore "^5.1.8" minimatch "^3.0.4" +"@aws-cdk/core@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.81.0.tgz#572eac2622b610e9ee3638fc3d39e1e8307950cf" + integrity sha512-d4IbMVMV37Azi2tog2AphGnGJTyM9WLM+qDOUnIE2HV+5jynaFdtz82vF7z745juRbb6YfZvEgkIVRFqjT/UUQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.81.0" + "@aws-cdk/cx-api" "1.81.0" + "@aws-cdk/region-info" "1.81.0" + "@balena/dockerignore" "^1.0.2" + constructs "^3.2.0" + fs-extra "^9.0.1" + ignore "^5.1.8" + minimatch "^3.0.4" + "@aws-cdk/custom-resources@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.74.0.tgz#19329e8a9b9bc0ca66e00c791b008c416a67265f" @@ -388,6 +754,36 @@ "@aws-cdk/core" "1.74.0" constructs "^3.2.0" +"@aws-cdk/custom-resources@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.81.0.tgz#00cf9b3596df21440bffd97ec177f00d2b7cdd38" + integrity sha512-DucA4XDUdEwK5zpTJ0WJzTDB4MiXUNw5BXn1GEknGvKI8i0u3qWUWjSjZzTFE3CFNmwuNVRfcOZoS3gXLma6hg== + dependencies: + "@aws-cdk/aws-cloudformation" "1.81.0" + "@aws-cdk/aws-ec2" "1.81.0" + "@aws-cdk/aws-iam" "1.81.0" + "@aws-cdk/aws-lambda" "1.81.0" + "@aws-cdk/aws-logs" "1.81.0" + "@aws-cdk/aws-sns" "1.81.0" + "@aws-cdk/core" "1.81.0" + constructs "^3.2.0" + +"@aws-cdk/cx-api@1.56.0": + version "1.56.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.56.0.tgz#36bf05de73d26ecc69054855f238beaf0bf2a482" + integrity sha512-IuBmbz025AnuYAKv+ZOvnRV7Wwa/wdCiqiJ3BlVEqPsdvE4ZUMJTqLTY25ho5VT07o8Z/iQg7M6dRs9ccVC9Dw== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.56.0" + semver "^7.2.2" + +"@aws-cdk/cx-api@1.57.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.57.0.tgz#e6ad6936e1781b821317be60978fb20111cb4d16" + integrity sha512-h2qTTofE8cE1rSZB9ny+7AjjmxEdKoxhq+GsQebQ5NZkrN/Rbc+DL77S/GG53koPG4u/ZoA4UcdLz/JqiGgdPA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.57.0" + semver "^7.2.2" + "@aws-cdk/cx-api@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz#922c11389d723eadef2bc12666ced4980fe9e4cc" @@ -396,11 +792,29 @@ "@aws-cdk/cloud-assembly-schema" "1.74.0" semver "^7.3.2" +"@aws-cdk/cx-api@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.81.0.tgz#9b5729d0af201a6eb7fc2b7b81667274c80ea660" + integrity sha512-g6m5AbfBUjpRdLFK4OQPawFoJcsGA8bfNe143sS1ZqboGuIdcKS+VXMiG4TWIa3CuOcHwTvAEuz5bCKJD8y2MA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.81.0" + semver "^7.3.2" + +"@aws-cdk/region-info@1.57.0": + version "1.57.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.57.0.tgz#ae45fcf82fe7c66348c8b7ecfbb738dfb08bde9d" + integrity sha512-U2V2f/PdD2VDGVwGGShb+7dqhmEEmShlOOdvDQvTmAg2SW6HwOt/rsz+va6EzvWV7fmxtFEfMiJVpnheZ1Vwyg== + "@aws-cdk/region-info@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.74.0.tgz#e53eabe2d8980c360e63ea956615253551005182" integrity sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA== +"@aws-cdk/region-info@1.81.0": + version "1.81.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.81.0.tgz#07c77c9ac67fa2c66513f382ee2de641275dc642" + integrity sha512-5491wu9XotwBW83uvVJcl3VTnbUr5oyXw7Y8vlmeaS2FMmjAX9k1hbAy9bV0aOq/6xjwMPvaaRRIu51vvsMglQ== + "@aws-cdk/yaml-cfn@1.74.0": version "1.74.0" resolved "https://registry.yarnpkg.com/@aws-cdk/yaml-cfn/-/yaml-cfn-1.74.0.tgz#ea66da39391acf4d2f385845bb1c3466779bb90c" @@ -1571,6 +1985,17 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + "@lerna/add@3.21.0": version "3.21.0" resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.21.0.tgz#27007bde71cc7b0a2969ab3c2f0ae41578b4577b" @@ -2497,6 +2922,14 @@ jest-diff "^25.2.1" pretty-format "^25.2.1" +"@types/jest@^26.0.19": + version "26.0.19" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.19.tgz#e6fa1e3def5842ec85045bd5210e9bb8289de790" + integrity sha512-jqHoirTG61fee6v6rwbnEuKhpSKih0tuhqeFbCmMmErhtu3BYlOZaXWjffgOstMM4S/3iQD31lI5bGLTrs97yQ== + dependencies: + jest-diff "^26.0.0" + pretty-format "^26.0.0" + "@types/json-schema@^7.0.3": version "7.0.5" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" @@ -2517,6 +2950,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.6.0.tgz#7d4411bf5157339337d7cff864d9ff45f177b499" integrity sha512-mikldZQitV94akrc4sCcSjtJfsTKt4p+e/s0AGscVA6XArQ9kFclP+ZiYUMnq987rc6QlYxXv/EivqlfSLxpKA== +"@types/node@^14.14.19": + version "14.14.19" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.19.tgz#5135176a8330b88ece4e9ab1fdcfc0a545b4bab4" + integrity sha512-4nhBPStMK04rruRVtVc6cDqhu7S9GZai0fpXgPXrFpcPX6Xul8xnrjSdGB4KPBVYG/R5+fXWdCM8qBoiULWGPQ== + "@types/normalize-package-data@^2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" @@ -3717,6 +4155,11 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= +constructs@^3.0.2: + version "3.2.89" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.89.tgz#f2cc9525100ea6f4224f251c67026b95b589b5b6" + integrity sha512-b8tn6ttheQz51fnoUqLO1/ubHxH+ycnrt089BQY1b6T9QbyX1hXGeqCEiVZxBfuYUaMFg64dOdr/tHu4e+LUDw== + constructs@^3.2.0: version "3.2.38" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.38.tgz#40168c33ddf56948ece101775223e5c0f2cb3388" @@ -4147,6 +4590,11 @@ diff-sequences@^26.3.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.3.0.tgz#62a59b1b29ab7fd27cef2a33ae52abe73042d0a2" integrity sha512-5j5vdRcw3CNctePNYN0Wy2e/JbWT6cAYnXv5OuqPhDpyCGc0uLu2TK0zOCJWNB9kOIfYMSpIulRaDgIi4HJ6Ig== +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== + diff@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" @@ -5962,6 +6410,16 @@ jest-diff@^25.2.1: jest-get-type "^25.2.6" pretty-format "^25.5.0" +jest-diff@^26.0.0: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + jest-diff@^26.4.0: version "26.4.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.4.0.tgz#d073a0a11952b5bd9f1ff39bb9ad24304a0c55f7" @@ -6412,7 +6870,7 @@ jsonparse@^1.2.0: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= -jsonschema@^1.4.0: +jsonschema@^1.2.5, jsonschema@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== @@ -6734,6 +7192,13 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +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" + macos-release@^2.2.0: version "2.4.1" resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.4.1.tgz#64033d0ec6a5e6375155a74b1a1eba8e509820ac" @@ -7810,6 +8275,16 @@ pretty-format@^25.2.1, pretty-format@^25.5.0: ansi-styles "^4.0.0" react-is "^16.12.0" +pretty-format@^26.0.0, pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + dependencies: + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" + pretty-format@^26.4.0: version "26.4.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.4.0.tgz#c08073f531429e9e5024049446f42ecc9f933a3b" @@ -7997,6 +8472,11 @@ react-is@^16.12.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-is@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" + integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== + read-cmd-shim@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" @@ -8505,6 +8985,13 @@ semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.2.2: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -9855,6 +10342,11 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +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@1.10.0, yaml@^1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" From d08502c13550fa19dd96bf1ef9a2f5771da5bd99 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 1 Jan 2021 23:10:32 -0500 Subject: [PATCH 177/481] Handling another case in the symlink script --- packages/cli/test/helpers/copy-symlinks.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/cli/test/helpers/copy-symlinks.js b/packages/cli/test/helpers/copy-symlinks.js index 7dc23797a1..fe5053f0aa 100644 --- a/packages/cli/test/helpers/copy-symlinks.js +++ b/packages/cli/test/helpers/copy-symlinks.js @@ -12,6 +12,10 @@ const rootBin = path.join(__dirname, "../../../../node_modules", ".bin"); const appBin = path.join("node_modules", ".bin"); +if (!fs.existsSync("node_modules")) { + fs.mkdirSync("node_modules"); +} + if (!fs.existsSync(appBin)) { fs.mkdirSync(appBin); } From d77eb1c9aa06b9260419970cd04fcee3b42ceb16 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 1 Jan 2021 23:29:31 -0500 Subject: [PATCH 178/481] Using cwd for the appPath --- packages/cli/assets/cdk-wrapper/run.js | 18 +++++---------- packages/resources/src/App.ts | 31 +++++--------------------- packages/resources/src/Function.ts | 1 - packages/resources/src/util/builder.ts | 4 ++-- 4 files changed, 13 insertions(+), 41 deletions(-) diff --git a/packages/cli/assets/cdk-wrapper/run.js b/packages/cli/assets/cdk-wrapper/run.js index 334fa6122f..2959be14be 100644 --- a/packages/cli/assets/cdk-wrapper/run.js +++ b/packages/cli/assets/cdk-wrapper/run.js @@ -29,18 +29,12 @@ if (!handler.default) { } handler.default( - new sst.App( - { - name: config.name, - stage: config.stage, - region: config.region, - }, - {}, - { - appPath, - debugEndpoint: config.debugEndpoint, - } - ) + new sst.App({ + name: config.name, + stage: config.stage, + region: config.region, + debugEndpoint: config.debugEndpoint, + }) ); function handlerNotFound(importFailed) { diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 1ed6942855..3b4cca7623 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -25,16 +25,6 @@ export interface DeployProps { * @default - Defaults to us-east-1 */ readonly region?: string; -} - -/** - * Local build props for apps. - */ -export interface BuildProps { - /** - * The root path for the SST app. - */ - readonly appPath?: string; /** * The local WebSockets debug enpoint used by `sst start`. @@ -68,36 +58,25 @@ export class App extends cdk.App { public readonly region: string; /** - * The root path for the SST app + * The local WebSockets debug endpoint */ - public readonly appPath: string; + public readonly debugEndpoint?: string; /** * The build dir for the SST app */ public readonly buildDir: string = ".build"; - /** - * The local WebSockets debug endpoint - */ - public readonly debugEndpoint?: string; - - constructor( - deployProps: DeployProps = {}, - props: AppProps = {}, - buildProps: BuildProps = {}, - ) { + constructor(deployProps: DeployProps = {}, props: AppProps = {}) { super(props); this.stage = deployProps.stage || "dev"; this.name = deployProps.name || "my-app"; this.region = deployProps.region || "us-east-1"; - this.appPath = buildProps.appPath || ""; - - if (buildProps.debugEndpoint) { + if (deployProps.debugEndpoint) { this.local = true; - this.debugEndpoint = buildProps.debugEndpoint; + this.debugEndpoint = deployProps.debugEndpoint; } } diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index 3d4864688f..9ab073377e 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -52,7 +52,6 @@ export class Function extends lambda.Function { } else { const builderOutput = builder({ srcPath: code.path, - appPath: root.appPath, handler: props.handler, buildDir: root.buildDir, }); diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index 7985f06325..4e1a7399cd 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -4,7 +4,6 @@ import * as esbuild from "esbuild"; import { execSync } from "child_process"; interface BuilderProps { - readonly appPath: string; readonly srcPath: string; readonly handler: string; readonly buildDir: string; @@ -33,10 +32,11 @@ function getEsbuildMetafileName(srcPath: string, handler: string): string { } export function builder(builderProps: BuilderProps) { - const { srcPath, handler, appPath, buildDir } = builderProps; + const { srcPath, handler, buildDir } = builderProps; const external = ["aws-sdk"]; + const appPath = process.cwd(); const tsconfig = path.join(srcPath, "tsconfig.json"); const isTs = fs.existsSync(tsconfig); const extension = isTs ? ".ts" : ".js"; From 02338492b8d34aa030b06f920290cf634602b9ab Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 3 Jan 2021 16:03:19 -0500 Subject: [PATCH 179/481] Working on sst start --- packages/cli/lib/logger.js | 69 +- packages/cli/package.json | 1 + packages/cli/scripts/add-cdk.js | 4 +- packages/cli/scripts/build.js | 10 +- packages/cli/scripts/deploy.js | 22 +- packages/cli/scripts/remove.js | 16 +- packages/cli/scripts/start.js | 1169 ++++++++++++----------- packages/cli/scripts/util/cdkHelpers.js | 22 +- yarn.lock | 136 ++- 9 files changed, 808 insertions(+), 641 deletions(-) diff --git a/packages/cli/lib/logger.js b/packages/cli/lib/logger.js index 675fe6577b..dcb74cc2a9 100644 --- a/packages/cli/lib/logger.js +++ b/packages/cli/lib/logger.js @@ -1,24 +1,57 @@ -const chalk = require("chalk"); +const { createLogger, format, transports } = require("winston"); +const LEVEL = Symbol.for("level"); +const paths = require("../scripts/util/paths"); -function debug(message) { - if (!process.env.DEBUG) { - return; +const consoleLogFormat = format.printf( + ({ level, message, label, timestamp, [LEVEL]: rawLevel }) => { + if (process.env.DEBUG) { + return `${timestamp} [${label}] ${level}: ${message}`; + } else { + // logger.info('hi') => hi + // logger.warn('hi') => warn hi + // childLogger.warn('hi') => [child] warn hi + if (rawLevel === "info") { + return message; + } else { + return label ? `[${label}] ${level} ${message}` : `${level} ${message}`; + } + } } - console.debug(chalk.grey("debug ") + message); -} -function log(message) { - console.log(message); -} -function warn(message) { - console.warn(chalk.yellow("warn ") + message); -} -function error(message) { - console.error(chalk.red("error ") + message); +); + +const fileLogFormat = format.printf(({ level, message, label, timestamp }) => { + return `${timestamp} [${label}] ${level}: ${message}`; +}); + +const logger = createLogger({ + transports: [ + new transports.Console({ + level: process.env.DEBUG ? "debug" : "info", + format: format.combine( + format.colorize(), + format.timestamp(), + consoleLogFormat + ), + }), + ], +}); + +function addFileTransport() { + logger.add( + new transports.File({ + filename: `${paths.appBuildPath}/sst-debug.log`, + maxsize: 1024 * 1024 * 10, + maxFiles: 5, + tailable: true, + level: "silly", + format: format.combine(format.timestamp(), fileLogFormat), + handleExceptions: true, + handleRejections: true, + }) + ); } module.exports = { - log, - warn, - debug, - error, + addFileTransport, + logger, }; diff --git a/packages/cli/package.json b/packages/cli/package.json index 09ebe2f4d3..a4bdacf8ac 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -65,6 +65,7 @@ "source-map-support": "^0.5.19", "ts-jest": "^26.1.4", "typescript": "^3.9.7", + "winston": "^3.3.3", "ws": "^7.4.0", "yargs": "^15.4.1" }, diff --git a/packages/cli/scripts/add-cdk.js b/packages/cli/scripts/add-cdk.js index 01c4c06903..11d264c493 100644 --- a/packages/cli/scripts/add-cdk.js +++ b/packages/cli/scripts/add-cdk.js @@ -3,7 +3,7 @@ const chalk = require("chalk"); const spawn = require("cross-spawn"); -const logger = require("../lib/logger"); +const { logger } = require("../lib/logger"); module.exports = async function (argv, cliInfo) { const npm = cliInfo.npm; @@ -22,7 +22,7 @@ module.exports = async function (argv, cliInfo) { args = args.concat(packages); - logger.log(chalk.grey(`${helperCopy}: ${command} ${args.join(" ")}`)); + logger.info(chalk.grey(`${helperCopy}: ${command} ${args.join(" ")}`)); if (dryRun) { return; diff --git a/packages/cli/scripts/build.js b/packages/cli/scripts/build.js index ccb40a790b..05854dc832 100644 --- a/packages/cli/scripts/build.js +++ b/packages/cli/scripts/build.js @@ -2,7 +2,7 @@ const chalk = require("chalk"); -const logger = require("../lib/logger"); +const { logger } = require("../lib/logger"); const { synth } = require("./util/cdkHelpers"); function printResults(results, usingYarn) { @@ -11,7 +11,7 @@ function printResults(results, usingYarn) { const stacksCopy = l === 1 ? "stack" : "stacks"; const deployCmd = usingYarn ? "yarn sst deploy" : "npx sst deploy"; - logger.log( + logger.info( `\nSuccessfully compiled ${l} ${stacksCopy} to ${chalk.cyan( "build/cdk.out" )}:\n` @@ -19,14 +19,14 @@ function printResults(results, usingYarn) { for (var i = 0; i < l; i++) { const stack = stacks[i]; - logger.log(` ${chalk.cyan(stack.id)}`); + logger.info(` ${chalk.cyan(stack.id)}`); } - logger.log(`\nRun ${chalk.cyan(deployCmd)} to deploy to AWS.`); + logger.info(`\nRun ${chalk.cyan(deployCmd)} to deploy to AWS.`); } module.exports = async function (argv, config, cliInfo) { - logger.log(chalk.grey("Synthesizing CDK")); + logger.info(chalk.grey("Synthesizing CDK")); const results = await synth(cliInfo.cdkOptions); printResults(results, cliInfo.yarn); diff --git a/packages/cli/scripts/deploy.js b/packages/cli/scripts/deploy.js index 93f393fd1b..dd54c4aff7 100644 --- a/packages/cli/scripts/deploy.js +++ b/packages/cli/scripts/deploy.js @@ -3,10 +3,10 @@ const chalk = require("chalk"); const { parallelDeploy } = require("./util/cdkHelpers"); -const logger = require("../lib/logger"); +const { logger } = require("../lib/logger"); module.exports = async function (argv, config, cliInfo) { - logger.log(chalk.grey("Deploying " + (argv.stack ? argv.stack : "stacks"))); + logger.info(chalk.grey("Deploying " + (argv.stack ? argv.stack : "stacks"))); // Wait for deploy to complete let stackStates; @@ -27,7 +27,7 @@ module.exports = async function (argv, config, cliInfo) { // message to let users know we are still checking. const currEventCount = getEventCount(stackStates); if (currEventCount === prevEventCount) { - logger.log("Checking deploy status..."); + logger.info("Checking deploy status..."); } await new Promise((resolve) => setTimeout(resolve, 5000)); @@ -36,27 +36,27 @@ module.exports = async function (argv, config, cliInfo) { // Print deploy result stackStates.forEach(({ name, status, errorMessage, outputs, exports }) => { - logger.log(`\nStack ${name}`); - logger.log(` Status: ${formatStackStatus(status)}`); + logger.info(`\nStack ${name}`); + logger.info(` Status: ${formatStackStatus(status)}`); if (errorMessage) { - logger.log(` Error: ${errorMessage}`); + logger.info(` Error: ${errorMessage}`); } if (Object.keys(outputs || {}).length > 0) { - logger.log(" Outputs:"); + logger.info(" Outputs:"); Object.keys(outputs).forEach((name) => - logger.log(` ${name}: ${outputs[name]}`) + logger.info(` ${name}: ${outputs[name]}`) ); } if (Object.keys(exports || {}).length > 0) { - logger.log(" Exports:"); + logger.info(" Exports:"); Object.keys(exports).forEach((name) => - logger.log(` ${name}: ${exports[name]}`) + logger.info(` ${name}: ${exports[name]}`) ); } }); - logger.log(""); + logger.info(""); return stackStates.map((stackState) => ({ name: stackState.name, diff --git a/packages/cli/scripts/remove.js b/packages/cli/scripts/remove.js index 9ac5e9f6f4..b86c8236db 100644 --- a/packages/cli/scripts/remove.js +++ b/packages/cli/scripts/remove.js @@ -6,7 +6,7 @@ const { parallelDestroy } = require("@serverless-stack/core"); const paths = require("./util/paths"); const { destroy: cdkDestroy } = require("./util/cdkHelpers"); -const logger = require("../lib/logger"); +const { logger } = require("../lib/logger"); module.exports = async function (argv, config, cliInfo) { const stackName = `${config.stage}-debug-stack`; @@ -14,7 +14,7 @@ module.exports = async function (argv, config, cliInfo) { //////////////////////// // Remove debug stack // //////////////////////// - logger.log(chalk.grey("Removing " + stackName + " stack")); + logger.info(chalk.grey("Removing " + stackName + " stack")); const debugAppArgs = [stackName, config.stage, config.region]; // Note: When deploying the debug stack, the current working directory is user's app. // Setting the current working directory to debug stack cdk app directory to allow @@ -31,7 +31,7 @@ module.exports = async function (argv, config, cliInfo) { //////////////// // Remove app // //////////////// - logger.log(chalk.grey("Removing " + (argv.stack ? argv.stack : "stacks"))); + logger.info(chalk.grey("Removing " + (argv.stack ? argv.stack : "stacks"))); // Wait for remove to complete let stackStates; @@ -45,20 +45,20 @@ module.exports = async function (argv, config, cliInfo) { // Wait for 5 seconds if (!isCompleted) { - logger.log("Checking remove status..."); + logger.info("Checking remove status..."); await new Promise((resolve) => setTimeout(resolve, 5000)); } } while (!isCompleted); // Print remove result stackStates.forEach(({ name, status, errorMessage }) => { - logger.log(`\nStack ${name}`); - logger.log(` Status: ${formatStackStatus(status)}`); + logger.info(`\nStack ${name}`); + logger.info(` Status: ${formatStackStatus(status)}`); if (errorMessage) { - logger.log(` Error: ${errorMessage}`); + logger.info(` Error: ${errorMessage}`); } }); - logger.log(""); + logger.info(""); return stackStates.map((stackState) => ({ name: stackState.name, diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 45f4f31e70..b0ad5fbb76 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -17,7 +17,12 @@ const { deploy: cdkDeploy, } = require("./util/cdkHelpers"); const array = require("../lib/array"); -const logger = require("../lib/logger"); +const { logger, addFileTransport } = require("../lib/logger"); + +// Setup logger +addFileTransport(); +const clientLogger = logger.child({ label: "client" }); +const builderLogger = logger.child({ label: "builder" }); // Create Promise.allSettled shim allSettled.shim(); @@ -36,425 +41,432 @@ const WEBSOCKET_CLOSE_CODE = { NEW_CLIENT_CONNECTED: 4901, }; -const transpilerTemplateObject = { +let ws; +let watcher; +let tscExec; +let eslintExec; +let esbuildService; + +const builderState = { + isRebuilding: false, + entryPointsData: {}, + srcPathsData: {}, + watchedFilesIndex: {}, +}; +const entryPointDataTemplateObject = { srcPath: null, handler: null, tsconfig: null, + hasError: false, esbuilder: null, inputFiles: null, outHandler: null, + transpilePromise: null, + needsReTranspile: false, + pendingRequestCallbacks: [], }; -const srcPathsIndexTemplateObject = { +const srcPathDataTemplateObject = { + srcPath: null, tsconfig: null, inputFiles: null, + lintProcess: null, + typeCheckProcess: null, + needsReCheck: false, }; -let ws; -let watcher; -let tscExec; -let eslintExec; -let esbuildService; - -let transpilers = {}; -let srcPathsIndex = {}; -let inputFilesIndex = {}; +const MOCK_SLOW_ESBUILD_RETRANSPILE_IN_MS = 0; -const rebuildTranspilerQ = createPromiseQueue(function (srcPath, handler) { - const transpiler = getTranspiler(srcPath, handler); - return makeCancelable(rebuildTranspiler(transpiler)); +process.on("uncaughtException", (err, origin) => { + logger.info("===== Unhandled Exception at:", err, "origin:", origin); }); -const lintQ = createPromiseQueue(function (srcPath) { - // Esnure that only the srcPath is used for indexing the queue - return lint(srcPath); +process.on("unhandledRejection", (reason, promise) => { + logger.info("===== Unhandled Rejection at:", promise, "reason:", reason); }); -const typeCheckQ = createPromiseQueue(function (srcPath) { - // Esnure that only the srcPath is used for indexing the queue - return typeCheck(srcPath); +process.on("rejectionHandled", (promise) => { + logger.info("===== Rejection Handled at:", promise); }); -function makeCancelable(promise, onCancel) { - let hasCanceled_ = false; - - function cancelError() { - return { cancelled: true }; - } - - const wrappedPromise = new Promise((resolve, reject) => { - promise.then( - // Don't do anything if cancelled - (val) => (hasCanceled_ ? reject(cancelError()) : resolve(val)), - (error) => (hasCanceled_ ? reject(cancelError()) : reject(error)) - ); - }); +module.exports = async function (argv, cliInfo) { + const config = applyConfig(argv); - wrappedPromise.cancel = function () { - onCancel && onCancel(); - hasCanceled_ = true; - }; + // Deploy debug stack + config.debugEndpoint = await deployDebugStack(cliInfo, config); - return wrappedPromise; -} + // Deploy app + await deployApp(argv, cliInfo, config); -function createPromiseQueue(fn) { - const callStatus = { - IDLE: "idle", - BUSY: "busy", - }; - const callTemplate = { - sig: null, - args: null, - promise: null, - callbacks: [], - status: callStatus.IDLE, - }; + // Start client + try { + await startBuilder([ + { srcPath: "src/api", handler: "api.handler" }, + { srcPath: "src/sns", handler: "sns.handler" }, + ]); + } catch (e) { + return; + } - const calls = {}; + startClient(config.debugEndpoint); +}; - function getCallSignature(args) { - return args.map((arg) => arg.toString()).join(" "); - } +async function deployDebugStack(cliInfo, config) { + const stackName = `${config.stage}-debug-stack`; - function getCall(args) { - const sig = getCallSignature(args); + logger.info(""); + logger.info("======================="); + logger.info(" Deploying debug stack"); + logger.info("======================="); + logger.info(""); - return calls[sig] - ? calls[sig] - : (calls[sig] = { ...callTemplate, sig, args }); - } + const debugAppArgs = [stackName, config.stage, config.region]; + // Note: When deploying the debug stack, the current working directory is user's app. + // Setting the current working directory to debug stack cdk app directory to allow + // Lambda Function construct be able to reference code with relative path. + process.chdir(path.join(paths.ownPath, "assets", "debug-stack")); + const debugStackRet = await cdkDeploy({ + ...cliInfo.cdkOptions, + app: `node bin/index.js ${debugAppArgs.join(" ")}`, + output: "cdk.out", + }); + // Note: Restore working directory + process.chdir(paths.appPath); - function addToCallbacks(call) { - return new Promise((resolve, reject) => - call.callbacks.push({ resolve, reject }) + // Get WebSocket endpoint + if ( + !debugStackRet || + !debugStackRet.outputs || + !debugStackRet.outputs.Endpoint + ) { + throw new Error( + `Failed to get the endpoint from the deployed debug stack ${stackName}` ); } - function setIdle(call) { - call.status = callStatus.IDLE; - call.promise = null; - call.callbacks = []; - } + return debugStackRet.outputs.Endpoint; +} +async function deployApp(argv, cliInfo, config) { + logger.info(""); + logger.info("==============="); + logger.info(" Deploying app"); + logger.info("==============="); + logger.info(""); - function setBusy(call) { - call.status = callStatus.BUSY; + prepareCdk(argv, cliInfo, config); + await sstDeploy(argv, config, cliInfo); +} - if (call.promise) { - call.promise.cancel && call.promise.cancel(); - call.promise = null; - } +/////////////////////// +// Builder functions // +/////////////////////// - const promise = (call.promise = fn(...call.args)); +async function startBuilder(entryPoints) { + builderLogger.info(""); + builderLogger.info("==================="); + builderLogger.info(" Starting debugger"); + builderLogger.info("==================="); + builderLogger.info(""); - promise.then( - (value) => handleNext(call, "fulfilled", value), - (reason) => handleNext(call, "rejected", reason) - ); + initializeBuilderState(entryPoints); - return promise; - } + // Run transpiler + builderLogger.info("Transpiling Lambda code..."); - function onBusyComplete(call, resultStatus, result) { - call.callbacks.forEach(({ resolve, reject }) => - resultStatus === "fulfilled" ? resolve(result) : reject(result) - ); + esbuildService = await esbuild.startService(); + const results = await Promise.allSettled( + entryPoints.map(({ srcPath, handler }) => + // Not catching esbuild errors + // Letting it handle the error messages for now + transpile(srcPath, handler) + ) + ); + esbuildService.stop(); - setIdle(call); + const hasError = results.some((result) => result.status === "rejected"); + if (hasError) { + Object.keys(builderState.entryPointsData).forEach((key) => { + if (builderState.entryPointsData[key].esbuilder !== null) { + builderState.entryPointsData[key].esbuilder.rebuild.dispose(); + } + }); + throw new Error("Error transpiling"); } - function handleNext(call, resultStatus, result) { - if (resultStatus === "rejected" && result && result.cancelled) { - console.log("Discard cancelled promise"); - // Discard cancelled promises - return; - } - - switch (call.status) { - case callStatus.IDLE: - break; - case callStatus.BUSY: - onBusyComplete(call, resultStatus, result); - break; - } + // Validate transpiled + const srcPaths = getAllSrcPaths(); + if (srcPaths.length === 0) { + builderLogger.info("Nothing has been transpiled"); + return; } - return { - queue: function (...args) { - const call = getCall(args); + // Run linter and type checker + tscExec = await getCmdPath("tsc"); + eslintExec = await getCmdPath("eslint"); - return setBusy(call); - }, + srcPaths.forEach((srcPath) => { + const lintProcess = lint(srcPath); + const typeCheckProcess = typeCheck(srcPath); + onLintAndTypeCheckStarted({ srcPath, lintProcess, typeCheckProcess }); + }); - complete: function (...args) { - const call = getCall(args); + // Run watcher + const allInputFiles = getAllWatchedFiles(); - switch (call.status) { - case callStatus.IDLE: - return Promise.resolve(); - case callStatus.BUSY: - return addToCallbacks(call); - } - }, - }; + watcher = chokidar + .watch(allInputFiles, chokidarOptions) + .on("all", onFileChange) + .on("error", (error) => builderLogger.info(`Watch ${error}`)) + .on("ready", () => { + builderLogger.debug(`Watcher ready for ${allInputFiles.length} files...`); + }); } +async function updateBuilder() { + builderLogger.silly(serializeState()); -// TODO: Remove -//function sleep(ms) { -// return new Promise(resolve => setTimeout(resolve, ms)); -//} + const { entryPointsData, srcPathsData } = builderState; -function setTimer(lambda, handleResponse, timeoutInMs) { - return setTimeout(function () { - handleResponse({ type: "timeout" }); - - try { - process.kill(lambda.pid, "SIGKILL"); - } catch (e) { - logger.log(e); - logger.error("Cannot kill timed out Lambda"); + // Run transpiler + Object.keys(entryPointsData).forEach((key) => { + let { + srcPath, + handler, + transpilePromise, + needsReTranspile, + } = entryPointsData[key]; + if (!transpilePromise && needsReTranspile) { + const transpilePromise = reTranspiler(srcPath, handler); + onReTranspileStarted({ srcPath, handler, transpilePromise }); } - }, timeoutInMs); -} + }); -function getInputFilesForTranspiler(transpiler) { - return transpiler.inputFiles; -} + // Check all entrypoints transpiled, if not => wait + const isTranspiling = Object.keys(entryPointsData).some( + (key) => entryPointsData[key].transpilePromise + ); + if (isTranspiling) { + return; + } -function getTsconfigForTranspiler(transpiler) { - return transpiler.tsconfig; -} + // Check all entrypoints successfully transpiled, if not => do not run lint and checker + const hasError = Object.keys(entryPointsData).some( + (key) => entryPointsData[key].hasError + ); + if (hasError) { + return; + } -function getSrcPathForTranspiler(transpiler) { - return transpiler.srcPath; -} + // Run linter and type checker + Object.keys(srcPathsData).forEach((srcPath) => { + let { lintProcess, typeCheckProcess, needsReCheck } = srcPathsData[srcPath]; + if (needsReCheck) { + // stop existing linter & type checker + lintProcess && lintProcess.kill(); + typeCheckProcess && typeCheckProcess.kill(); -function getHandlerForTranspiler(transpiler) { - return transpiler.handler; -} + // start new linter & type checker + lintProcess = lint(srcPath); + typeCheckProcess = typeCheck(srcPath); -function getEntryPointKeys() { - return Object.keys(transpilers); + onLintAndTypeCheckStarted({ srcPath, lintProcess, typeCheckProcess }); + } + }); } -function getTranspilerForKey(key) { - return transpilers[key]; -} +async function onFileChange(ev, file) { + builderLogger.debug(`File change: ${file}`); -function getEsbuilderForTranspiler(transpiler) { - return transpiler.esbuilder; -} + // Get entrypoints changed + const entryPointKeys = builderState.watchedFilesIndex[file]; + if (!entryPointKeys) { + builderLogger.debug("File is not linked to the entry points"); + return; + } + + // Mark changed entrypoints + entryPointKeys.map((key) => { + builderState.entryPointsData[key].needsReTranspile = true; + }); -function addTranspiler({ + await updateBuilder(); +} +function onTranspileSucceeded( srcPath, handler, - tsconfig, - esbuilder, - outHandler, - inputFiles, -}) { - const transpiler = { - ...transpilerTemplateObject, - srcPath, - handler, + { tsconfig, esbuilder, outHandler, inputFiles } +) { + const key = `${srcPath}/${handler}`; + // Update entryPointsData + builderState.entryPointsData[key] = { + ...builderState.entryPointsData[key], tsconfig, esbuilder, - inputFiles, outHandler, + inputFiles, }; - return (transpilers[`${srcPath}/${handler}`] = transpiler); -} - -function updateTranspilerInputFile(transpiler, inputFiles) { - transpiler.inputFiles = inputFiles; -} - -function getTranspiler(srcPath, handler) { - return transpilers[`${srcPath}/${handler}`]; -} - -function getAllInputFiles() { - return Object.keys(inputFilesIndex); -} - -function diffInputFiles(list1, list2) { - const remove = []; - const add = []; - - list1.forEach((item) => list2.indexOf(item) === -1 && remove.push(item)); - list2.forEach((item) => list1.indexOf(item) === -1 && add.push(item)); + // Update srcPath index + builderState.srcPathsData[srcPath] = { + ...srcPathDataTemplateObject, + srcPath, + tsconfig, + inputFiles, + }; - return { add, remove }; + // Update inputFiles + inputFiles.forEach((file) => { + builderState.watchedFilesIndex[file] = + builderState.watchedFilesIndex[file] || []; + builderState.watchedFilesIndex[file].push(key); + }); } +function onReTranspileStarted({ srcPath, handler, transpilePromise }) { + const key = `${srcPath}/${handler}`; -function addEntryPointKeyForInputFile(file, key) { - if (inputFilesIndex[file]) { - inputFilesIndex[file].push(key); - } else { - inputFilesIndex[file] = [key]; + // Print rebuilding message + if (!builderState.isRebuilding) { + builderState.isRebuilding = true; + builderLogger.info("Rebuilding..."); } -} -function getEntryPointKeysForInputFile(file) { - return inputFilesIndex[file]; + // Update entryPointsData + builderState.entryPointsData[key] = { + ...builderState.entryPointsData[key], + needsReTranspile: false, + transpilePromise, + }; } +async function onReTranspileSucceeded(srcPath, handler, { inputFiles }) { + const key = `${srcPath}/${handler}`; -function addToSrcPathIndex(srcPath, inputFiles, tsconfig) { - function addToInputFilesIndex(index, inputFiles) { - inputFiles.forEach((file) => (index[file] = true)); - return index; - } - - const srcPathObject = srcPathsIndex[srcPath]; + // Note: If the handler included new files, while re-transpiling, the new files + // might have been updated. And because the new files has not been added to + // the watcher yet, onFileChange() wouldn't get called. We need to re-transpile + // again. + const oldInputFiles = builderState.entryPointsData[key].inputFiles; + const inputFilesDiff = diffInputFiles(oldInputFiles, inputFiles); + const hasNewInputFiles = inputFilesDiff.add.length > 0; - if (srcPathObject) { - srcPathObject.inputFiles = addToInputFilesIndex( - srcPathObject.inputFiles, - inputFiles - ); - srcPathObject.tsconfig = srcPathObject.tsconfig || tsconfig; - } else { - srcPathsIndex[srcPath] = { - ...srcPathsIndexTemplateObject, - tsconfig, - inputFiles: addToInputFilesIndex({}, inputFiles), - }; - } -} - -function getUniqueSrcPaths() { - return Object.keys(srcPathsIndex); -} + // Update entryPointsData + builderState.entryPointsData[key] = { + ...builderState.entryPointsData[key], + inputFiles, + hasError: false, + transpilePromise: null, + needsReTranspile: + builderState.entryPointsData[key].needsReTranspile || hasNewInputFiles, + }; -function getUniqueSrcPathsForEntryPointKeys(entryPointKeys) { - const srcPaths = {}; + // Update srcPathsData + const srcPathInputFiles = Object.keys(builderState.entryPointsData) + .filter((key) => builderState.entryPointsData[key].srcPath === srcPath) + .map((key) => builderState.entryPointsData[key].inputFiles) + .flat(); + builderState.srcPathsData[srcPath] = { + ...builderState.srcPathsData[srcPath], + inputFiles: array.unique(srcPathInputFiles), + needsReCheck: true, + }; - entryPointKeys.forEach((key) => { - const srcPath = getSrcPathForTranspiler(getTranspilerForKey(key)); - srcPaths[srcPath] = true; + // Update watched files index + inputFilesDiff.add.forEach((file) => { + builderState.watchedFilesIndex[file] = + builderState.watchedFilesIndex[file] || []; + builderState.watchedFilesIndex[file].push(key); + }); + inputFilesDiff.remove.forEach((file) => { + const index = builderState.watchedFilesIndex[file].indexOf(key); + if (index > -1) { + builderState.watchedFilesIndex[file].splice(index, 1); + } + if (builderState.watchedFilesIndex[file] === 0) { + delete builderState.watchedFilesIndex[file]; + } }); - return Object.keys(srcPaths); -} - -function getInputFilesForSrcPath(srcPath) { - return Object.keys(srcPathsIndex[srcPath].inputFiles); -} - -function getTsconfigForSrcPath(srcPath) { - return srcPathsIndex[srcPath].tsconfig; -} - -async function getTranspiledHandler(srcPath, handler) { - const transpiler = getTranspiler(srcPath, handler); - - console.log(`Getting latest transpiler output for ${handler}...`); - - // Wait for transpiler queue to complete - await rebuildTranspilerQ.complete(srcPath, handler); - - return transpiler.outHandler; -} - -async function checkFileExists(file) { - return fs.promises - .access(file, fs.constants.F_OK) - .then(() => true) - .catch(() => false); -} - -async function getCmdPath(cmd) { - const appPath = path.join(paths.appNodeModules, ".bin", cmd); - const ownPath = path.join(paths.ownNodeModules, ".bin", cmd); - - // Fallback to own node modules, in case of tests that don't install the cli - return (await checkFileExists(appPath)) ? appPath : ownPath; -} - -async function getHandlerFilePath(srcPath, handler) { - const parts = handler.split("."); - const name = parts[0]; - - const jsFile = path.join(paths.appPath, srcPath, `${name}.js`); - - if (await checkFileExists(jsFile)) { - return jsFile; + // Update watcher + if (inputFilesDiff.add.length > 0) { + watcher.add(inputFilesDiff.add); } - - const tsFile = path.join(paths.appPath, srcPath, `${name}.ts`); - - if (await checkFileExists(tsFile)) { - return tsFile; + if (inputFilesDiff.remove.length > 0) { + await watcher.unwatch(inputFilesDiff.remove); } - return jsFile; -} - -function getEsbuildMetafilePath(srcPath, handler) { - const key = `${srcPath}/${handler}`.replace(/[/.]/g, "-"); - const outSrcFullPath = path.join(paths.appPath, srcPath, paths.appBuildDir); - - return path.join(outSrcFullPath, `.esbuild.${key}.json`); -} - -async function getAllExternalsForHandler(srcPath) { - let externals; - - try { - const packageJson = JSON.parse( - await fs.promises.readFile(path.join(srcPath, "package.json"), { - encoding: "utf-8", - }) + // Fullfil pending requests + if (!builderState.entryPointsData[key].needsReTranspile) { + builderState.entryPointsData[key].pendingRequestCallbacks.forEach( + ({ resolve }) => { + resolve(); + } ); - externals = Object.keys({ - ...(packageJson.dependencies || {}), - ...(packageJson.devDependencies || {}), - ...(packageJson.peerDependencies || {}), - }); - } catch (e) { - console.log(`No package.json found in ${srcPath}`); - externals = []; } - return externals; + await updateBuilder(); } +async function onReTranspileFailed(srcPath, handler) { + const key = `${srcPath}/${handler}`; -async function getInputFilesFromEsbuildMetafile(file) { - let metaJson; + // Update entryPointsData + builderState.entryPointsData[key] = { + ...builderState.entryPointsData[key], + hasError: true, + transpilePromise: null, + }; - try { - metaJson = JSON.parse( - await fs.promises.readFile(file, { encoding: "utf-8" }) + // Fullfil pending requests + if (!builderState.entryPointsData[key].needsReTranspile) { + builderState.entryPointsData[key].pendingRequestCallbacks.forEach( + ({ reject }) => { + reject(`Failed to transpile srcPath ${srcPath} handler ${handler}`); + } ); - } catch (e) { - console.log("There was a problem reading the build metafile"); - console.log(e); } - return Object.keys(metaJson.inputs).map((input) => path.resolve(input)); + await updateBuilder(); } - -function reIndexInputFiles() { - srcPathsIndex = {}; - inputFilesIndex = {}; - - indexInputFiles(); +function onLintAndTypeCheckStarted({ srcPath, lintProcess, typeCheckProcess }) { + // Update srcPath index + builderState.srcPathsData[srcPath] = { + ...builderState.srcPathsData[srcPath], + lintProcess, + typeCheckProcess, + needsReCheck: false, + }; } +async function onLintDone(srcPath) { + builderState.srcPathsData[srcPath] = { + ...builderState.srcPathsData[srcPath], + lintProcess: null, + }; -function indexInputFiles() { - getEntryPointKeys().forEach((key) => { - const transpiler = getTranspilerForKey(key); - - const tsconfig = getTsconfigForTranspiler(transpiler); - const srcPath = getSrcPathForTranspiler(transpiler); - const inputFiles = getInputFilesForTranspiler(transpiler); + // Print rebuilding message + const isChecking = Object.keys(builderState.srcPathsData).some( + (key) => + builderState.srcPathsData[key].lintProcess || + builderState.srcPathsData[key].typeCheckProcess + ); + if (!isChecking && builderState.isRebuilding) { + builderState.isRebuilding = false; + builderLogger.info("Done building"); + } - if (!inputFiles) { - return; - } + await updateBuilder(); +} +async function onTypeCheckDone(srcPath) { + builderState.srcPathsData[srcPath] = { + ...builderState.srcPathsData[srcPath], + typeCheckProcess: null, + }; - addToSrcPathIndex(srcPath, inputFiles, tsconfig); + // Print rebuilding message + const isChecking = Object.keys(builderState.srcPathsData).some( + (key) => + builderState.srcPathsData[key].lintProcess || + builderState.srcPathsData[key].typeCheckProcess + ); + if (!isChecking && builderState.isRebuilding) { + builderState.isRebuilding = false; + builderLogger.info("Done building"); + } - inputFiles.forEach((file) => addEntryPointKeyForInputFile(file, key)); - }); + await updateBuilder(); } async function transpile(srcPath, handler) { @@ -482,13 +494,11 @@ async function transpile(srcPath, handler) { outdir: path.join(paths.appPath, outSrcPath), }; - console.log(`Transpiling ${handler}...`); + builderLogger.debug(`Transpiling ${handler}...`); const esbuilder = await esbuild.build(esbuildOptions); - return addTranspiler({ - srcPath, - handler, + return onTranspileSucceeded(srcPath, handler, { tsconfig, esbuilder, outHandler: { @@ -498,275 +508,319 @@ async function transpile(srcPath, handler) { inputFiles: await getInputFilesFromEsbuildMetafile(metafile), }); } +async function reTranspiler(srcPath, handler) { + try { + const key = buildEntryPointKey(srcPath, handler); + const { esbuilder } = builderState.entryPointsData[key]; + await esbuilder.rebuild(); + + // Mock esbuild taking long to rebuild + if (MOCK_SLOW_ESBUILD_RETRANSPILE_IN_MS) { + builderLogger.debug( + `Mock rebuild wait (${MOCK_SLOW_ESBUILD_RETRANSPILE_IN_MS}ms)...` + ); + await sleep(MOCK_SLOW_ESBUILD_RETRANSPILE_IN_MS); + builderLogger.debug(`Mock rebuild wait done`); + } -async function rebuildTranspiler(transpiler) { - const metafile = getEsbuildMetafilePath( - getSrcPathForTranspiler(transpiler), - getHandlerForTranspiler(transpiler) - ); - - await getEsbuilderForTranspiler(transpiler).rebuild(); - - const inputFiles = await getInputFilesFromEsbuildMetafile(metafile); - updateTranspilerInputFile(transpiler, inputFiles); - //return makeCancelable(); - //return makeCancelable(function() { - //return transpiler.esbuilder.rebuild(); - // TODO: Remove - //console.log("Fake rebuild..."); - //return sleep(3000); - //}()); + const metafile = getEsbuildMetafilePath(srcPath, handler); + const inputFiles = await getInputFilesFromEsbuildMetafile(metafile); + await onReTranspileSucceeded(srcPath, handler, { inputFiles }); + } catch (e) { + builderLogger.error("reTranspiler error", e); + await onReTranspileFailed(srcPath, handler); + } } - function lint(srcPath) { - const inputFiles = getInputFilesForSrcPath(srcPath); - - // Need the ref for a closure - let linter = { ref: null }; - - const promise = new Promise((resolve) => { - linter.ref = spawn( - eslintExec, - [ - "--no-error-on-unmatched-pattern", - "--config", - path.join(paths.ownPath, "scripts", "util", ".eslintrc.internal.js"), - "--ext", - ".js,.ts", - "--fix", - // Handling nested ESLint projects in Yarn Workspaces - // https://github.com/serverless-stack/serverless-stack/issues/11 - "--resolve-plugins-relative-to", - ".", - ...inputFiles, - ], - // TODO: Check if setting the cwd to the root is okay - { stdio: "inherit", cwd: paths.appPath } - ); - - linter.ref.on("close", (code) => { - console.log(`child process exited with code ${code}`); - resolve(); - return; - }); - }); - - return makeCancelable(promise, function () { - console.log("Cancelling Linter"); - linter.ref && linter.ref.kill(); - }); -} + const { inputFiles } = builderState.srcPathsData[srcPath]; -function typeCheck(srcPath) { - const tsconfig = getTsconfigForSrcPath(srcPath); - const inputFiles = getInputFilesForSrcPath(srcPath).filter((file) => - file.endsWith(".ts") + const process = spawn( + eslintExec, + [ + "--no-error-on-unmatched-pattern", + "--config", + path.join(paths.ownPath, "scripts", "util", ".eslintrc.internal.js"), + "--ext", + ".js,.ts", + "--fix", + // Handling nested ESLint projects in Yarn Workspaces + // https://github.com/serverless-stack/serverless-stack/issues/11 + "--resolve-plugins-relative-to", + ".", + ...inputFiles, + ], + // TODO: Check if setting the cwd to the root is okay + { stdio: "inherit", cwd: paths.appPath } ); - // Need the ref for a closure - let typeChecker = { ref: null }; - - const promise = new Promise((resolve) => { - if (!tsconfig) { - resolve(); - return; - } - - typeChecker.ref = spawn(tscExec, ["--noEmit", ...inputFiles], { - stdio: "inherit", - cwd: path.join(paths.appPath, srcPath), - }); - - typeChecker.ref.on("close", (code) => { - console.log(`child process exited with code ${code}`); - resolve(); - return; - }); + process.on("close", (code) => { + builderLogger.debug(`linter exited with code ${code}`); + onLintDone(srcPath); }); - return makeCancelable(promise, function () { - console.log("Cancelling Type Checker"); - typeChecker.ref && typeChecker.ref.kill(); - }); + return process; } +function typeCheck(srcPath) { + const { tsconfig, inputFiles } = builderState.srcPathsData[srcPath]; + const tsFiles = inputFiles.filter((file) => file.endsWith(".ts")); -async function onFileChange(ev, file) { - let hasError = false; - - console.log(`File change: ${file}`); - - const entryPointKeys = getEntryPointKeysForInputFile(file); - - if (!entryPointKeys) { - console.log("File is not linked to the entry points"); - return; + if (!tsconfig) { + return null; } - const transpilerPromises = entryPointKeys.map((key) => { - const transpiler = getTranspilerForKey(key); - const srcPath = getSrcPathForTranspiler(transpiler); - const handler = getHandlerForTranspiler(transpiler); + const process = spawn(tscExec, ["--noEmit", ...tsFiles], { + stdio: "inherit", + cwd: path.join(paths.appPath, srcPath), + }); - return rebuildTranspilerQ.queue(srcPath, handler); + process.on("close", (code) => { + builderLogger.debug(`type checker exited with code ${code}`); + onTypeCheckDone(srcPath); }); - console.log("Rebuilding..."); + return process; +} - (await Promise.allSettled(transpilerPromises)).forEach((result) => { - if (result.status === "rejected") { - hasError = true; - console.log("Error transpiling"); - console.log(result); - } +///////////////////////////// +// Builder State functions // +///////////////////////////// + +function initializeBuilderState(entryPoints) { + entryPoints.forEach(({ srcPath, handler }) => { + const key = buildEntryPointKey(srcPath, handler); + builderState.entryPointsData[key] = { + ...entryPointDataTemplateObject, + srcPath, + handler, + }; }); +} - if (hasError) { - return; - } +function buildEntryPointKey(srcPath, handler) { + return `${srcPath}/${handler}`; +} +function getAllWatchedFiles() { + return Object.keys(builderState.watchedFilesIndex); +} +function getAllSrcPaths() { + return Object.keys(builderState.srcPathsData); +} +function serializeState() { + const { + isRebuilding, + entryPointsData, + srcPathsData, + watchedFilesIndex, + } = builderState; + return JSON.stringify( + { + isRebuilding, + entryPointsData: Object.keys(entryPointsData).reduce( + (acc, key) => ({ + ...acc, + [key]: { + hasError: entryPointsData[key].hasError, + inputFiles: entryPointsData[key].inputFiles, + transpilePromise: + entryPointsData[key].transpilePromise && "", + needsReTranspile: entryPointsData[key].needsReTranspile, + }, + //[key]: { ...entryPointsData[key], + // transpilePromise: entryPointsData[key].transpilePromise && '' + //}, + }), + {} + ), + srcPathsData: Object.keys(srcPathsData).reduce( + (acc, key) => ({ + ...acc, + [key]: { + inputFiles: srcPathsData[key].inputFiles, + lintProcess: srcPathsData[key].lintProcess && "", + typeCheckProcess: + srcPathsData[key].typeCheckProcess && "", + needsReCheck: srcPathsData[key].needsReCheck, + }, + //[key]: { ...srcPathsData[key], + // lintProcess: srcPathsData[key].lintProcess && '', + // typeCheckProcess: srcPathsData[key].typeCheckProcess && '', + //}, + }), + {} + ), + watchedFilesIndex, + }, + null, + 2 + ); +} - const srcPaths = getUniqueSrcPathsForEntryPointKeys(entryPointKeys); +//////////////////////////// +// Builder Util functions // +//////////////////////////// - srcPaths.forEach((srcPath) => { - lintQ.queue(srcPath); - typeCheckQ.queue(srcPath); - }); +async function checkFileExists(file) { + return fs.promises + .access(file, fs.constants.F_OK) + .then(() => true) + .catch(() => false); +} - const oldInputFiles = getAllInputFiles(); +async function getCmdPath(cmd) { + const appPath = path.join(paths.appNodeModules, ".bin", cmd); + const ownPath = path.join(paths.ownNodeModules, ".bin", cmd); - // Re-index all input files - reIndexInputFiles(); + // Fallback to own node modules, in case of tests that don't install the cli + return (await checkFileExists(appPath)) ? appPath : ownPath; +} - const newInputFiles = getAllInputFiles(); +async function getHandlerFilePath(srcPath, handler) { + const parts = handler.split("."); + const name = parts[0]; - const diff = diffInputFiles(oldInputFiles, newInputFiles); + const jsFile = path.join(paths.appPath, srcPath, `${name}.js`); - if (diff.add.length > 0) { - watcher.add(diff.add); + if (await checkFileExists(jsFile)) { + return jsFile; } - if (diff.remove.length > 0) { - await watcher.unwatch(diff.remove); + const tsFile = path.join(paths.appPath, srcPath, `${name}.ts`); + + if (await checkFileExists(tsFile)) { + return tsFile; } - console.log("Done building"); + return jsFile; } -async function startBuilder(entryPoints) { - esbuildService = await esbuild.startService(); - - const transpilerPromises = entryPoints.map((entryPoint) => { - const srcPath = entryPoint.debugSrcPath; - const handler = entryPoint.debugSrcHandler; +async function getAllExternalsForHandler(srcPath) { + let externals; - // Not catching esbuild errors - // Letting it handle the error messages for now - return transpile(srcPath, handler); - }); + try { + const packageJson = JSON.parse( + await fs.promises.readFile(path.join(srcPath, "package.json"), { + encoding: "utf-8", + }) + ); + externals = Object.keys({ + ...(packageJson.dependencies || {}), + ...(packageJson.devDependencies || {}), + ...(packageJson.peerDependencies || {}), + }); + } catch (e) { + builderLogger.debug(`No package.json found in ${srcPath}`); + externals = []; + } - logger.log("Transpiling Lambda code..."); + return externals; +} - const results = await Promise.allSettled(transpilerPromises); +async function getTranspiledHandler(srcPath, handler) { + const key = buildEntryPointKey(srcPath, handler); + const entryPointData = builderState.entryPointsData[key]; + if (entryPointData.transpilePromise || entryPointData.needsReTranspile) { + builderLogger.debug(`Waiting for re-transpiler output for ${handler}...`); + await new Promise((resolve, reject) => + entryPointData.pendingRequestCallbacks.push({ resolve, reject }) + ); + builderLogger.debug(`Waited for re-transpiler output for ${handler}`); + } - esbuildService.stop(); + return entryPointData.outHandler; +} - results.forEach((result) => { - if (result.status === "rejected") { - console.log("Error transpiling"); - console.log(result); - } - }); +function getEsbuildMetafilePath(srcPath, handler) { + const key = `${srcPath}/${handler}`.replace(/[/.]/g, "-"); + const outSrcFullPath = path.join(paths.appPath, srcPath, paths.appBuildDir); - // Create an index of all the input files detected - indexInputFiles(); + return path.join(outSrcFullPath, `.esbuild.${key}.json`); +} - const srcPaths = getUniqueSrcPaths(); +async function getInputFilesFromEsbuildMetafile(file) { + let metaJson; - if (srcPaths.length === 0) { - console.log("Nothing has been transpiled"); - return; + try { + metaJson = JSON.parse( + await fs.promises.readFile(file, { encoding: "utf-8" }) + ); + } catch (e) { + builderLogger.error("There was a problem reading the build metafile", e); } - const lintPromises = []; - const typeCheckPromises = []; - - tscExec = await getCmdPath("tsc"); - eslintExec = await getCmdPath("eslint"); - - srcPaths.forEach((srcPath) => { - lintPromises.push(lintQ.queue(srcPath)); - typeCheckPromises.push(typeCheckQ.queue(srcPath)); - }); + return Object.keys(metaJson.inputs).map((input) => path.resolve(input)); +} - const allInputFiles = getAllInputFiles(); +function diffInputFiles(oldList, newList) { + const remove = []; + const add = []; - watcher = chokidar - .watch(allInputFiles, chokidarOptions) - .on("all", onFileChange) - .on("error", (error) => console.log(`Watch ${error}`)) - .on("ready", () => { - console.log(`Watcher ready for ${allInputFiles.length} files...`); - }); + oldList.forEach((item) => newList.indexOf(item) === -1 && remove.push(item)); + newList.forEach((item) => oldList.indexOf(item) === -1 && add.push(item)); - // await Promise.allSettled(lintPromises.concat(typeCheckPromises)); - // - // console.log("Done building"); + return { add, remove }; } +function sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +/////////////////////////////// +// Websocke Client functions // +/////////////////////////////// function startClient(debugEndpoint) { ws = new WebSocket(debugEndpoint); ws.on("open", () => { ws.send(JSON.stringify({ action: "connectClient" })); - logger.debug("WebSocket opened"); + clientLogger.debug("WebSocket opened"); }); ws.on("close", (code, reason) => { - logger.debug("Websocket closed"); - logger.log("Debug session closed", { code, reason }); + clientLogger.debug("Websocket closed"); + clientLogger.debug("Debug session closed", { code, reason }); // Case: disconnected due to new client connected => do not reconnect // Case: disconnected due to 10min idle or 2hr WebSocket connection limit => reconnect if (code !== WEBSOCKET_CLOSE_CODE.NEW_CLIENT_CONNECTED) { - logger.log("Debug session reconnecting..."); + clientLogger.debug("Debug session reconnecting..."); startClient(debugEndpoint); } }); ws.on("error", (e) => { - logger.debug(`WebSocket error: ${e}`); - logger.error(`Debug session error: ${e}`); + clientLogger.error(`WebSocket error: ${e}`); }); - ws.on("message", onMessage); + ws.on("message", onClientMessage); } -async function onMessage(message) { - logger.debug(`Message received: ${message}`); +async function onClientMessage(message) { + clientLogger.debug(`Message received: ${message}`); const data = JSON.parse(message); // Handle actions if (data.action === "clientConnected") { - logger.log("Debug session started. Listening for requests..."); - logger.debug(`Client connection id: ${data.clientConnectionId}`); + clientLogger.info("Debug session started. Listening for requests..."); + clientLogger.debug(`Client connection id: ${data.clientConnectionId}`); return; } if (data.action === "clientDisconnectedDueToNewClient") { - logger.warn( + clientLogger.warn( "A new debug session has been started. This session will be closed..." ); ws.close(WEBSOCKET_CLOSE_CODE.NEW_CLIENT_CONNECTED); return; } if (data.action === "failedToSendResponseDueToStubDisconnected") { - logger.error( + clientLogger.error( chalk.grey(data.debugRequestId) + " Failed to send a response because the Lambda function is disconnected" ); return; } if (data.action === "failedToSendResponseDueToUnknown") { - logger.error( + clientLogger.error( chalk.grey(data.debugRequestId) + " Failed to send a response to the Lambda function" ); @@ -776,6 +830,7 @@ async function onMessage(message) { return; } + clientLogger.debug(`=== onClientMessage: ${message}`); const { stubConnectionId, event, @@ -793,14 +848,14 @@ async function onMessage(message) { eventSource === null ? " invoked" : ` invoked by ${chalk.cyan(eventSource)}`; - logger.log( + clientLogger.info( chalk.grey( `${context.awsRequestId} REQUEST ${chalk.cyan( env.AWS_LAMBDA_FUNCTION_NAME )} [${debugSrcPath}/${debugSrcHandler}]${eventSourceDesc}` ) ); - logger.debug(chalk.grey(JSON.stringify(event))); + clientLogger.debug(chalk.grey(JSON.stringify(event))); // From Lambda /var/runtime/bootstrap // https://link.medium.com/7ir11kKjwbb @@ -815,9 +870,8 @@ async function onMessage(message) { debugSrcPath, debugSrcHandler ); - console.log(transpiledHandler); } catch (e) { - console.log(e); + clientLogger.error("Get trasnspiler handler error", e); // TODO: Handle esbuild transpilation error return; } @@ -891,7 +945,7 @@ async function onMessage(message) { } } } catch (e) { - logger.debug(`Failed to parse event source ${e}`); + clientLogger.debug(`Failed to parse event source ${e}`); } return null; @@ -911,7 +965,7 @@ async function onMessage(message) { function returnLambdaResponse() { // Handle timeout: do not send a response, let stub timeout if (lambdaResponse.type === "timeout") { - logger.log( + clientLogger.info( chalk.grey( `${context.awsRequestId} ${chalk.red("ERROR")} Lambda timed out` ) @@ -921,7 +975,7 @@ async function onMessage(message) { // handle success/failure if (lambdaResponse.type === "success") { - logger.log( + clientLogger.info( chalk.grey( `${context.awsRequestId} RESPONSE ${JSON.stringify( lambdaResponse.data @@ -930,8 +984,8 @@ async function onMessage(message) { ); } else if (lambdaResponse.type === "failure") { const errorMessage = lambdaResponse.error.message || lambdaResponse.error; - console.log(lambdaResponse.error); - logger.error(chalk.grey(context.awsRequestId) + ` ${errorMessage}`); + clientLogger.info(lambdaResponse.error); + clientLogger.error(chalk.grey(context.awsRequestId) + ` ${errorMessage}`); } ws.send( JSON.stringify({ @@ -951,61 +1005,14 @@ async function onMessage(message) { }); } -module.exports = async function (argv, cliInfo) { - const config = applyConfig(argv); - const stackName = `${config.stage}-debug-stack`; - - // Deploy debug stack - logger.log(""); - logger.log("======================="); - logger.log(" Deploying debug stack"); - logger.log("======================="); - logger.log(""); - const debugAppArgs = [stackName, config.stage, config.region]; - // Note: When deploying the debug stack, the current working directory is user's app. - // Setting the current working directory to debug stack cdk app directory to allow - // Lambda Function construct be able to reference code with relative path. - process.chdir(path.join(paths.ownPath, "assets", "debug-stack")); - const debugStackRet = await cdkDeploy({ - ...cliInfo.cdkOptions, - app: `node bin/index.js ${debugAppArgs.join(" ")}`, - output: "cdk.out", - }); - // Note: Restore working directory - process.chdir(paths.appPath); - - // Get WebSocket endpoint - if ( - !debugStackRet || - !debugStackRet.outputs || - !debugStackRet.outputs.Endpoint - ) { - throw new Error( - `Failed to get the endpoint from the deployed debug stack ${stackName}` - ); - } - config.debugEndpoint = debugStackRet.outputs.Endpoint; - - // Deploy app - logger.log(""); - logger.log("==============="); - logger.log(" Deploying app"); - logger.log("==============="); - logger.log(""); - prepareCdk(argv, cliInfo, config); - await sstDeploy(argv, config, cliInfo); - - // Start client - logger.log(""); - logger.log("==================="); - logger.log(" Starting debugger"); - logger.log("==================="); - logger.log(""); - - await startBuilder([ - { debugSrcPath: "src/api", debugSrcHandler: "api.handler" }, - { debugSrcPath: "src/sns", debugSrcHandler: "sns.handler" }, - ]); +function setTimer(lambda, handleResponse, timeoutInMs) { + return setTimeout(function () { + handleResponse({ type: "timeout" }); - startClient(config.debugEndpoint); -}; + try { + process.kill(lambda.pid, "SIGKILL"); + } catch (e) { + clientLogger.error("Cannot kill timed out Lambda", e); + } + }, timeoutInMs); +} diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index fed238b398..40f0733c02 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -7,7 +7,7 @@ const spawn = require("cross-spawn"); const sstCore = require("@serverless-stack/core"); const paths = require("./paths"); -const logger = require("../../lib/logger"); +const { logger } = require("../../lib/logger"); const { isSubProcessError } = require("../../lib/errors"); const isTs = fs.existsSync(path.join(paths.appPath, "tsconfig.json")); @@ -24,7 +24,7 @@ function exitWithMessage(message, shortMessage) { // Move newline before message if (message.indexOf("\n") === 0) { - logger.log(""); + logger.info(""); } logger.error(message.trimStart()); process.exit(1); @@ -87,7 +87,7 @@ function runCdkVersionMatch(cliInfo) { return; } - logger.log(""); + logger.info(""); logger.error( `Mismatched versions of AWS CDK packages. Serverless Stack currently supports ${chalk.bold( cdkVersion @@ -96,7 +96,7 @@ function runCdkVersionMatch(cliInfo) { if (mismatchedDeps.length > 0) { const depString = formatDepsForInstall(mismatchedDeps, cdkVersion); - logger.log( + logger.info( usingYarn ? ` yarn add ${depString} --exact` : ` npm install ${depString} --save-exact` @@ -104,20 +104,20 @@ function runCdkVersionMatch(cliInfo) { } if (mismatchedDevDeps.length > 0) { const devDepString = formatDepsForInstall(mismatchedDevDeps, cdkVersion); - logger.log( + logger.info( usingYarn ? ` yarn add ${devDepString} --dev --exact` : ` npm install ${devDepString} --save-dev --save-exact` ); } - logger.log(`\nLearn more about it here — ${helpUrl}\n`); + logger.info(`\nLearn more about it here — ${helpUrl}\n`); } function lint() { const config = isTs ? ".eslintrc.typescript.js" : ".eslintrc.babel.js"; - logger.log(chalk.grey("Linting source")); + logger.info(chalk.grey("Linting source")); const results = spawn.sync( getCmdPath("eslint"), [ @@ -151,14 +151,14 @@ function transpile(cliInfo) { runCdkVersionMatch(cliInfo); if (isTs) { - logger.log(chalk.grey("Detected tsconfig.json")); - logger.log(chalk.grey("Compiling TypeScript")); + logger.info(chalk.grey("Detected tsconfig.json")); + logger.info(chalk.grey("Compiling TypeScript")); cmd = getCmdPath("tsc"); args = ["--outDir", paths.appBuildPath, "--rootDir", paths.appLibPath]; opts = { stdio: "inherit", cwd: paths.appPath }; } else { - logger.log(chalk.grey("Compiling with Babel")); + logger.info(chalk.grey("Compiling with Babel")); cmd = getCmdPath("babel"); args = [ @@ -255,7 +255,7 @@ function applyConfig(argv) { function writeConfig(config) { const type = config.type.trim(); - logger.log(chalk.grey(`Preparing ${type}`)); + logger.info(chalk.grey(`Preparing ${type}`)); fs.writeFileSync( path.join(paths.appBuildPath, "sst-merged.json"), diff --git a/yarn.lock b/yarn.lock index 8d40a1f707..af3d97a153 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1233,6 +1233,15 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@dabh/diagnostics@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.2.tgz#290d08f7b381b8f94607dc8f471a12c675f9db31" + integrity sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q== + dependencies: + colorspace "1.1.x" + enabled "2.0.x" + kuler "^2.0.0" + "@eslint/eslintrc@^0.2.2": version "0.2.2" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.2.tgz#d01fc791e2fc33e88a29d6f3dc7e93d0cd784b76" @@ -2901,7 +2910,7 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== -async@^3.2.0: +async@^3.1.0, async@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== @@ -3590,7 +3599,7 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.9.0: +color-convert@^1.9.0, color-convert@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -3609,16 +3618,40 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@~1.1.4: +color-name@^1.0.0, 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== -colors@^1.4.0: +color-string@^1.5.2: + version "1.5.4" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6" + integrity sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a" + integrity sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.2" + +colors@^1.2.1, colors@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== +colorspace@1.1.x: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.2.tgz#e0128950d082b86a2168580796a0aa5d6c68d8c5" + integrity sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ== + dependencies: + color "3.0.x" + text-hex "1.0.x" + columnify@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" @@ -4237,6 +4270,11 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +enabled@2.0.x: + version "2.0.0" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== + encoding@^0.1.11: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -4752,6 +4790,11 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fast-safe-stringify@^2.0.4: + version "2.0.7" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" + integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== + fb-watchman@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" @@ -4759,6 +4802,11 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fecha@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.0.tgz#3ffb6395453e3f3efff850404f0a59b6747f5f41" + integrity sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg== + figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" @@ -4891,6 +4939,11 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +fn.name@1.x.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== + for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -5629,6 +5682,11 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -6546,6 +6604,11 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +kuler@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== + lazystream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" @@ -6802,6 +6865,17 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" +logform@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.2.0.tgz#40f036d19161fc76b68ab50fdc7fe495544492f2" + integrity sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg== + dependencies: + colors "^1.2.1" + fast-safe-stringify "^2.0.4" + fecha "^4.2.0" + ms "^2.1.1" + triple-beam "^1.3.0" + loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -7482,6 +7556,13 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +one-time@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== + dependencies: + fn.name "1.x.x" + onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -8180,7 +8261,7 @@ read@1, read@^1.0.4, read@~1.0.1: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@^2.3.7, 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== @@ -8677,6 +8758,13 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + sisteransi@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -8941,6 +9029,11 @@ sst-cdk@1.74.0-rc.6: wrap-ansi "^7.0.0" yargs "^16.1.1" +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= + stack-utils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593" @@ -9269,6 +9362,11 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== +text-hex@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -9419,6 +9517,11 @@ trim-off-newlines@^1.0.0: resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= +triple-beam@^1.2.0, triple-beam@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" + integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== + ts-jest@^26.1.4: version "26.2.0" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.2.0.tgz#7ec22faceb05ee1467fdb5265d1b33c27441f163" @@ -9834,6 +9937,29 @@ windows-release@^3.1.0: dependencies: execa "^1.0.0" +winston-transport@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.4.0.tgz#17af518daa690d5b2ecccaa7acf7b20ca7925e59" + integrity sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw== + dependencies: + readable-stream "^2.3.7" + triple-beam "^1.2.0" + +winston@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.3.3.tgz#ae6172042cafb29786afa3d09c8ff833ab7c9170" + integrity sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw== + dependencies: + "@dabh/diagnostics" "^2.0.2" + async "^3.1.0" + is-stream "^2.0.0" + logform "^2.2.0" + one-time "^1.0.0" + readable-stream "^3.4.0" + stack-trace "0.0.x" + triple-beam "^1.3.0" + winston-transport "^4.4.0" + word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" From e1c2838d84f03d203a3b428647093927ac8e6793 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 4 Jan 2021 15:54:54 -0500 Subject: [PATCH 180/481] Adding ability for logger to log objects --- packages/cli/lib/logger.js | 14 ++++++++++++-- packages/cli/package.json | 1 + packages/resources/lambda/stub/index.js | 11 ++++++++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/packages/cli/lib/logger.js b/packages/cli/lib/logger.js index dcb74cc2a9..2834827611 100644 --- a/packages/cli/lib/logger.js +++ b/packages/cli/lib/logger.js @@ -1,9 +1,12 @@ const { createLogger, format, transports } = require("winston"); +const jsonStringify = require('fast-safe-stringify'); const LEVEL = Symbol.for("level"); +const SPLAT = Symbol.for("splat"); const paths = require("../scripts/util/paths"); const consoleLogFormat = format.printf( - ({ level, message, label, timestamp, [LEVEL]: rawLevel }) => { + ({ level, message, label, timestamp, [SPLAT]: splat, [LEVEL]: rawLevel }) => { + message = joinMessageAndSplat(message, splat); if (process.env.DEBUG) { return `${timestamp} [${label}] ${level}: ${message}`; } else { @@ -19,7 +22,8 @@ const consoleLogFormat = format.printf( } ); -const fileLogFormat = format.printf(({ level, message, label, timestamp }) => { +const fileLogFormat = format.printf(({ level, message, [SPLAT]: splat, label, timestamp }) => { + message = joinMessageAndSplat(message, splat); return `${timestamp} [${label}] ${level}: ${message}`; }); @@ -51,6 +55,12 @@ function addFileTransport() { ); } +function joinMessageAndSplat(message, splat) { + return [ message ].concat(splat || []) + .map(arg => typeof arg === 'string' ? arg : jsonStringify(arg)) + .join(' '); +} + module.exports = { addFileTransport, logger, diff --git a/packages/cli/package.json b/packages/cli/package.json index c50f9820ba..e19f84ebc1 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -58,6 +58,7 @@ "cross-spawn": "^7.0.3", "esbuild": "^0.8.26", "eslint": "^7.16.0", + "fast-safe-stringify": "^2.0.6", "fs-extra": "^9.0.1", "jest": "^26.1.0", "promise.allsettled": "^1.0.2", diff --git a/packages/resources/lambda/stub/index.js b/packages/resources/lambda/stub/index.js index c3cdaee3b2..f5ca882d13 100644 --- a/packages/resources/lambda/stub/index.js +++ b/packages/resources/lambda/stub/index.js @@ -169,6 +169,10 @@ exports.main = function (event, context, callback) { } }; +/////////////////////////////// +// Util Functions +/////////////////////////////// + function constructEnvs() { const envs = {}; Object.keys(process.env) @@ -219,8 +223,13 @@ function constructEnvs() { return envs; } -// Serialize error + +/////////////////////////////// +// Serialize Error Functions +// // https://github.com/sindresorhus/serialize-error/blob/master/index.js +/////////////////////////////// + const commonProperties = [ { property: "name", enumerable: false }, { property: "message", enumerable: false }, From 51e385ee0a5f9ecb36f1b5813e6140ab3c3d77d1 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 4 Jan 2021 17:26:51 -0500 Subject: [PATCH 181/481] - Fix console.log format inside Lambda function - Remove eslint internal from scripts/util - Remove getCmdPath in sst start --- packages/cli/scripts/start.js | 42 +++++++++---------- .../cli/scripts/util/.eslintrc.internal.js | 18 -------- packages/cli/scripts/util/cdkHelpers.js | 9 +++- packages/resources/package.json | 2 + packages/resources/src/Function.ts | 4 +- packages/resources/src/util/builder.ts | 36 +++++++++++----- 6 files changed, 56 insertions(+), 55 deletions(-) delete mode 100644 packages/cli/scripts/util/.eslintrc.internal.js diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index f617cdaa3e..9d6f6d5d00 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -42,8 +42,6 @@ const WEBSOCKET_CLOSE_CODE = { }; let watcher; -let tscExec; -let eslintExec; let esbuildService; const builderState = { @@ -201,10 +199,6 @@ async function startBuilder(entryPoints) { return; } - // Run linter and type checker - tscExec = await getCmdPath("tsc"); - eslintExec = await getCmdPath("eslint"); - srcPaths.forEach((srcPath) => { const lintProcess = lint(srcPath); const typeCheckProcess = typeCheck(srcPath); @@ -535,14 +529,16 @@ async function reTranspiler(srcPath, handler) { await onReTranspileFailed(srcPath, handler); } } + function lint(srcPath) { const { inputFiles } = builderState.srcPathsData[srcPath]; const process = spawn( - eslintExec, + path.join(paths.appNodeModules, ".bin", "eslint"), [ "--no-error-on-unmatched-pattern", "--config", + path.join(paths.appBuildPath, ".eslintrc.internal.js"), path.join(paths.ownPath, "scripts", "util", ".eslintrc.internal.js"), "--ext", ".js,.ts", @@ -572,10 +568,14 @@ function typeCheck(srcPath) { return null; } - const process = spawn(tscExec, ["--noEmit", ...tsFiles], { - stdio: "inherit", - cwd: path.join(paths.appPath, srcPath), - }); + const process = spawn( + path.join(paths.appNodeModules, ".bin", "tsc"), + ["--noEmit", ...tsFiles], + { + stdio: "inherit", + cwd: path.join(paths.appPath, srcPath), + } + ); process.on("close", (code) => { builderLogger.debug(`type checker exited with code ${code}`); @@ -670,14 +670,6 @@ async function checkFileExists(file) { .catch(() => false); } -async function getCmdPath(cmd) { - const appPath = path.join(paths.appNodeModules, ".bin", cmd); - const ownPath = path.join(paths.ownNodeModules, ".bin", cmd); - - // Fallback to own node modules, in case of tests that don't install the cli - return (await checkFileExists(appPath)) ? appPath : ownPath; -} - async function getHandlerFilePath(srcPath, handler) { const parts = handler.split("."); const name = parts[0]; @@ -798,9 +790,9 @@ function startClient(debugEndpoint) { clientState.ws.on("message", onClientMessage); } -function startWsKeepAliveWatcher() { - setInterval(); -} +//function startWsKeepAliveWatcher() { +// setInterval(); +//} async function onClientMessage(message) { clientLogger.debug(`Message received: ${message}`); @@ -905,7 +897,11 @@ async function onClientMessage(message) { env: { ...process.env, ...env }, } ); - const timer = setLambdaTimeoutTimer(lambda, handleResponse, debugRequestTimeoutInMs); + const timer = setLambdaTimeoutTimer( + lambda, + handleResponse, + debugRequestTimeoutInMs + ); function parseEventSource(event) { try { diff --git a/packages/cli/scripts/util/.eslintrc.internal.js b/packages/cli/scripts/util/.eslintrc.internal.js deleted file mode 100644 index 301298b292..0000000000 --- a/packages/cli/scripts/util/.eslintrc.internal.js +++ /dev/null @@ -1,18 +0,0 @@ -module.exports = { - root: true, - parser: "@babel/eslint-parser", - parserOptions: { - babelOptions: { - configFile: "./.build/.babelrc.json", - }, - }, - plugins: ["@babel"], - overrides: [ - { - files: ["*.ts", "*.tsx"], - parser: "@typescript-eslint/parser", - plugins: ["@typescript-eslint"], - extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"], - }, - ], -}; diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index 3feebaea19..798209f171 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -152,7 +152,7 @@ async function lint(inputFiles) { try { const { stdout, stderr } = await exec( [ - "$(npm bin)/eslint", + path.join(paths.appNodeModules, ".bin", "eslint"), "--color", "--no-error-on-unmatched-pattern", "--config", @@ -191,7 +191,12 @@ async function typeCheck(inputFiles) { try { const { stdout, stderr } = await exec( - ["$(npm bin)/tsc", "--pretty", "--noEmit", ...inputFiles].join(" "), + [ + path.join(paths.appNodeModules, ".bin", "tsc"), + "--pretty", + "--noEmit", + ...inputFiles, + ].join(" "), { cwd: paths.appPath } ); if (stdout) { diff --git a/packages/resources/package.json b/packages/resources/package.json index 7dfdfddde5..7d5e93719c 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -28,6 +28,8 @@ "@aws-cdk/aws-lambda": "1.74.0", "@aws-cdk/aws-lambda-nodejs": "1.74.0", "@aws-cdk/core": "1.74.0", + "chalk": "^4.1.0", + "esbuild": "^0.8.26", "eslint": "^7.16.0", "fs-extra": "^9.0.1", "typescript": "^3.9.7" diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index 9ab073377e..ede8b1d1bf 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -50,7 +50,7 @@ export class Function extends lambda.Function { }); // func.node.defaultChild.cfnOptions.metadata = { 'sst:lambda:src': 'src/hello.handler' }; } else { - const builderOutput = builder({ + const buildPath = builder({ srcPath: code.path, handler: props.handler, buildDir: root.buildDir, @@ -58,7 +58,7 @@ export class Function extends lambda.Function { super(scope, id, { ...props, - code: lambda.Code.fromAsset(builderOutput.outPath), + code: lambda.Code.fromAsset(buildPath), }); } } diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index 4e1a7399cd..86a3573ce1 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -1,3 +1,4 @@ +import chalk from "chalk"; import * as path from "path"; import * as fs from "fs-extra"; import * as esbuild from "esbuild"; @@ -31,12 +32,16 @@ function getEsbuildMetafileName(srcPath: string, handler: string): string { return `.esbuild.${key}.json`; } -export function builder(builderProps: BuilderProps) { +export function builder(builderProps: BuilderProps): string { const { srcPath, handler, buildDir } = builderProps; + console.log(chalk.grey(`Building Lambda function ${srcPath}/${handler}`)); + const external = ["aws-sdk"]; const appPath = process.cwd(); + const appNodeModules = path.join(appPath, "node_modules"); + const tsconfig = path.join(srcPath, "tsconfig.json"); const isTs = fs.existsSync(tsconfig); const extension = isTs ? ".ts" : ".js"; @@ -57,10 +62,12 @@ export function builder(builderProps: BuilderProps) { (file: string) => file.indexOf("node_modules") === -1 ); + console.log(chalk.grey("Linting Lambda function source")); + try { const stdout = execSync( [ - "$(npm bin)/eslint", + path.join(appNodeModules, ".bin", "eslint"), "--color", "--no-error-on-unmatched-pattern", "--config", @@ -76,7 +83,10 @@ export function builder(builderProps: BuilderProps) { ].join(" "), { cwd: appPath } ); - console.log(stdout.toString()); + const output = stdout.toString(); + if (output.trim() !== "") { + console.log(output); + } } catch (e) { console.log(e.stdout.toString()); throw new Error("There was a problem linting the source."); @@ -90,12 +100,22 @@ export function builder(builderProps: BuilderProps) { return; } + console.log(chalk.grey("Type checking Lambda function source")); + try { const stdout = execSync( - ["$(npm bin)/tsc", "--pretty", "--noEmit", ...inputFiles].join(" "), + [ + path.join(appNodeModules, ".bin", "tsc"), + "--pretty", + "--noEmit", + ...inputFiles, + ].join(" "), { cwd: appPath } ); - console.log(stdout.toString()); + const output = stdout.toString(); + if (output.trim() !== "") { + console.log(output); + } } catch (e) { console.log(e.stdout.toString()); throw new Error("There was a problem type checking the source."); @@ -130,9 +150,5 @@ export function builder(builderProps: BuilderProps) { typeCheck(inputFiles); } - return { - isTs, - handler, - outPath: buildPath, - }; + return buildPath; } From aa59c0dca9e2b9eab2474438c2faf496deddeeb4 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 4 Jan 2021 17:51:39 -0500 Subject: [PATCH 182/481] Fixing jest-ts test case --- packages/cli/test/jest-ts/tsconfig.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/cli/test/jest-ts/tsconfig.json b/packages/cli/test/jest-ts/tsconfig.json index 7d659db8a8..9712081ce9 100644 --- a/packages/cli/test/jest-ts/tsconfig.json +++ b/packages/cli/test/jest-ts/tsconfig.json @@ -16,8 +16,9 @@ "inlineSourceMap": true, "inlineSources": true, "experimentalDecorators": true, - "strictPropertyInitialization": false, - "typeRoots": ["./node_modules/@types"] + "strictPropertyInitialization": false + // Disabling for tests because we are using Yarn Workspaces + // "typeRoots": ["./node_modules/@types"] }, - "include": ["lib"] + "include": ["lib", "test"] } From 3150435c24fcfd9b2e28bc84ba1f57cd4bd42cbd Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 4 Jan 2021 21:39:24 -0500 Subject: [PATCH 183/481] Handling websocket 10min idle timeout --- .../assets/debug-stack/lambda/wsDefault.js | 238 +++++++++++------- packages/cli/lib/logger.js | 12 +- packages/cli/scripts/start.js | 46 ++-- packages/resources/lambda/stub/index.js | 13 +- 4 files changed, 188 insertions(+), 121 deletions(-) diff --git a/packages/cli/assets/debug-stack/lambda/wsDefault.js b/packages/cli/assets/debug-stack/lambda/wsDefault.js index 3438bd99b8..37ae84e973 100644 --- a/packages/cli/assets/debug-stack/lambda/wsDefault.js +++ b/packages/cli/assets/debug-stack/lambda/wsDefault.js @@ -4,118 +4,164 @@ const ddb = new AWS.DynamoDB.DocumentClient({ region: process.env.AWS_REGION }); exports.main = async function (event) { console.log(event); - const eventData = JSON.parse(event.body); - if (eventData.action === "connectClient") { - // register client + const eventBody = JSON.parse(event.body); + + console.log('Event action:', eventBody.action); + + switch (eventBody.action) { + case "client.register": + await onClientRegister(event); + break; + case "client.lambdaResponse": + await onClientLambdaResponse(event, eventBody); + break; + case "stub.lambdaRequest": + await onStubLambdaRequest(event, eventBody); + break; + } + + return { statusCode: 200, body: "Data sent." }; +}; + +async function onClientRegister(event) { + // store client in DB + console.log('Registering new client.'); + const clientConnectionId = event.requestContext.connectionId; + const oldConnectionId = await setClientConnectionId(clientConnectionId); + + // notify new client is registered + console.log('Notifying client connected.'); + await postToConnection( + event, + JSON.stringify({ + action: "server.clientRegistered", + clientConnectionId, + }), + clientConnectionId + ); + + // notify old client is replaced by the newer client + if (oldConnectionId) { + console.log('Existing client found. Notify existing client to disconnect.'); + try { + await postToConnection( + event, + JSON.stringify({ action: "server.clientDisconnectedDueToNewClient" }), + oldConnectionId + ); + } catch(e) { + } + } +}; + +async function onClientLambdaResponse(event, eventBody) { + // send response to stub + try { + console.log('Sending response to stub.'); + await postToConnection(event, event.body, eventBody.stubConnectionId); + } catch (e) { + console.error(e); + + console.log('Notifying client response failed to send to stub.'); const clientConnectionId = event.requestContext.connectionId; - const oldConnectionId = await setClientConnectionId(clientConnectionId); + const action = + e.statusCode === 410 + ? "server.failedToSendResponseDueToStubDisconnected" + : "server.failedToSendResponseDueToUnknown"; await postToConnection( + event, JSON.stringify({ - action: "clientConnected", - clientConnectionId, + action, + debugRequestId: eventBody.debugRequestId, }), clientConnectionId ); - // notify old client is replaced by the newer client - if (oldConnectionId) { - try { - await postToConnection( - JSON.stringify({ action: "clientDisconnectedDueToNewClient" }), - oldConnectionId - ); - } catch (e) { - console.log(e); - } - } - } else if (eventData.action === "newRequest") { - // send request to client - const stubConnectionId = event.requestContext.connectionId; - const clientConnectionId = await getClientConnectionId(); - if (clientConnectionId) { - try { - await postToConnection( - JSON.stringify({ ...eventData, stubConnectionId }), - clientConnectionId - ); - } catch (e) { - // handle failed to send - console.log(e); - const action = - e.statusCode === 410 - ? "failedToSendRequestDueToClientNotConnected" - : "failedToSendRequestDueToUnknown"; - await postToConnection(JSON.stringify({ action }), stubConnectionId); - } - } else { - // handle client connection not exist + throw e; + } +} + +async function onStubLambdaRequest(event, eventBody) { + const stubConnectionId = event.requestContext.connectionId; + + // get connected client + console.log('Getting connected client id.'); + const clientConnectionId = await getClientConnectionId(); + + // send request to client + if (clientConnectionId) { + console.log('Sending request to client.'); + try { await postToConnection( - JSON.stringify({ - action: "failedToSendRequestDueToClientNotConnected", - }), - stubConnectionId + event, + JSON.stringify({ ...eventBody, stubConnectionId }), + clientConnectionId ); - } - } else if (eventData.action === "newResponse") { - try { - await postToConnection(event.body, eventData.stubConnectionId); } catch (e) { - const clientConnectionId = event.requestContext.connectionId; + console.error(e); + + console.log('Notifying stub request failed to send to client.'); const action = e.statusCode === 410 - ? "failedToSendResponseDueToStubDisconnected" - : "failedToSendResponseDueToUnknown"; - await postToConnection( - JSON.stringify({ - action, - debugRequestId: eventData.debugRequestId, - }), - clientConnectionId - ); + ? "server.failedToSendRequestDueToClientNotConnected" + : "server.failedToSendRequestDueToUnknown"; + await postToConnection(event, JSON.stringify({ action }), stubConnectionId); } + } else { + // handle no connected client + console.log('Notifying stub no connected client.'); + await postToConnection( + event, + JSON.stringify({ + action: "server.failedToSendRequestDueToClientNotConnected", + }), + stubConnectionId + ); } +} - async function getClientConnectionId() { - const ret = await ddb - .get({ - TableName: process.env.TABLE_NAME, - Key: { pk: "client" }, - ConsistentRead: true, - }) - .promise(); - return ret.Item && ret.Item.connectionId; - } +/////////////////////////////// +// Util Functions +/////////////////////////////// - async function setClientConnectionId(connectionId) { - const ret = await ddb - .update({ - TableName: process.env.TABLE_NAME, - Key: { pk: "client" }, - UpdateExpression: "SET connectionId = :connectionId", - ExpressionAttributeValues: { - ":connectionId": connectionId, - }, - ReturnValues: "UPDATED_OLD", - }) - .promise(); - return ret.Attributes && ret.Attributes.connectionId; - } +async function getClientConnectionId() { + const ret = await ddb + .get({ + TableName: process.env.TABLE_NAME, + Key: { pk: "client" }, + ConsistentRead: true, + }) + .promise(); + return ret.Item && ret.Item.connectionId; +} - async function postToConnection(data, connectionId) { - const apigwManagementApi = new AWS.ApiGatewayManagementApi({ - apiVersion: "2018-11-29", - endpoint: - event.requestContext.domainName + "/" + event.requestContext.stage, - }); - - await apigwManagementApi - .postToConnection({ - ConnectionId: connectionId, - Data: data, - }) - .promise(); - } +async function setClientConnectionId(connectionId) { + const ret = await ddb + .update({ + TableName: process.env.TABLE_NAME, + Key: { pk: "client" }, + UpdateExpression: "SET connectionId = :connectionId", + ExpressionAttributeValues: { + ":connectionId": connectionId, + }, + ReturnValues: "UPDATED_OLD", + }) + .promise(); + return ret.Attributes && ret.Attributes.connectionId; +} + +async function postToConnection(event, data, connectionId) { + const apigwManagementApi = new AWS.ApiGatewayManagementApi({ + apiVersion: "2018-11-29", + endpoint: `${event.requestContext.domainName}/${event.requestContext.stage}`, + }); + + await apigwManagementApi + .postToConnection({ + ConnectionId: connectionId, + Data: data, + }) + .promise(); +} - return { statusCode: 200, body: "Data sent." }; -}; diff --git a/packages/cli/lib/logger.js b/packages/cli/lib/logger.js index 2834827611..3c07481068 100644 --- a/packages/cli/lib/logger.js +++ b/packages/cli/lib/logger.js @@ -8,7 +8,9 @@ const consoleLogFormat = format.printf( ({ level, message, label, timestamp, [SPLAT]: splat, [LEVEL]: rawLevel }) => { message = joinMessageAndSplat(message, splat); if (process.env.DEBUG) { - return `${timestamp} [${label}] ${level}: ${message}`; + return label + ? `${timestamp} [${label}] ${level}: ${message}` + : `${timestamp} ${level}: ${message}`; } else { // logger.info('hi') => hi // logger.warn('hi') => warn hi @@ -16,7 +18,9 @@ const consoleLogFormat = format.printf( if (rawLevel === "info") { return message; } else { - return label ? `[${label}] ${level} ${message}` : `${level} ${message}`; + return label + ? `[${label}] ${level} ${message}` + : `${level} ${message}`; } } } @@ -24,7 +28,9 @@ const consoleLogFormat = format.printf( const fileLogFormat = format.printf(({ level, message, [SPLAT]: splat, label, timestamp }) => { message = joinMessageAndSplat(message, splat); - return `${timestamp} [${label}] ${level}: ${message}`; + return label + ? `${timestamp} [${label}] ${level}: ${message}` + : `${timestamp} ${level}: ${message}`; }); const logger = createLogger({ diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index f617cdaa3e..17745458a0 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -75,7 +75,7 @@ const srcPathDataTemplateObject = { const clientState = { ws: null, - wsKeepaliveTimer: null, + wsKeepAliveTimer: null, }; const MOCK_SLOW_ESBUILD_RETRANSPILE_IN_MS = 0; @@ -775,8 +775,9 @@ function startClient(debugEndpoint) { clientState.ws = new WebSocket(debugEndpoint); clientState.ws.on("open", () => { - clientState.ws.send(JSON.stringify({ action: "connectClient" })); + clientState.ws.send(JSON.stringify({ action: "client.register" })); clientLogger.debug("WebSocket opened"); + startKeepAliveMonitor(); }); clientState.ws.on("close", (code, reason) => { @@ -784,11 +785,13 @@ function startClient(debugEndpoint) { clientLogger.debug("Debug session closed", { code, reason }); // Case: disconnected due to new client connected => do not reconnect - // Case: disconnected due to 10min idle or 2hr WebSocket connection limit => reconnect - if (code !== WEBSOCKET_CLOSE_CODE.NEW_CLIENT_CONNECTED) { - clientLogger.debug("Debug session reconnecting..."); - startClient(debugEndpoint); + if (code === WEBSOCKET_CLOSE_CODE.NEW_CLIENT_CONNECTED) { + return; } + + // Case: disconnected due to 10min idle or 2hr WebSocket connection limit => reconnect + clientLogger.debug("Debug session reconnecting..."); + startClient(debugEndpoint); }); clientState.ws.on("error", (e) => { @@ -798,8 +801,22 @@ function startClient(debugEndpoint) { clientState.ws.on("message", onClientMessage); } -function startWsKeepAliveWatcher() { - setInterval(); +function startKeepAliveMonitor() { + // Cancel existing keep-alive timer + if (clientState.wsKeepAliveTimer) { + clientLogger.debug("Clearing existing keep-alive timer..."); + clearTimeout(clientState.wsKeepAliveTimer); + } + + // Create keep-alive timer + clientLogger.debug("Creating keep-alive timer..."); + clientState.ws.send(JSON.stringify({ action: "client.heartbeat" })); + clientState.wsKeepAliveTimer = setInterval(() => { + if (clientState.ws) { + clientLogger.debug('Sending keep-alive call'); + clientState.ws.send(JSON.stringify({ action: 'client.keepAlive' })); + } + }, 60000); } async function onClientMessage(message) { @@ -808,37 +825,36 @@ async function onClientMessage(message) { const data = JSON.parse(message); // Handle actions - if (data.action === "clientConnected") { + if (data.action === "server.clientRegistered") { clientLogger.info("Debug session started. Listening for requests..."); clientLogger.debug(`Client connection id: ${data.clientConnectionId}`); return; } - if (data.action === "clientDisconnectedDueToNewClient") { + if (data.action === "server.clientDisconnectedDueToNewClient") { clientLogger.warn( "A new debug session has been started. This session will be closed..." ); clientState.ws.close(WEBSOCKET_CLOSE_CODE.NEW_CLIENT_CONNECTED); return; } - if (data.action === "failedToSendResponseDueToStubDisconnected") { + if (data.action === "server.failedToSendResponseDueToStubDisconnected") { clientLogger.error( chalk.grey(data.debugRequestId) + " Failed to send a response because the Lambda function is disconnected" ); return; } - if (data.action === "failedToSendResponseDueToUnknown") { + if (data.action === "server.failedToSendResponseDueToUnknown") { clientLogger.error( chalk.grey(data.debugRequestId) + " Failed to send a response to the Lambda function" ); return; } - if (data.action !== "newRequest") { + if (data.action !== "stub.lambdaRequest") { return; } - clientLogger.debug(`=== onClientMessage: ${message}`); const { stubConnectionId, event, @@ -999,7 +1015,7 @@ async function onClientMessage(message) { JSON.stringify({ debugRequestId, stubConnectionId, - action: "newResponse", + action: "client.lambdaResponse", responseData: lambdaResponse.data, responseError: lambdaResponse.error, }) diff --git a/packages/resources/lambda/stub/index.js b/packages/resources/lambda/stub/index.js index f5ca882d13..87afec09bf 100644 --- a/packages/resources/lambda/stub/index.js +++ b/packages/resources/lambda/stub/index.js @@ -105,7 +105,7 @@ exports.main = function (event, context, callback) { _ref.ws.send( JSON.stringify({ - action: "newRequest", + action: "stub.lambdaRequest", debugRequestId, debugRequestTimeoutInMs: context.getRemainingTimeInMillis(), debugSrcPath: process.env.SST_DEBUG_SRC_PATH, @@ -125,8 +125,8 @@ exports.main = function (event, context, callback) { // Start timer to send keep-alive message if still waiting for response after 9 minutes console.log("sendMessage() - start keep alive timer"); _ref.keepAliveTimer = setTimeout(function () { - _ref.ws.send(JSON.stringify({ action: "keepalive" })); - console.log("sent keepalive message"); + _ref.ws.send(JSON.stringify({ action: "stub.keepAlive" })); + console.log("sent keepAlive message"); }, 540000); } @@ -137,15 +137,15 @@ exports.main = function (event, context, callback) { ); // handle failed to send requests - if (action === "failedToSendRequestDueToClientNotConnected") { + if (action === "server.failedToSendRequestDueToClientNotConnected") { throw new Error("Debug client not connected."); } - if (action === "failedToSendRequestDueToUnknown") { + if (action === "server.failedToSendRequestDueToUnknown") { throw new Error("Failed to send request to debug client."); } // handle invalid and expired response - if (action !== "newResponse" || debugRequestId !== _ref.debugRequestId) { + if (action !== "client.lambdaResponse" || debugRequestId !== _ref.debugRequestId) { console.log("receiveMessage() - discard response"); return; } @@ -223,7 +223,6 @@ function constructEnvs() { return envs; } - /////////////////////////////// // Serialize Error Functions // From c9e7f7978d311417c58db9c93fc706cfdf603961 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 4 Jan 2021 22:27:02 -0500 Subject: [PATCH 184/481] Changing the props for sst.Function --- .../cli/assets/lambda-invoke/bootstrap.js | 11 +-- packages/cli/scripts/start.js | 8 +- packages/cli/test/start/lib/index.js | 11 ++- packages/cli/test/start/src/api/lib.ts | 2 +- packages/resources/lambda/stub/index.js | 2 +- packages/resources/src/Function.ts | 72 ++++++++++++++---- packages/resources/src/util/builder.ts | 75 ++++++++++++------- 7 files changed, 124 insertions(+), 57 deletions(-) diff --git a/packages/cli/assets/lambda-invoke/bootstrap.js b/packages/cli/assets/lambda-invoke/bootstrap.js index 42e8f46185..4f4df0b4c9 100644 --- a/packages/cli/assets/lambda-invoke/bootstrap.js +++ b/packages/cli/assets/lambda-invoke/bootstrap.js @@ -53,15 +53,10 @@ async function processEvents(handler) { } function getHandler() { - const appParts = HANDLER.split("."); + const modulePath = TASK_ROOT; + const handlerName = HANDLER; - if (appParts.length !== 2) { - throw new Error(`Bad handler ${HANDLER}`); - } - - const [modulePath, handlerName] = appParts; - - const app = require(path.resolve(TASK_ROOT, modulePath)); + const app = require(path.resolve(modulePath)); const userHandler = app[handlerName]; diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 9d6f6d5d00..18e45b2444 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -839,6 +839,7 @@ async function onClientMessage(message) { debugRequestId, debugRequestTimeoutInMs, debugSrcPath, + debugSrcEntry, debugSrcHandler, } = data; @@ -852,7 +853,7 @@ async function onClientMessage(message) { chalk.grey( `${context.awsRequestId} REQUEST ${chalk.cyan( env.AWS_LAMBDA_FUNCTION_NAME - )} [${debugSrcPath}/${debugSrcHandler}]${eventSourceDesc}` + )} [${debugSrcPath}/${debugSrcEntry}:${debugSrcHandler}]${eventSourceDesc}` ) ); clientLogger.debug(chalk.grey(JSON.stringify(event))); @@ -867,6 +868,7 @@ async function onClientMessage(message) { try { transpiledHandler = await getTranspiledHandler( + // TODO: Add debugSrcEntry debugSrcPath, debugSrcHandler ); @@ -886,9 +888,9 @@ async function onClientMessage(message) { path.join(paths.ownPath, "assets", "lambda-invoke", "bootstrap.js"), JSON.stringify(event), JSON.stringify(context), - //"./src", // Local path to the Lambda functions + //"./src/index.js", // Local path to the Lambda functions transpiledHandler.srcPath, - //"hello.handler", + //"handler", // Function name of the handler function transpiledHandler.handler, ], { diff --git a/packages/cli/test/start/lib/index.js b/packages/cli/test/start/lib/index.js index 51bb8cf379..cf58ca882a 100644 --- a/packages/cli/test/start/lib/index.js +++ b/packages/cli/test/start/lib/index.js @@ -18,16 +18,19 @@ class MySampleStack extends sst.Stack { // Create a Lambda function subscribed to the topic const snsFunc = new sst.Function(this, "MySnsLambda", { - code: lambda.Code.fromAsset("src/sns"), - handler: "sns.handler", + entry: "sns.js", + srcPath: "src/sns", + handler: "handler", runtime: lambda.Runtime.NODEJS_12_X, }); topic.addSubscription(new subscriptions.LambdaSubscription(snsFunc)); // Create a Lambda function triggered by an HTTP API const apiFunc = new sst.Function(this, "MyApiLambda", { - code: lambda.Code.fromAsset("src/api"), - handler: "api.handler", + bundle: true, + entry: "api.ts", + srcPath: "src/api", + handler: "handler", runtime: lambda.Runtime.NODEJS_12_X, timeout: cdk.Duration.seconds(10), environment: { diff --git a/packages/cli/test/start/src/api/lib.ts b/packages/cli/test/start/src/api/lib.ts index 4d7c3d8fb0..c304f24cd1 100644 --- a/packages/cli/test/start/src/api/lib.ts +++ b/packages/cli/test/start/src/api/lib.ts @@ -1,3 +1,3 @@ -export default function(name: number): string { +export default function (name: string): string { return name; } diff --git a/packages/resources/lambda/stub/index.js b/packages/resources/lambda/stub/index.js index f5ca882d13..faaf16adbb 100644 --- a/packages/resources/lambda/stub/index.js +++ b/packages/resources/lambda/stub/index.js @@ -109,6 +109,7 @@ exports.main = function (event, context, callback) { debugRequestId, debugRequestTimeoutInMs: context.getRemainingTimeInMillis(), debugSrcPath: process.env.SST_DEBUG_SRC_PATH, + debugSrcEntry: process.env.SST_DEBUG_SRC_ENTRY, debugSrcHandler: process.env.SST_DEBUG_SRC_HANDLER, event, context: { @@ -223,7 +224,6 @@ function constructEnvs() { return envs; } - /////////////////////////////// // Serialize Error Functions // diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index ede8b1d1bf..5ef4514e1a 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -5,12 +5,54 @@ import * as lambda from "@aws-cdk/aws-lambda"; import { App } from "./App"; import { builder } from "./util/builder"; -export type FunctionProps = lambda.FunctionProps; +export interface FunctionProps extends lambda.FunctionOptions { + /** + * Path to the entry point of the function. A .js or .ts file. + */ + readonly entry: string; + /** + * The exported function in the entry file. + * + * @default - Defaults to "handler" + */ + readonly handler?: string; + /** + * The source directory where the entry point is located. The node_modules in this + * directory is used to generate the bundle. + * + * @default - Defaults to project root + */ + readonly srcPath?: string; + /** + * The runtime environment. Only runtimes of the Node.js family are + * supported. + * + * @default - Defaults to NODEJS_12_X + */ + readonly runtime?: lambda.Runtime; + /** + * Disable bundling with esbuild. + * + * @default - Defaults to true + */ + readonly bundle?: boolean; +} export class Function extends lambda.Function { constructor(scope: cdk.Construct, id: string, props: FunctionProps) { const root = scope.node.root as App; + // Set defaults + const handler = props.handler || "handler"; + const srcPath = props.srcPath || process.cwd(); + const runtime = props.runtime || lambda.Runtime.NODEJS_12_X; + const bundle = props.bundle === undefined ? true : props.bundle; + + // Validate entry file + if (!props.entry) { + throw new Error(`No entry point defined for the ${id} Lambda function`); + } + // Validate NodeJS runtime if ( ![ @@ -20,45 +62,45 @@ export class Function extends lambda.Function { lambda.Runtime.NODEJS_4_3, lambda.Runtime.NODEJS_6_10, lambda.Runtime.NODEJS_8_10, - ].includes(props.runtime) + ].includes(runtime) ) { throw new Error( `sst.Function does not support ${props.runtime}. Only NodeJS runtimes are currently supported.` ); } - // Validate a plain file is specified - if (!(props.code instanceof lambda.AssetCode)) { - throw new Error(`sst.Function only supports AssetCode type for code.`); - } - - const code = props.code as lambda.AssetCode; - if (root.local) { super(scope, id, { ...props, + runtime, code: lambda.Code.fromAsset( path.resolve(__dirname, "../dist/stub.zip") ), handler: "index.main", environment: { ...(props.environment || {}), - SST_DEBUG_SRC_PATH: code.path, - SST_DEBUG_SRC_HANDLER: props.handler, + SST_DEBUG_SRC_PATH: srcPath, + SST_DEBUG_SRC_HANDLER: handler, + SST_DEBUG_SRC_ENTRY: props.entry, SST_DEBUG_ENDPOINT: root.debugEndpoint || "", }, }); // func.node.defaultChild.cfnOptions.metadata = { 'sst:lambda:src': 'src/hello.handler' }; } else { - const buildPath = builder({ - srcPath: code.path, - handler: props.handler, + const { outDir, outHandler } = builder({ + bundle: bundle, + srcPath: srcPath, + handler: handler, + entry: props.entry, buildDir: root.buildDir, }); + console.log(outDir); super(scope, id, { ...props, - code: lambda.Code.fromAsset(buildPath), + runtime, + handler: outHandler, + code: lambda.Code.fromAsset(outDir), }); } } diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index 86a3573ce1..e0e9dabf82 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -5,13 +5,21 @@ import * as esbuild from "esbuild"; import { execSync } from "child_process"; interface BuilderProps { + readonly entry: string; readonly srcPath: string; readonly handler: string; + readonly bundle: boolean; readonly buildDir: string; } -function addExtensionToHandler(handler: string, extension: string): string { - return handler.replace(/\.[\w\d]+$/, extension); +interface BuilderOutput { + readonly outDir: string; + readonly outHandler: string; +} + +function getHandlerString(entry: string, handler: string): string { + const parts = entry.split("/"); + return parts[parts.length - 1].replace(/\.[\w\d]+$/, `.${handler}`); } function getInputFilesFromEsbuildMetafile(file: string): Array { @@ -26,36 +34,55 @@ function getInputFilesFromEsbuildMetafile(file: string): Array { return Object.keys(metaJson.inputs).map((input) => path.resolve(input)); } -function getEsbuildMetafileName(srcPath: string, handler: string): string { - const key = `${srcPath}/${handler}`.replace(/[/.]/g, "-"); +function getEsbuildMetafileName(entry: string, handler: string): string { + const key = `${entry}/${handler}`.replace(/[/.]/g, "-"); return `.esbuild.${key}.json`; } -export function builder(builderProps: BuilderProps): string { - const { srcPath, handler, buildDir } = builderProps; +function getAllExternalsForHandler(srcPath: string, bundle: boolean): Array { + let externals = ['aws-sdk']; - console.log(chalk.grey(`Building Lambda function ${srcPath}/${handler}`)); + if (bundle) { + return externals; + } - const external = ["aws-sdk"]; + try { + const packageJson = fs.readJsonSync(path.join(srcPath, "package.json")); + externals = Object.keys({ + ...(packageJson.dependencies || {}), + ...(packageJson.devDependencies || {}), + ...(packageJson.peerDependencies || {}), + }); + } catch (e) { + console.log(chalk.grey(`No package.json found in ${srcPath}`)); + } + return externals; +} + +export function builder(builderProps: BuilderProps): BuilderOutput { + const { entry, srcPath, bundle, handler, buildDir } = builderProps; + + console.log(chalk.grey(`Building Lambda function ${srcPath}/${entry}:${handler}`)); + + const outFile = 'index'; const appPath = process.cwd(); + + const external = getAllExternalsForHandler(srcPath, bundle); + const appNodeModules = path.join(appPath, "node_modules"); const tsconfig = path.join(srcPath, "tsconfig.json"); - const isTs = fs.existsSync(tsconfig); - const extension = isTs ? ".ts" : ".js"; + const hasTsconfig = fs.existsSync(tsconfig); const buildPath = path.join(srcPath, buildDir); const metafile = path.join( buildPath, - getEsbuildMetafileName(srcPath, handler) + getEsbuildMetafileName(entry, handler) ); - const entryPoint = path.join( - srcPath, - addExtensionToHandler(handler, extension) - ); + const entryPath = path.join(srcPath, entry); function lint(inputFiles: Array) { inputFiles = inputFiles.filter( @@ -122,9 +149,9 @@ export function builder(builderProps: BuilderProps): string { } } - function transpile(entryPoint: string): Array { - if (!fs.existsSync(entryPoint)) { - throw new Error(`Cannot find a handler file at ${entryPoint}".`); + function transpile(entryPath: string): Array { + if (!fs.existsSync(entryPath)) { + throw new Error(`Cannot find a handler file at ${entryPath}".`); } esbuild.buildSync({ @@ -135,20 +162,18 @@ export function builder(builderProps: BuilderProps): string { sourcemap: true, platform: "node", outdir: buildPath, - entryPoints: [entryPoint], - tsconfig: isTs ? tsconfig : undefined, + entryPoints: [entryPath], + tsconfig: hasTsconfig ? tsconfig : undefined, }); return getInputFilesFromEsbuildMetafile(metafile); } - const inputFiles = transpile(entryPoint); + const inputFiles = transpile(entryPath); lint(inputFiles); - if (isTs) { - typeCheck(inputFiles); - } + typeCheck(inputFiles); - return buildPath; + return { outDir: srcPath, outHandler: `${buildDir}/${getHandlerString(entry, handler)}` }; } From a7240bc0adc9dd5525b27d8499adf8924109eb53 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 5 Jan 2021 00:01:40 -0500 Subject: [PATCH 185/481] Synthesizing app spit out srcPath and srcHandler mapping when running sst start --- packages/cli/assets/cdk-wrapper/run.js | 9 ++++++++ packages/cli/scripts/start.js | 20 +++++++++------- packages/resources/src/App.ts | 32 +++++++++++++++++++++++++- packages/resources/src/Function.ts | 24 ++++++++++++++++--- 4 files changed, 73 insertions(+), 12 deletions(-) diff --git a/packages/cli/assets/cdk-wrapper/run.js b/packages/cli/assets/cdk-wrapper/run.js index 2959be14be..46f4490c05 100644 --- a/packages/cli/assets/cdk-wrapper/run.js +++ b/packages/cli/assets/cdk-wrapper/run.js @@ -28,12 +28,21 @@ if (!handler.default) { handlerNotFound(false); } +// When run inside `sst start`, we need to store a list of handlers to file for `sst start` to use +let synthCallback; +if (config.debugEndpoint) { + synthCallback = (lambdaHandlers) => { + fs.writeFileSync(path.join(appPath, ".build", "lambda-handlers.json"), JSON.stringify(lambdaHandlers)); + } +} + handler.default( new sst.App({ name: config.name, stage: config.stage, region: config.region, debugEndpoint: config.debugEndpoint, + synthCallback, }) ); diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index cff8fe57ce..bd61b8be6c 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -767,14 +767,13 @@ function startClient(debugEndpoint) { clientState.ws = new WebSocket(debugEndpoint); clientState.ws.on("open", () => { + clientLogger.debug("WebSocket connection opened"); clientState.ws.send(JSON.stringify({ action: "client.register" })); - clientLogger.debug("WebSocket opened"); startKeepAliveMonitor(); }); clientState.ws.on("close", (code, reason) => { - clientLogger.debug("Websocket closed"); - clientLogger.debug("Debug session closed", { code, reason }); + clientLogger.debug("Websocket connection closed", { code, reason }); // Case: disconnected due to new client connected => do not reconnect if (code === WEBSOCKET_CLOSE_CODE.NEW_CLIENT_CONNECTED) { @@ -782,12 +781,12 @@ function startClient(debugEndpoint) { } // Case: disconnected due to 10min idle or 2hr WebSocket connection limit => reconnect - clientLogger.debug("Debug session reconnecting..."); + clientLogger.debug("Reconnecting to websocket server..."); startClient(debugEndpoint); }); clientState.ws.on("error", (e) => { - clientLogger.error(`WebSocket error: ${e}`); + clientLogger.error('WebSocket connection error', e); }); clientState.ws.on("message", onClientMessage); @@ -812,7 +811,7 @@ function startKeepAliveMonitor() { } async function onClientMessage(message) { - clientLogger.debug(`Message received: ${message}`); + clientLogger.debug(`Websocket message received: ${message}`); const data = JSON.parse(message); @@ -830,20 +829,25 @@ async function onClientMessage(message) { return; } if (data.action === "server.failedToSendResponseDueToStubDisconnected") { + // TODO help user find out why the stub function was disconnected. Maybe pull up + // CloudWatch logs for websocket server and the stub. clientLogger.error( chalk.grey(data.debugRequestId) + - " Failed to send a response because the Lambda function is disconnected" + " Failed to send response because the Lambda function is disconnected" ); return; } if (data.action === "server.failedToSendResponseDueToUnknown") { + // TODO help user find out why the stub function was disconnected. Maybe pull up + // CloudWatch logs for websocket server and the stub. clientLogger.error( chalk.grey(data.debugRequestId) + - " Failed to send a response to the Lambda function" + " Failed to send response to the Lambda function" ); return; } if (data.action !== "stub.lambdaRequest") { + clientLogger.debug('Unkonwn websocket message received.'); return; } diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 3b4cca7623..afa87eb9fa 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -1,5 +1,6 @@ import * as cdk from "@aws-cdk/core"; import * as cxapi from "@aws-cdk/cx-api"; +import { HandlerProps } from "./Function"; /** * Deploy props for apps. @@ -32,6 +33,13 @@ export interface DeployProps { * @default - Defaults to undefined */ readonly debugEndpoint?: string; + + /** + * The callback after synth completes, used by `sst start`. + * + * @default - Defaults to undefined + */ + readonly synthCallback?: (lambdaHandlers: Array) => void; } export type AppProps = cdk.AppProps; @@ -67,6 +75,16 @@ export class App extends cdk.App { */ public readonly buildDir: string = ".build"; + /** + * The callback after synth completes. + */ + private readonly synthCallback?: (lambdaHandlers: Array) => void; + + /** + * A list of Lambda functions in the app + */ + private readonly lambdaHandlers: Array = []; + constructor(deployProps: DeployProps = {}, props: AppProps = {}) { super(props); @@ -77,6 +95,7 @@ export class App extends cdk.App { if (deployProps.debugEndpoint) { this.local = true; this.debugEndpoint = deployProps.debugEndpoint; + this.synthCallback = deployProps.synthCallback; } } @@ -96,6 +115,17 @@ export class App extends cdk.App { ); } } - return super.synth(options); + const cloudAssembly = super.synth(options); + + // Run callback after synth has finished + if (this.synthCallback) { + this.synthCallback(this.lambdaHandlers); + } + + return cloudAssembly; + } + + registerLambdaHandler(handler: HandlerProps) { + this.lambdaHandlers.push(handler); } } diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index ede8b1d1bf..2ef44c6572 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -7,6 +7,21 @@ import { builder } from "./util/builder"; export type FunctionProps = lambda.FunctionProps; +/** + * Doe props for Lambda function. + */ +export interface HandlerProps { + /** + * Source path + */ + readonly srcPath: string; + + /** + * Source handler + */ + readonly srcHandler: string; +} + export class Function extends lambda.Function { constructor(scope: cdk.Construct, id: string, props: FunctionProps) { const root = scope.node.root as App; @@ -35,6 +50,8 @@ export class Function extends lambda.Function { const code = props.code as lambda.AssetCode; if (root.local) { + const srcPath = code.path; + const srcHandler = props.handler; super(scope, id, { ...props, code: lambda.Code.fromAsset( @@ -43,12 +60,13 @@ export class Function extends lambda.Function { handler: "index.main", environment: { ...(props.environment || {}), - SST_DEBUG_SRC_PATH: code.path, - SST_DEBUG_SRC_HANDLER: props.handler, + SST_DEBUG_SRC_PATH: srcPath, + SST_DEBUG_SRC_HANDLER: srcHandler, SST_DEBUG_ENDPOINT: root.debugEndpoint || "", }, }); - // func.node.defaultChild.cfnOptions.metadata = { 'sst:lambda:src': 'src/hello.handler' }; + // register Lambda function in app + root.registerLambdaHandler({ srcPath, srcHandler } as HandlerProps); } else { const buildPath = builder({ srcPath: code.path, From 6f980c212b0d96cff7c9c803d71a83c770b7175a Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 5 Jan 2021 02:25:48 -0500 Subject: [PATCH 186/481] Updating sst start with new Function construct handler and entry format --- packages/cli/scripts/start.js | 99 +++++++++++++----------------- packages/resources/src/Function.ts | 13 ++-- 2 files changed, 50 insertions(+), 62 deletions(-) diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index b819230b7d..e9b8b84259 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -52,6 +52,7 @@ const builderState = { }; const entryPointDataTemplateObject = { srcPath: null, + entry: null, handler: null, tsconfig: null, hasError: false, @@ -98,12 +99,15 @@ module.exports = async function (argv, cliInfo) { await deployApp(argv, cliInfo, config); // Start client + const lambdaHandlersPath = path.join(paths.appPath, paths.appBuildDir, "lambda-handlers.json"); + if ( ! await checkFileExists(lambdaHandlersPath)) { + throw new Error(`Failed to get the Lambda handlers info from the app`); + } try { - await startBuilder([ - { srcPath: "src/api", handler: "api.handler" }, - { srcPath: "src/sns", handler: "sns.handler" }, - ]); + // ie. { srcPath: "src/api", entry: "api.js", handler: "handler" }, + await startBuilder(JSON.parse(fs.readFileSync(lambdaHandlersPath))); } catch (e) { + console.error(e); return; } @@ -174,10 +178,10 @@ async function startBuilder(entryPoints) { esbuildService = await esbuild.startService(); const results = await Promise.allSettled( - entryPoints.map(({ srcPath, handler }) => + entryPoints.map(({ srcPath, entry, handler }) => // Not catching esbuild errors // Letting it handle the error messages for now - transpile(srcPath, handler) + transpile(srcPath, entry, handler) ) ); esbuildService.stop(); @@ -225,13 +229,14 @@ async function updateBuilder() { Object.keys(entryPointsData).forEach((key) => { let { srcPath, + entry, handler, transpilePromise, needsReTranspile, } = entryPointsData[key]; if (!transpilePromise && needsReTranspile) { - const transpilePromise = reTranspiler(srcPath, handler); - onReTranspileStarted({ srcPath, handler, transpilePromise }); + const transpilePromise = reTranspiler(srcPath, entry, handler); + onReTranspileStarted({ srcPath, entry, handler, transpilePromise }); } }); @@ -287,10 +292,11 @@ async function onFileChange(ev, file) { } function onTranspileSucceeded( srcPath, + entry, handler, { tsconfig, esbuilder, outHandler, inputFiles } ) { - const key = `${srcPath}/${handler}`; + const key = buildEntryPointKey(srcPath, entry, handler); // Update entryPointsData builderState.entryPointsData[key] = { ...builderState.entryPointsData[key], @@ -315,8 +321,8 @@ function onTranspileSucceeded( builderState.watchedFilesIndex[file].push(key); }); } -function onReTranspileStarted({ srcPath, handler, transpilePromise }) { - const key = `${srcPath}/${handler}`; +function onReTranspileStarted({ srcPath, entry, handler, transpilePromise }) { + const key = buildEntryPointKey(srcPath, entry, handler); // Print rebuilding message if (!builderState.isRebuilding) { @@ -331,8 +337,8 @@ function onReTranspileStarted({ srcPath, handler, transpilePromise }) { transpilePromise, }; } -async function onReTranspileSucceeded(srcPath, handler, { inputFiles }) { - const key = `${srcPath}/${handler}`; +async function onReTranspileSucceeded(srcPath, entry, handler, { inputFiles }) { + const key = buildEntryPointKey(srcPath, entry, handler); // Note: If the handler included new files, while re-transpiling, the new files // might have been updated. And because the new files has not been added to @@ -398,8 +404,8 @@ async function onReTranspileSucceeded(srcPath, handler, { inputFiles }) { await updateBuilder(); } -async function onReTranspileFailed(srcPath, handler) { - const key = `${srcPath}/${handler}`; +async function onReTranspileFailed(srcPath, entry, handler) { + const key = buildEntryPointKey(srcPath, entry, handler); // Update entryPointsData builderState.entryPointsData[key] = { @@ -412,7 +418,7 @@ async function onReTranspileFailed(srcPath, handler) { if (!builderState.entryPointsData[key].needsReTranspile) { builderState.entryPointsData[key].pendingRequestCallbacks.forEach( ({ reject }) => { - reject(`Failed to transpile srcPath ${srcPath} handler ${handler}`); + reject(`Failed to transpile srcPath ${srcPath} entry ${entry} handler ${handler}`); } ); } @@ -467,11 +473,10 @@ async function onTypeCheckDone(srcPath) { await updateBuilder(); } -async function transpile(srcPath, handler) { - const metafile = getEsbuildMetafilePath(srcPath, handler); +async function transpile(srcPath, entry, handler) { + const metafile = getEsbuildMetafilePath(srcPath, entry, handler); const outSrcPath = path.join(srcPath, paths.appBuildDir); - - const fullPath = await getHandlerFilePath(srcPath, handler); + const fullPath = path.join(paths.appPath, srcPath, entry); const tsconfigPath = path.join(paths.appPath, srcPath, "tsconfig.json"); const isTs = await checkFileExists(tsconfigPath); @@ -496,19 +501,20 @@ async function transpile(srcPath, handler) { const esbuilder = await esbuild.build(esbuildOptions); - return onTranspileSucceeded(srcPath, handler, { + return onTranspileSucceeded(srcPath, entry, handler, { tsconfig, esbuilder, outHandler: { + entry: entry.split(".").slice(0, -1).concat(['js']).join("."), handler, srcPath: outSrcPath, }, inputFiles: await getInputFilesFromEsbuildMetafile(metafile), }); } -async function reTranspiler(srcPath, handler) { +async function reTranspiler(srcPath, entry, handler) { try { - const key = buildEntryPointKey(srcPath, handler); + const key = buildEntryPointKey(srcPath, entry, handler); const { esbuilder } = builderState.entryPointsData[key]; await esbuilder.rebuild(); @@ -521,12 +527,12 @@ async function reTranspiler(srcPath, handler) { builderLogger.debug(`Mock rebuild wait done`); } - const metafile = getEsbuildMetafilePath(srcPath, handler); + const metafile = getEsbuildMetafilePath(srcPath, entry, handler); const inputFiles = await getInputFilesFromEsbuildMetafile(metafile); - await onReTranspileSucceeded(srcPath, handler, { inputFiles }); + await onReTranspileSucceeded(srcPath, entry, handler, { inputFiles }); } catch (e) { builderLogger.error("reTranspiler error", e); - await onReTranspileFailed(srcPath, handler); + await onReTranspileFailed(srcPath, entry, handler); } } @@ -590,18 +596,19 @@ function typeCheck(srcPath) { ///////////////////////////// function initializeBuilderState(entryPoints) { - entryPoints.forEach(({ srcPath, handler }) => { - const key = buildEntryPointKey(srcPath, handler); + entryPoints.forEach(({ srcPath, entry, handler }) => { + const key = buildEntryPointKey(srcPath, entry, handler); builderState.entryPointsData[key] = { ...entryPointDataTemplateObject, srcPath, + entry, handler, }; }); } -function buildEntryPointKey(srcPath, handler) { - return `${srcPath}/${handler}`; +function buildEntryPointKey(srcPath, entry, handler) { + return `${srcPath}/${entry}/${handler}`; } function getAllWatchedFiles() { return Object.keys(builderState.watchedFilesIndex); @@ -670,25 +677,6 @@ async function checkFileExists(file) { .catch(() => false); } -async function getHandlerFilePath(srcPath, handler) { - const parts = handler.split("."); - const name = parts[0]; - - const jsFile = path.join(paths.appPath, srcPath, `${name}.js`); - - if (await checkFileExists(jsFile)) { - return jsFile; - } - - const tsFile = path.join(paths.appPath, srcPath, `${name}.ts`); - - if (await checkFileExists(tsFile)) { - return tsFile; - } - - return jsFile; -} - async function getAllExternalsForHandler(srcPath) { let externals; @@ -711,8 +699,8 @@ async function getAllExternalsForHandler(srcPath) { return externals; } -async function getTranspiledHandler(srcPath, handler) { - const key = buildEntryPointKey(srcPath, handler); +async function getTranspiledHandler(srcPath, entry, handler) { + const key = buildEntryPointKey(srcPath, entry, handler); const entryPointData = builderState.entryPointsData[key]; if (entryPointData.transpilePromise || entryPointData.needsReTranspile) { builderLogger.debug(`Waiting for re-transpiler output for ${handler}...`); @@ -725,8 +713,8 @@ async function getTranspiledHandler(srcPath, handler) { return entryPointData.outHandler; } -function getEsbuildMetafilePath(srcPath, handler) { - const key = `${srcPath}/${handler}`.replace(/[/.]/g, "-"); +function getEsbuildMetafilePath(srcPath, entry, handler) { + const key = `${srcPath}/${entry}/${handler}`.replace(/[/.]/g, "-"); const outSrcFullPath = path.join(paths.appPath, srcPath, paths.appBuildDir); return path.join(outSrcFullPath, `.esbuild.${key}.json`); @@ -888,10 +876,11 @@ async function onClientMessage(message) { try { transpiledHandler = await getTranspiledHandler( - // TODO: Add debugSrcEntry debugSrcPath, + debugSrcEntry, debugSrcHandler ); + console.log({ transpiledHandler }); } catch (e) { clientLogger.error("Get trasnspiler handler error", e); // TODO: Handle esbuild transpilation error @@ -909,7 +898,7 @@ async function onClientMessage(message) { JSON.stringify(event), JSON.stringify(context), //"./src/index.js", // Local path to the Lambda functions - transpiledHandler.srcPath, + `${transpiledHandler.srcPath}/${transpiledHandler.entry}`, //"handler", // Function name of the handler function transpiledHandler.handler, ], diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index ecae67c9a0..e3af423bfc 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -50,12 +50,12 @@ export interface HandlerProps { /** * Source handler */ - readonly srcHandler: string; + readonly handler: string; /** * Source entry */ - readonly srcEntry: string; + readonly entry: string; } export class Function extends lambda.Function { @@ -90,8 +90,7 @@ export class Function extends lambda.Function { } if (root.local) { - const srcHandler = handler; - const srcEntry = props.entry; + const entry = props.entry; super(scope, id, { ...props, runtime, @@ -102,13 +101,13 @@ export class Function extends lambda.Function { environment: { ...(props.environment || {}), SST_DEBUG_SRC_PATH: srcPath, - SST_DEBUG_SRC_ENTRY: srcEntry, - SST_DEBUG_SRC_HANDLER: srcHandler, + SST_DEBUG_SRC_ENTRY: entry, + SST_DEBUG_SRC_HANDLER: handler, SST_DEBUG_ENDPOINT: root.debugEndpoint || "", }, }); // register Lambda function in app - root.registerLambdaHandler({ srcPath, srcEntry, srcHandler } as HandlerProps); + root.registerLambdaHandler({ srcPath, entry, handler } as HandlerProps); } else { const { outDir, outHandler } = builder({ bundle: bundle, From 39d0cdc43b226dbc804a77edffc6348012fd9a3c Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 5 Jan 2021 16:14:06 -0500 Subject: [PATCH 187/481] - Use node-fs-extra for reading JSON - Figure out which dir to run eslint and tsc in - Fix eslint babel configs --- packages/cli/assets/cdk-wrapper/.babelrc.json | 13 ----- .../assets/cdk-wrapper/.eslintrc.internal.js | 15 +++++- packages/cli/assets/cdk-wrapper/run.js | 28 ++++++----- packages/cli/scripts/start.js | 47 +++++++++---------- packages/cli/scripts/util/cdkHelpers.js | 28 +++-------- packages/resources/src/Function.ts | 1 - packages/resources/src/util/builder.ts | 27 ++++++----- 7 files changed, 75 insertions(+), 84 deletions(-) delete mode 100644 packages/cli/assets/cdk-wrapper/.babelrc.json diff --git a/packages/cli/assets/cdk-wrapper/.babelrc.json b/packages/cli/assets/cdk-wrapper/.babelrc.json deleted file mode 100644 index 40b948d1b5..0000000000 --- a/packages/cli/assets/cdk-wrapper/.babelrc.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "presets": [ - [ - "@babel/preset-env", - { - "targets": { - "node": "10" - } - } - ] - ], - "plugins": ["@babel/plugin-proposal-class-properties"] -} diff --git a/packages/cli/assets/cdk-wrapper/.eslintrc.internal.js b/packages/cli/assets/cdk-wrapper/.eslintrc.internal.js index 301298b292..cc16db7e96 100644 --- a/packages/cli/assets/cdk-wrapper/.eslintrc.internal.js +++ b/packages/cli/assets/cdk-wrapper/.eslintrc.internal.js @@ -2,16 +2,27 @@ module.exports = { root: true, parser: "@babel/eslint-parser", parserOptions: { + requireConfigFile: false, babelOptions: { - configFile: "./.build/.babelrc.json", + presets: [ + [ + "@babel/preset-env", + { + targets: { + node: "10", + }, + }, + ], + ], + plugins: ["@babel/plugin-proposal-class-properties"], }, }, plugins: ["@babel"], overrides: [ { files: ["*.ts", "*.tsx"], - parser: "@typescript-eslint/parser", plugins: ["@typescript-eslint"], + parser: "@typescript-eslint/parser", extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"], }, ], diff --git a/packages/cli/assets/cdk-wrapper/run.js b/packages/cli/assets/cdk-wrapper/run.js index 46f4490c05..6e8f773643 100644 --- a/packages/cli/assets/cdk-wrapper/run.js +++ b/packages/cli/assets/cdk-wrapper/run.js @@ -15,7 +15,7 @@ const sst = require("@serverless-stack/resources"); const config = require("./sst-merged.json"); -const appPath = path.join(__dirname, "../"); +const appPath = process.cwd(); // Check first and throw an error if (!fs.existsSync(path.join(__dirname, "lib", "index.js"))) { @@ -32,19 +32,23 @@ if (!handler.default) { let synthCallback; if (config.debugEndpoint) { synthCallback = (lambdaHandlers) => { - fs.writeFileSync(path.join(appPath, ".build", "lambda-handlers.json"), JSON.stringify(lambdaHandlers)); - } + fs.writeFileSync( + path.join(appPath, app.buildDir, "lambda-handlers.json"), + JSON.stringify(lambdaHandlers) + ); + }; } -handler.default( - new sst.App({ - name: config.name, - stage: config.stage, - region: config.region, - debugEndpoint: config.debugEndpoint, - synthCallback, - }) -); +const app = new sst.App({ + synthCallback, + name: config.name, + stage: config.stage, + region: config.region, + debugEndpoint: config.debugEndpoint, +}); + +// Run the handler +handler.default(app); function handlerNotFound(importFailed) { const extCopy = fs.existsSync(path.join(appPath, "tsconfig.json")) diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index e9b8b84259..71d2cf8daf 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -68,8 +68,8 @@ const srcPathDataTemplateObject = { tsconfig: null, inputFiles: null, lintProcess: null, - typeCheckProcess: null, needsReCheck: false, + typeCheckProcess: null, }; const clientState = { @@ -99,13 +99,18 @@ module.exports = async function (argv, cliInfo) { await deployApp(argv, cliInfo, config); // Start client - const lambdaHandlersPath = path.join(paths.appPath, paths.appBuildDir, "lambda-handlers.json"); - if ( ! await checkFileExists(lambdaHandlersPath)) { + const lambdaHandlersPath = path.join( + paths.appPath, + paths.appBuildDir, + "lambda-handlers.json" + ); + if (!(await checkFileExists(lambdaHandlersPath))) { throw new Error(`Failed to get the Lambda handlers info from the app`); } try { // ie. { srcPath: "src/api", entry: "api.js", handler: "handler" }, - await startBuilder(JSON.parse(fs.readFileSync(lambdaHandlersPath))); + const entryPoints = await fs.readJson(lambdaHandlersPath); + await startBuilder(entryPoints); } catch (e) { console.error(e); return; @@ -156,7 +161,7 @@ async function deployApp(argv, cliInfo, config) { logger.info("==============="); logger.info(""); - prepareCdk(argv, cliInfo, config); + await prepareCdk(argv, cliInfo, config); await sstDeploy(argv, config, cliInfo); } @@ -418,7 +423,9 @@ async function onReTranspileFailed(srcPath, entry, handler) { if (!builderState.entryPointsData[key].needsReTranspile) { builderState.entryPointsData[key].pendingRequestCallbacks.forEach( ({ reject }) => { - reject(`Failed to transpile srcPath ${srcPath} entry ${entry} handler ${handler}`); + reject( + `Failed to transpile srcPath ${srcPath} entry ${entry} handler ${handler}` + ); } ); } @@ -505,7 +512,7 @@ async function transpile(srcPath, entry, handler) { tsconfig, esbuilder, outHandler: { - entry: entry.split(".").slice(0, -1).concat(['js']).join("."), + entry: entry.split(".").slice(0, -1).concat(["js"]).join("."), handler, srcPath: outSrcPath, }, @@ -555,8 +562,7 @@ function lint(srcPath) { ".", ...inputFiles, ], - // TODO: Check if setting the cwd to the root is okay - { stdio: "inherit", cwd: paths.appPath } + { stdio: "inherit", cwd: path.join(paths.appPath, srcPath) } ); process.on("close", (code) => { @@ -567,10 +573,10 @@ function lint(srcPath) { return process; } function typeCheck(srcPath) { - const { tsconfig, inputFiles } = builderState.srcPathsData[srcPath]; + const { inputFiles } = builderState.srcPathsData[srcPath]; const tsFiles = inputFiles.filter((file) => file.endsWith(".ts")); - if (!tsconfig) { + if (tsFiles.length === 0) { return null; } @@ -681,11 +687,7 @@ async function getAllExternalsForHandler(srcPath) { let externals; try { - const packageJson = JSON.parse( - await fs.promises.readFile(path.join(srcPath, "package.json"), { - encoding: "utf-8", - }) - ); + const packageJson = await fs.readJson(path.join(srcPath, "package.json")); externals = Object.keys({ ...(packageJson.dependencies || {}), ...(packageJson.devDependencies || {}), @@ -724,9 +726,7 @@ async function getInputFilesFromEsbuildMetafile(file) { let metaJson; try { - metaJson = JSON.parse( - await fs.promises.readFile(file, { encoding: "utf-8" }) - ); + metaJson = await fs.readJson(file); } catch (e) { builderLogger.error("There was a problem reading the build metafile", e); } @@ -774,7 +774,7 @@ function startClient(debugEndpoint) { }); clientState.ws.on("error", (e) => { - clientLogger.error('WebSocket connection error', e); + clientLogger.error("WebSocket connection error", e); }); clientState.ws.on("message", onClientMessage); @@ -792,8 +792,8 @@ function startKeepAliveMonitor() { clientState.ws.send(JSON.stringify({ action: "client.heartbeat" })); clientState.wsKeepAliveTimer = setInterval(() => { if (clientState.ws) { - clientLogger.debug('Sending keep-alive call'); - clientState.ws.send(JSON.stringify({ action: 'client.keepAlive' })); + clientLogger.debug("Sending keep-alive call"); + clientState.ws.send(JSON.stringify({ action: "client.keepAlive" })); } }, 60000); } @@ -835,7 +835,7 @@ async function onClientMessage(message) { return; } if (data.action !== "stub.lambdaRequest") { - clientLogger.debug('Unkonwn websocket message received.'); + clientLogger.debug("Unkonwn websocket message received."); return; } @@ -880,7 +880,6 @@ async function onClientMessage(message) { debugSrcEntry, debugSrcHandler ); - console.log({ transpiledHandler }); } catch (e) { clientLogger.error("Get trasnspiler handler error", e); // TODO: Handle esbuild transpilation error diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index 798209f171..0d15b380d3 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -175,6 +175,7 @@ async function lint(inputFiles) { logger.info(stderr); } } catch (e) { + console.log(e); logger.info(e.stdout); exitWithMessage("There was a problem linting the source."); } @@ -211,16 +212,8 @@ async function typeCheck(inputFiles) { } } -function runChecks(isTs, inputFiles) { - const checks = []; - - checks.push(lint(inputFiles)); - - if (isTs) { - checks.push(typeCheck(inputFiles)); - } - - return Promise.allSettled(checks); +function runChecks(inputFiles) { + return Promise.allSettled([lint(inputFiles), typeCheck(inputFiles)]); } async function transpile(cliInfo) { @@ -265,21 +258,14 @@ async function transpile(cliInfo) { exitWithMessage("There was a problem transpiling the source."); } - return { - isTs, - inputFiles: await getInputFilesFromEsbuildMetafile(metafile), - }; + return await getInputFilesFromEsbuildMetafile(metafile); } async function copyConfigFiles() { - await fs.copy( + return await fs.copy( path.join(paths.ownPath, "assets", "cdk-wrapper", ".eslintrc.internal.js"), path.join(paths.appBuildPath, ".eslintrc.internal.js") ); - return await fs.copy( - path.join(paths.ownPath, "assets", "cdk-wrapper", ".babelrc.json"), - path.join(paths.appBuildPath, ".babelrc.json") - ); } function copyWrapperFiles() { @@ -363,9 +349,9 @@ async function prepareCdk(argv, cliInfo, config) { await copyConfigFiles(); await copyWrapperFiles(); - const { isTs, inputFiles } = await transpile(cliInfo); + const inputFiles = await transpile(cliInfo); - await runChecks(isTs, inputFiles); + await runChecks(inputFiles); return appliedConfig; } diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index e3af423bfc..346403af23 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -117,7 +117,6 @@ export class Function extends lambda.Function { buildDir: root.buildDir, }); - console.log(outDir); super(scope, id, { ...props, runtime, diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index e0e9dabf82..4546cf284b 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -40,8 +40,11 @@ function getEsbuildMetafileName(entry: string, handler: string): string { return `.esbuild.${key}.json`; } -function getAllExternalsForHandler(srcPath: string, bundle: boolean): Array { - let externals = ['aws-sdk']; +function getAllExternalsForHandler( + srcPath: string, + bundle: boolean +): Array { + let externals = ["aws-sdk"]; if (bundle) { return externals; @@ -64,9 +67,11 @@ function getAllExternalsForHandler(srcPath: string, bundle: boolean): Array Date: Tue, 5 Jan 2021 16:27:25 -0500 Subject: [PATCH 188/481] Fixing lint errors --- .eslintignore | 9 ++++++ .../assets/debug-stack/lambda/wsDefault.js | 32 +++++++++++-------- packages/resources/src/App.ts | 6 ++-- packages/resources/src/util/builder.ts | 1 - 4 files changed, 31 insertions(+), 17 deletions(-) diff --git a/.eslintignore b/.eslintignore index 9f4f115416..6ff47e1f7f 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,15 +1,24 @@ # Don't ever lint node_modules node_modules + # Don't lint build output (make sure it's set to your correct build folder name) dist + # Don't lint nyc coverage output coverage + +# Don't lint cdk.out +cdk.out + # Don't lint build outputs in test /packages/cli/test/*/.build/** /packages/cli/test/*/cdk.out/** + # Don't lint templates /packages/create-serverless-stack/templates/** + # Don't lint eslint tests that need to fail /packages/cli/test/eslint-ignore/** /packages/cli/test/eslint-ts/** /packages/cli/test/eslint/** +/packages/cli/test/start/src/** diff --git a/packages/cli/assets/debug-stack/lambda/wsDefault.js b/packages/cli/assets/debug-stack/lambda/wsDefault.js index 37ae84e973..d567e53c5a 100644 --- a/packages/cli/assets/debug-stack/lambda/wsDefault.js +++ b/packages/cli/assets/debug-stack/lambda/wsDefault.js @@ -7,7 +7,7 @@ exports.main = async function (event) { const eventBody = JSON.parse(event.body); - console.log('Event action:', eventBody.action); + console.log("Event action:", eventBody.action); switch (eventBody.action) { case "client.register": @@ -26,12 +26,12 @@ exports.main = async function (event) { async function onClientRegister(event) { // store client in DB - console.log('Registering new client.'); + console.log("Registering new client."); const clientConnectionId = event.requestContext.connectionId; const oldConnectionId = await setClientConnectionId(clientConnectionId); // notify new client is registered - console.log('Notifying client connected.'); + console.log("Notifying client connected."); await postToConnection( event, JSON.stringify({ @@ -43,27 +43,28 @@ async function onClientRegister(event) { // notify old client is replaced by the newer client if (oldConnectionId) { - console.log('Existing client found. Notify existing client to disconnect.'); + console.log("Existing client found. Notify existing client to disconnect."); try { await postToConnection( event, JSON.stringify({ action: "server.clientDisconnectedDueToNewClient" }), oldConnectionId ); - } catch(e) { + } catch (e) { + // empty } } -}; +} async function onClientLambdaResponse(event, eventBody) { // send response to stub try { - console.log('Sending response to stub.'); + console.log("Sending response to stub."); await postToConnection(event, event.body, eventBody.stubConnectionId); } catch (e) { console.error(e); - console.log('Notifying client response failed to send to stub.'); + console.log("Notifying client response failed to send to stub."); const clientConnectionId = event.requestContext.connectionId; const action = e.statusCode === 410 @@ -86,12 +87,12 @@ async function onStubLambdaRequest(event, eventBody) { const stubConnectionId = event.requestContext.connectionId; // get connected client - console.log('Getting connected client id.'); + console.log("Getting connected client id."); const clientConnectionId = await getClientConnectionId(); // send request to client if (clientConnectionId) { - console.log('Sending request to client.'); + console.log("Sending request to client."); try { await postToConnection( event, @@ -101,16 +102,20 @@ async function onStubLambdaRequest(event, eventBody) { } catch (e) { console.error(e); - console.log('Notifying stub request failed to send to client.'); + console.log("Notifying stub request failed to send to client."); const action = e.statusCode === 410 ? "server.failedToSendRequestDueToClientNotConnected" : "server.failedToSendRequestDueToUnknown"; - await postToConnection(event, JSON.stringify({ action }), stubConnectionId); + await postToConnection( + event, + JSON.stringify({ action }), + stubConnectionId + ); } } else { // handle no connected client - console.log('Notifying stub no connected client.'); + console.log("Notifying stub no connected client."); await postToConnection( event, JSON.stringify({ @@ -164,4 +169,3 @@ async function postToConnection(event, data, connectionId) { }) .promise(); } - diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index afa87eb9fa..ccca279c3e 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -78,7 +78,9 @@ export class App extends cdk.App { /** * The callback after synth completes. */ - private readonly synthCallback?: (lambdaHandlers: Array) => void; + private readonly synthCallback?: ( + lambdaHandlers: Array + ) => void; /** * A list of Lambda functions in the app @@ -125,7 +127,7 @@ export class App extends cdk.App { return cloudAssembly; } - registerLambdaHandler(handler: HandlerProps) { + registerLambdaHandler(handler: HandlerProps): void { this.lambdaHandlers.push(handler); } } diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index 4546cf284b..2d7c269605 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -71,7 +71,6 @@ export function builder(builderProps: BuilderProps): BuilderOutput { chalk.grey(`Building Lambda function ${srcPath}/${entry}:${handler}`) ); - const outFile = "index"; const appPath = process.cwd(); const external = getAllExternalsForHandler(srcPath, bundle); From 0f034513a97d4f03217a67e9dd27bb1984079c8c Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 5 Jan 2021 17:07:22 -0500 Subject: [PATCH 189/481] Adding action to ensure required labels --- .github/workflows/require-labels.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .github/workflows/require-labels.yml diff --git a/.github/workflows/require-labels.yml b/.github/workflows/require-labels.yml new file mode 100644 index 0000000000..21e6ad3454 --- /dev/null +++ b/.github/workflows/require-labels.yml @@ -0,0 +1,13 @@ +name: Label +on: + pull_request: + types: [opened, labeled, unlabeled, synchronize] +jobs: + required: + runs-on: ubuntu-latest + steps: + - uses: mheap/github-action-required-labels@v1.1.2 + with: + mode: exactly + count: 1 + labels: "breaking, enhancement, bug, documentation, internal, skip changelog" From 30617a899c9307362a88ad68f893d8f4c8300bfa Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 5 Jan 2021 17:27:05 -0500 Subject: [PATCH 190/481] Watching for cdk file changes in sst start --- packages/cli/bin/scripts.js | 2 +- packages/cli/scripts/start.js | 77 +++++++++++++++---------- packages/cli/scripts/util/cdkHelpers.js | 2 +- packages/cli/test/start/src/api/lib.ts | 2 +- 4 files changed, 51 insertions(+), 32 deletions(-) diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index 6472718ecc..73c9d5159f 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -187,7 +187,7 @@ switch (script) { const cliInfo = getCliInfo(); // Prepare app - prepareCdk(argv, cliInfo).then((config) => + prepareCdk(argv, cliInfo).then(({ config }) => internals[script](argv, config, cliInfo) ); diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 71d2cf8daf..b5afb3dc61 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -46,9 +46,10 @@ let esbuildService; const builderState = { isRebuilding: false, - entryPointsData: {}, - srcPathsData: {}, - watchedFilesIndex: {}, + entryPointsData: {}, // KEY: $srcPath/$entry/$handler + srcPathsData: {}, // KEY: $srcPath + watchedFilesIndex: {}, // KEY: /path/to/lambda.js VALUE: [ entryPoint ] + watchedCdkFilesIndex: {}, // KEY: /path/to//MyStack.js VALUE: true }; const entryPointDataTemplateObject = { srcPath: null, @@ -80,13 +81,13 @@ const clientState = { const MOCK_SLOW_ESBUILD_RETRANSPILE_IN_MS = 0; process.on("uncaughtException", (err, origin) => { - logger.info("===== Unhandled Exception at:", err, "origin:", origin); + logger.error("Unhandled Exception at:", err, "origin:", origin); }); process.on("unhandledRejection", (reason, promise) => { - logger.info("===== Unhandled Rejection at:", promise, "reason:", reason); + logger.error("Unhandled Rejection at:", promise, "reason:", reason); }); process.on("rejectionHandled", (promise) => { - logger.info("===== Rejection Handled at:", promise); + logger.error("Rejection Handled at:", promise); }); module.exports = async function (argv, cliInfo) { @@ -96,26 +97,12 @@ module.exports = async function (argv, cliInfo) { config.debugEndpoint = await deployDebugStack(cliInfo, config); // Deploy app - await deployApp(argv, cliInfo, config); + const cdkInputFiles = await deployApp(argv, cliInfo, config); - // Start client - const lambdaHandlersPath = path.join( - paths.appPath, - paths.appBuildDir, - "lambda-handlers.json" - ); - if (!(await checkFileExists(lambdaHandlersPath))) { - throw new Error(`Failed to get the Lambda handlers info from the app`); - } - try { - // ie. { srcPath: "src/api", entry: "api.js", handler: "handler" }, - const entryPoints = await fs.readJson(lambdaHandlersPath); - await startBuilder(entryPoints); - } catch (e) { - console.error(e); - return; - } + // Start builder + await startBuilder(cdkInputFiles); + // Start client startClient(config.debugEndpoint); }; @@ -161,22 +148,37 @@ async function deployApp(argv, cliInfo, config) { logger.info("==============="); logger.info(""); - await prepareCdk(argv, cliInfo, config); + const { inputFiles } = await prepareCdk(argv, cliInfo, config); await sstDeploy(argv, config, cliInfo); + + return inputFiles; } /////////////////////// // Builder functions // /////////////////////// -async function startBuilder(entryPoints) { +async function startBuilder(cdkInputFiles) { builderLogger.info(""); builderLogger.info("==================="); builderLogger.info(" Starting debugger"); builderLogger.info("==================="); builderLogger.info(""); - initializeBuilderState(entryPoints); + // Load Lambda handlers to watch + // ie. { srcPath: "src/api", entry: "api.js", handler: "handler" }, + const lambdaHandlersPath = path.join( + paths.appPath, + paths.appBuildDir, + "lambda-handlers.json" + ); + const entryPoints = await fs.readJson(lambdaHandlersPath); + if (!(await checkFileExists(lambdaHandlersPath))) { + throw new Error(`Failed to get the Lambda handlers info from the app`); + } + + // Initialize state + initializeBuilderState(entryPoints, cdkInputFiles); // Run transpiler builderLogger.info("Transpiling Lambda code..."); @@ -281,6 +283,14 @@ async function updateBuilder() { async function onFileChange(ev, file) { builderLogger.debug(`File change: ${file}`); + // Handle CDK code changed + if (builderState.watchedCdkFilesIndex[file]) { + builderLogger.info( + "Detected a change in your CDK constructs. Restart the debugger to deploy the changes." + ); + return; + } + // Get entrypoints changed const entryPointKeys = builderState.watchedFilesIndex[file]; if (!entryPointKeys) { @@ -601,7 +611,8 @@ function typeCheck(srcPath) { // Builder State functions // ///////////////////////////// -function initializeBuilderState(entryPoints) { +function initializeBuilderState(entryPoints, cdkInputFiles) { + // Initialize 'entryPointsData' state entryPoints.forEach(({ srcPath, entry, handler }) => { const key = buildEntryPointKey(srcPath, entry, handler); builderState.entryPointsData[key] = { @@ -611,13 +622,21 @@ function initializeBuilderState(entryPoints) { handler, }; }); + + // Initialize 'watchedCdkFilesIndex' state + cdkInputFiles.forEach((file) => { + builderState.watchedCdkFilesIndex[file] = true; + }); } function buildEntryPointKey(srcPath, entry, handler) { return `${srcPath}/${entry}/${handler}`; } function getAllWatchedFiles() { - return Object.keys(builderState.watchedFilesIndex); + return [ + ...Object.keys(builderState.watchedFilesIndex), + ...Object.keys(builderState.watchedCdkFilesIndex), + ]; } function getAllSrcPaths() { return Object.keys(builderState.srcPathsData); diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index 0d15b380d3..4e28481364 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -353,7 +353,7 @@ async function prepareCdk(argv, cliInfo, config) { await runChecks(inputFiles); - return appliedConfig; + return { appliedConfig, inputFiles }; } function handleCdkErrors(e) { diff --git a/packages/cli/test/start/src/api/lib.ts b/packages/cli/test/start/src/api/lib.ts index c304f24cd1..f3fb0892c5 100644 --- a/packages/cli/test/start/src/api/lib.ts +++ b/packages/cli/test/start/src/api/lib.ts @@ -1,3 +1,3 @@ -export default function (name: string): string { +export default function (name: number): string { return name; } From 1ee79038d2117e8e64a26e24d0cef8728d3cbc95 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 5 Jan 2021 21:46:30 -0500 Subject: [PATCH 191/481] Update README.md --- README.md | 83 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 67 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 97ee97031b..1482682893 100644 --- a/README.md +++ b/README.md @@ -3,16 +3,16 @@ Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.com/cdk/) that: - Allows you to use [**CDK with Serverless Framework**](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html) -- And speeds up your deployments by **deploying all your stacks concurrently**! +- And develop your Lambdas **locally without mocking or deploying**! ## Quick Start -Create and deploy your first SST app. +Create your first SST app. ```bash $ npx create-serverless-stack resources my-sst-app $ cd my-sst-app -$ npx sst deploy +$ npx sst start ``` ## Table of Contents @@ -21,6 +21,7 @@ $ npx sst deploy - [Usage](#usage) - [Creating an app](#creating-an-app) - [Working on your app](#working-on-your-app) + - [Developing your Lambdas](#developing-your-lambdas) - [Building your app](#building-your-app) - [Deploying your app](#deploying-your-app) - [Removing an app](#removing-an-app) @@ -43,7 +44,7 @@ $ npx sst deploy ## Background -Serverless Framework is great for deploying your Lambda functions. But deploying any other AWS resources requires you to write CloudFormation templates in YAML. CloudFormation templates are incredibly verbose and even creating simple resources can take hundreds of lines of YAML. AWS CDK solves this by allowing you to generate CloudFormation templates using modern programming languages. Making it truly, _infrastructure as code_. +Serverless Framework is great but deploying any other AWS resources requires you to write CloudFormation templates in YAML. CloudFormation templates are incredibly verbose and even creating simple resources can take hundreds of lines of YAML. AWS CDK solves this by allowing you to generate CloudFormation templates using modern programming languages. Making it truly, _infrastructure as code_. ### Using Serverless Framework with CDK @@ -57,7 +58,7 @@ However, to use AWS CDK (to define your non-Lambda resources) alongside your Ser Since the same app is deployed to multiple environments, the AWS resource names might thrash if you are using the same AWS account across environments. To avoid this, Serverless Framework adopts the practice of prefixing the stack (and other resource) names with the stage name. On the other hand, to deploy a CDK app to the multiple stages, you'd need to manually ensure that the stack names and resource names don't thrash. -SST provides the above out-of-the-box. So you can deploy your Lambda functions using: +SST provides the above out-of-the-box. So you can deploy your Serverless services using: ```bash $ AWS_PROFILE=production serverless deploy --stage prod --region us-east-1 @@ -71,9 +72,25 @@ $ AWS_PROFILE=production npx sst deploy --stage prod --region us-east-1 Making it really easy for you to start using CDK to create your AWS infrastructure. While still continuing to use Serverless Framework for your Lambda functions. You can [read more about this here](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html). -### Speeding up CDK +### Developing Lambdas locally + +Developing Lambdas locally usually requires you to either: + +1. Mock all the services you are using +2. Or, constantly deploy your changes to test them + +Both these approaches don't work well in practice. Mocking all the AWS services can be really hard and mocking asynchronous workflows can be flaky. And constantly deploying your Lambda functions or infrastructure can be simply too slow. + +The `sst start` command starts up a local development environment that opens a WebSocket connection to your deployed app and proxies any Lambda requests to your local machine. This allows you to: + +- Work on your Lambda functions locally +- While, interacting with your entire deployed AWS infrastructure +- Supports all Lambda triggers, so there's no need to mock API Gateway, SQS, SNS, etc. +- Supports real Lambda environment variables and Lambda IAM permissions +- So if a Lambda fails on AWS due to lack of IAM permissions, it would fail locally as well +- And it's fast. There's nothing to deploy when you make a change! -Finally, AWS CDK deployments are currently very slow. CDK deploys your CloudFormation stacks in sequence. It'll submit a CloudFormation template for deployment and wait till it completes before starting the next one. This means that CDK deployments for large apps can easily take at least half an hour. SST fixes this by deploying your CloudFormation stacks concurrently. It uses [a forked version of AWS CDK](https://github.com/serverless-stack/sst-cdk) internally to do this. +You can read more about the [**sst start** command here](https://github.com/serverless-stack/serverless-stack/tree/master/packages/cli#start). ### And more @@ -81,10 +98,12 @@ As a bonus, SST also supports deploying your CloudFormation stacks asynchronousl SST also comes with a few other niceties: -- Supports ES6 (and TypeScript) out-of-the-box -- Automatically lints your CDK code using [ESLint](https://eslint.org/) +- Supports ES6 and TypeScript out-of-the-box +- Automatically lints your CDK and Lambda code using [ESLint](https://eslint.org/) - Runs your CDK unit tests using [Jest](https://jestjs.io/) +Behind the scenes, SST uses [a lightweight fork of AWS CDK](https://github.com/serverless-stack/sst-cdk) to programmatically invoke the various CDK commands. + ## Usage ### Creating an app @@ -131,9 +150,11 @@ my-sst-app ├── sst.json ├── test │ └── MyStack.test.js -└── lib - ├── MyStack.js - └── index.js +├── lib +| ├── MyStack.js +| └── index.js +└── src + └── lambda.js ``` It includes a config file in `sst.json`. @@ -199,8 +220,32 @@ And if you need to prefix certain resource names so that they don't thrash when this.node.root.logicalPrefixedName("MyResource"); // "dev-my-sst-app-MyResource" ``` +Finally, in the `src/` directory we have a Lambda function that's being deployed as a part of this stack. + +``` js +new sst.Function(this, "MyLambda", { + entry: "src/lambda.js", + handler: "handler" +}); +``` + +Notice that we are using the `sst.Function` instead of the `cdk.lambda.Function`. This allows SST to locally invoke a deployed Lambda function. + You can read more about [**@serverless-stack/resources** here](https://github.com/serverless-stack/serverless-stack/tree/master/packages/resources). +### Developing your Lambdas + +After you've defined your app in CDK and you are ready to work on your Lambda functions, start the local development environment using. + +```bash +# With npm +$ npx sst start +# Or with Yarn +$ yarn sst start +``` + +This will first deploy your app and then start up a debugger. It'll allow you to make changes to your Lambda functions and to test them right away without having to deploy them. + ### Building your app Once you are ready to build your app and convert your CDK code to CloudFormation, run the following from your project root. @@ -212,7 +257,7 @@ $ npx sst build $ yarn sst build ``` -This will compile your ES6 (or TS) code to the `build/` directory in your app. And the synthesized CloudFormation templates are outputted to `build/cdk.out/`. Note that, you shouldn't commit the `build/` directory to source control and it's ignored by default in your project's `.gitignore`. +This will compile your ES6 (or TS) code to the `.build/` directory in your app. And the synthesized CloudFormation templates are outputted to `.build/cdk.out/`. Note that, you shouldn't commit the `.build/` directory to source control and it's ignored by default in your project's `.gitignore`. ### Deploying your app @@ -246,7 +291,7 @@ Note that, this permanently removes your resources from AWS. ### Package scripts -The above commands (`build`, `deploy`, and `remove`) are also available in your `package.json`. So you can run them using. +The above commands (`start`, `build`, `deploy`, and `remove`) are also available in your `package.json`. So you can run them using. ```bash # With npm @@ -276,6 +321,8 @@ $ yarn test Your code is automatically linted when building or deploying. If you'd like to customize the lint rules, add a `.eslintrc.json` in your project root. If you'd like to turn off linting, add `*` to an `.eslintignore` file in your project root. +Note that, this applies to the Lambda functions in your app as well. + ## Example Project We use SST as a part of the [Serverless Stack guide](https://serverless-stack.com). We build a [simple notes app](http://demo2.serverless-stack.com/) in the guide and the backend for it is created using Serverless Framework and CDK with SST. You can check out the repo here — [serverless-stack-demo-api](https://github.com/AnomalyInnovations/serverless-stack-demo-api). @@ -333,7 +380,11 @@ It's fairly simple to move a CDK app to SST. There are a couple of small differe } ``` -4. Include the right packages +4. Lambdas extend `sst.Function` + + Use the `sst.Function` construct instead to the `cdk.lambda.Function`. You can read more about this over on [`@serverless-stack/resources`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/resources) docs. + +5. Include the right packages You don't need the `aws-cdk` package in your `package.json`. Instead you'll need `@serverless-stack/cli` and `@serverless-stack/resources`. @@ -371,7 +422,7 @@ You can learn more about these issues [here](https://github.com/aws/aws-cdk/issu ## Future Roadmap -- Add support for other AWS CDK languages +Check out [the public SST roadmap here](https://github.com/serverless-stack/serverless-stack/projects/1). ## Contributing From cb59f2b6aaccd5e2b0ed9a4d6a7f3335e39dd462 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 5 Jan 2021 22:22:26 -0500 Subject: [PATCH 192/481] Update README.md --- packages/cli/README.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/cli/README.md b/packages/cli/README.md index c8eacf80b4..bcc3195991 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -26,6 +26,24 @@ $ yarn sst ## Commands +### `start` + +Starts up a local development environment for your Lambda functions. It allows you to make changes and test your functions without having to deploy them. Here is how it works: + +1. Before deploying your app, SST first deploys a stack with a Lambda powered WebSocket API. +2. While deploying your app, it replaces all the `sst.Function` constructs with a _stub_ Lambda function. +3. SST starts up a local client that connects to the WebSocket API. +4. When your Lambda functions are invoked, the stub Lambdas send the request to the WebSocket API. +5. This in turn sends the request to your local SST client. +6. The client then invokes the local version of your Lambda function and sends back the results to the WebSocket API. +7. The WebSocket API responds to the stub Lambda with the results and the original request continues. + +This means that for any new requests, the local version of your Lambdas will be invoked. Without having to deploy them. + +Note that all this is deployed to your AWS account. There are no 3rd party services involved and your data never leaves your account. And since the WebSocket API is completely serverless, it's basically free for most use cases. + +`sst start` also starts up a watcher to transpile, lint, and type check your Lambda functions. So you can use ES or TypeScript directly. + ### `build` Build your app and synthesize your stacks. @@ -38,7 +56,7 @@ Deploy all your stacks to AWS. Or optionally deploy a specific stack. ### `remove [stack]` -Remove all your stacks and all of their resources from AWS. Or optionally remove a specific stack. +Remove all your stacks and all of their resources from AWS. Or optionally remove a specific stack. Also removes the debug stack that might've been deployed along with `sst start`. ### `add-cdk [packages..]` From cdecdfedfd2c0dcf30903ef2e07b4835b4167980 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 5 Jan 2021 22:32:48 -0500 Subject: [PATCH 193/481] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1482682893..0d4a253e36 100644 --- a/README.md +++ b/README.md @@ -229,7 +229,7 @@ new sst.Function(this, "MyLambda", { }); ``` -Notice that we are using the `sst.Function` instead of the `cdk.lambda.Function`. This allows SST to locally invoke a deployed Lambda function. +Notice that we are using the `sst.Function` instead of the `cdk.lambda.NodejsFunction`. This allows SST to locally invoke a deployed Lambda function. You can read more about [**@serverless-stack/resources** here](https://github.com/serverless-stack/serverless-stack/tree/master/packages/resources). @@ -382,7 +382,7 @@ It's fairly simple to move a CDK app to SST. There are a couple of small differe 4. Lambdas extend `sst.Function` - Use the `sst.Function` construct instead to the `cdk.lambda.Function`. You can read more about this over on [`@serverless-stack/resources`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/resources) docs. + Use the `sst.Function` construct instead to the `cdk.lambda.NodejsFunction`. You can read more about this over on [`@serverless-stack/resources`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/resources) docs. 5. Include the right packages From 8079076e93cdafd2870b313b1399439bcd3c7c4b Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 5 Jan 2021 22:48:24 -0500 Subject: [PATCH 194/481] Update README.md --- packages/resources/README.md | 46 +++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/packages/resources/README.md b/packages/resources/README.md index a5f2e7866e..8a3856e496 100644 --- a/packages/resources/README.md +++ b/packages/resources/README.md @@ -1,13 +1,19 @@ # @serverless-stack/resources [![npm](https://img.shields.io/npm/v/@serverless-stack/resources.svg)](https://www.npmjs.com/package/@serverless-stack/resources) -Part of the **[Serverless Stack Toolkit](https://github.com/serverless-stack/serverless-stack)**. Provides a couple of simple AWS CDK Constructs that allow you to: +Part of the **[Serverless Stack Toolkit](https://github.com/serverless-stack/serverless-stack)**. Provides a couple of simple AWS CDK Constructs: + +- `sst.App` +- `sst.Stack` +- `sst.Function` + +## `sst.Stack` + +The `sst.Stack` and `sst.App` constructs allow you to: - Automatically prefix stack names with the stage - Optionally prefix resource names with the stage - Deploy the entire app using the same AWS profile and region -## Usage - ### Creating a new stack Create a new stack by adding this in `lib/MyStack.js`. @@ -90,3 +96,37 @@ this.node.root.logicalPrefixedName("MyResource") // Returns "dev-my-sst-app-MyR ``` This invokes the `logicalPrefixedName` method in `sst.App` that your stack is added to. This'll return `dev-my-sst-app-MyResource`, where `dev` is the current stage and `my-sst-app` is the name of the app. + +## `sst.Function` + +A replacement for the [`cdk.lambda.NodejsFunction`](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-nodejs-readme.html) that allows you to develop your Lambda functions locally while using [`sst start`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/cli#start). Supports ES and TypeScript out-of-the-box. + +Takes props (`sst.FunctionProps`) that extends [`cdk.lambda.FunctionOptions`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.FunctionOptions.html) and adds the following props to it: + +### `entry` + +Relative path to the entry point of the function. Either based of the project root or the `srcPath`. A `.js` or `.ts` file. + +### `srcPath` + +The source directory where the entry point file is located. The `node_modules` in this directory is used to generate the bundle. The `tsconfig.json` is expected to be here as well. + +Defaults to `""` (project root). + +### `handler` + +The exported function in the entry file. + +Defaults to `"handler"`. + +### `runtime` + +The runtime environment. Only runtimes of the Node.js family are supported. + +Defaults to `lambda.NODEJS_12_X`. + +### `bundle` + +Bundles your Lambda functions with [esbuild](https://esbuild.github.io). + +Defaults to `true`. From 67e4fc4032cef9808a977230a610a819b56cfe74 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 5 Jan 2021 23:25:51 -0500 Subject: [PATCH 195/481] Updating release commands --- package.json | 9 +- yarn.lock | 267 +++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 267 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index dd8419faa5..b2a3360054 100644 --- a/package.json +++ b/package.json @@ -9,17 +9,24 @@ ], "scripts": { "lint": "eslint . --fix --ext .js,.ts", - "npm-publish": "lerna publish --force-publish", + "changelog": "lerna-changelog", + "release": "lerna publish --force-publish", + "release-alpha": "lerna publish --force-publish --dist-tag alpha", "clean": "lerna run clean", "postinstall": "lerna run prepare --scope='{@serverless-stack/resources,@serverless-stack/cli,create-serverless-stack}'", "test": "lerna run test --stream --scope=@serverless-stack/cli" }, + "repository": { + "type": "git", + "url": "https://github.com/serverless-stack/serverless-stack.git" + }, "devDependencies": { "@typescript-eslint/eslint-plugin": "^3.9.1", "@typescript-eslint/parser": "^3.9.1", "eslint": "^7.16.0", "husky": "^4.3.6", "lerna": "^3.22.1", + "lerna-changelog": "^1.0.1", "lint-staged": "^10.5.3", "prettier": "^2.2.1", "typescript": "^3.9.7" diff --git a/yarn.lock b/yarn.lock index 33d896823a..c86b595fcc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3056,6 +3056,11 @@ agent-base@4, agent-base@^4.3.0: dependencies: es6-promisify "^5.0.0" +agent-base@5: + version "5.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" + integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== + agent-base@6, agent-base@^6.0.0: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -3077,6 +3082,15 @@ agentkeepalive@^3.4.1: dependencies: humanize-ms "^1.2.1" +agentkeepalive@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.1.3.tgz#360a09d743a1f4fde749f9ba07caa6575d08259a" + integrity sha512-wn8fw19xKZwdGPO47jivonaHRTd+nGOMP1z11sgGeQzDy2xd5FG0R67dIMcKHDE2cJ5y+YXV30XVGUBPRSY7Hg== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -3663,6 +3677,31 @@ cacache@^12.0.0, cacache@^12.0.3: unique-filename "^1.1.1" y18n "^4.0.0" +cacache@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-14.0.0.tgz#97c10fc87c4c7ee41d45e32631c26761c2687caa" + integrity sha512-+Nr/BnA/tjAUXza9gH8F+FSP+1HvWqCKt4c95dQr4EDVJVafbzmPZpLKCkLYexs6vSd2B/1TOXrAoNnqVPfvRA== + dependencies: + chownr "^1.1.2" + figgy-pudding "^3.5.1" + fs-minipass "^2.0.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + minipass "^3.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + move-concurrently "^1.0.1" + p-map "^3.0.0" + promise-inflight "^1.0.1" + rimraf "^2.7.1" + ssri "^7.0.0" + tar "^6.0.0" + unique-filename "^1.1.1" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -3790,7 +3829,7 @@ cdk-assets@1.74.0: glob "^7.1.6" yargs "^16.1.1" -chalk@^2.0.0, chalk@^2.3.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3842,6 +3881,11 @@ chownr@^1.1.1, chownr@^1.1.2: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== +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@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -3888,6 +3932,18 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-highlight@^2.1.4: + version "2.1.9" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.9.tgz#4f4ecb05326d70d56d4b4249fabf9a70fb002497" + integrity sha512-t8RNIZgiI24i/mslZ8XT8o660RUj5ZbUJpEZrZa/BNekTzdC2LfMRAnt0Y7sgzNM4FGW5tmWg/YnbTH8o1eIOQ== + dependencies: + chalk "^4.0.0" + highlight.js "^10.0.0" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^15.0.0" + cli-truncate@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" @@ -4494,7 +4550,7 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= -depd@~1.1.2: +depd@^1.1.2, depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= @@ -4629,7 +4685,7 @@ enabled@2.0.x: resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== -encoding@^0.1.11: +encoding@^0.1.11, encoding@^0.1.12: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== @@ -5259,6 +5315,13 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.6.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-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -5619,6 +5682,11 @@ has@^1.0.3: resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= +highlight.js@^10.0.0: + version "10.5.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.5.0.tgz#3f09fede6a865757378f2d9ebdcbc15ba268f98f" + integrity sha512-xTmvd9HiIHR6L53TMC7TKolEj65zG1XU+Onr8oi86mYa+nLcIbxTTWkpW7CsEwv/vK7u1zb8alZIMLDqqN6KTw== + hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: version "2.8.8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" @@ -5648,6 +5716,11 @@ http-cache-semantics@^3.8.1: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== +http-cache-semantics@^4.0.3: + 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== + http-errors@1.7.3: version "1.7.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" @@ -5667,6 +5740,14 @@ http-proxy-agent@^2.1.0: agent-base "4" debug "3.1.0" +http-proxy-agent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-3.0.0.tgz#598f42dc815949a11e2c6dbfdf24cd8a4c165327" + integrity sha512-uGuJaBWQWDQCJI5ip0d/VTYZW0nRrlLWXA4A7P1jrsa+f77rW2yXz315oBt6zGCF6l8C2tlMxY7ffULCj+5FhA== + dependencies: + agent-base "5" + debug "4" + http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" @@ -5701,6 +5782,14 @@ https-proxy-agent@^2.2.3: agent-base "^4.3.0" debug "^3.1.0" +https-proxy-agent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" + integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg== + dependencies: + agent-base "5" + debug "4" + human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -6062,6 +6151,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= + is-map@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" @@ -6848,6 +6942,20 @@ lazystream@^1.0.0: dependencies: readable-stream "^2.0.5" +lerna-changelog@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lerna-changelog/-/lerna-changelog-1.0.1.tgz#53090ab7f047730ec88d32087762164626269d3a" + integrity sha512-E7ewsfQknBmQcUspCqd5b8Hbbp5SX768y6vEiIdXXui9pPhZS1WlrKtiAUPs0CeGd8Pv4gtIC/h3wSWIZuvqaA== + dependencies: + chalk "^2.4.1" + cli-highlight "^2.1.4" + execa "^1.0.0" + make-fetch-happen "^7.1.1" + normalize-git-url "^3.0.2" + p-map "^3.0.0" + progress "^2.0.0" + yargs "^13.0.0" + lerna@^3.22.1: version "3.22.1" resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.22.1.tgz#82027ac3da9c627fd8bf02ccfeff806a98e65b62" @@ -7172,6 +7280,27 @@ make-fetch-happen@^5.0.0: socks-proxy-agent "^4.0.0" ssri "^6.0.0" +make-fetch-happen@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-7.1.1.tgz#89ac8112eaa9d4361541deb591329e9238a531b1" + integrity sha512-7fNjiOXNZhNGQzG5P15nU97aZQtzPU2GVgVd7pnqnl5gnpLzMAD8bAe5YG4iW2s0PTqaZy9xGv4Wfqe872kRNQ== + dependencies: + agentkeepalive "^4.1.0" + cacache "^14.0.0" + http-cache-semantics "^4.0.3" + http-proxy-agent "^3.0.0" + https-proxy-agent "^4.0.0" + is-lambda "^1.0.1" + lru-cache "^5.1.1" + minipass "^3.0.0" + minipass-collect "^1.0.2" + minipass-fetch "^1.1.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^7.0.1" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -7356,6 +7485,45 @@ minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.1.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.3.2.tgz#573766fb1ae86e30df916a6b060bc2e801bf8f37" + integrity sha512-/i4fX1ss+Dtwyk++OsAI6SEV+eE1dvI6W+0hORdjfruQ7VD5uYTetJIHcEMjWiEiszWjn2aAtP1CB/Q4KfeoYA== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" @@ -7364,6 +7532,13 @@ minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + dependencies: + yallist "^4.0.0" + minizlib@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -7371,6 +7546,14 @@ minizlib@^1.2.1: dependencies: minipass "^2.9.0" +minizlib@^2.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" + mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -7402,7 +7585,7 @@ mkdirp-promise@^5.0.1: dependencies: mkdirp "*" -mkdirp@*, mkdirp@1.x: +mkdirp@*, mkdirp@1.x, mkdirp@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -7466,7 +7649,7 @@ mute-stream@~0.0.4: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -mz@^2.5.0: +mz@^2.4.0, mz@^2.5.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== @@ -7578,6 +7761,11 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" +normalize-git-url@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4" + integrity sha1-jl8Uvgva7bc+ByADEKpBbCc1D8Q= + normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -7910,6 +8098,13 @@ p-map@^2.1.0: resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + p-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" @@ -8039,11 +8234,23 @@ parse-url@^5.0.0: parse-path "^4.0.0" protocols "^1.4.0" -parse5@5.1.1: +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@5.1.1, parse5@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -8767,7 +8974,7 @@ retry@^0.10.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= -rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: +rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -9185,6 +9392,14 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" +ssri@^7.0.0, ssri@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.0.tgz#92c241bf6de82365b5c7fb4bd76e975522e1294d" + integrity sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g== + dependencies: + figgy-pudding "^3.5.1" + minipass "^3.1.1" + sst-cdk@1.74.0-rc.6: version "1.74.0-rc.6" resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.74.0-rc.6.tgz#581a9c0ff8204a0f480c4cbe02b1f8ffd5b05180" @@ -9498,6 +9713,18 @@ tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: safe-buffer "^5.1.2" yallist "^3.0.3" +tar@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f" + integrity sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg== + 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" + temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" @@ -10303,6 +10530,14 @@ yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^15.0.1: version "15.0.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" @@ -10319,6 +10554,22 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" +yargs@^13.0.0: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + yargs@^14.2.2: version "14.2.3" resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" @@ -10336,7 +10587,7 @@ yargs@^14.2.2: y18n "^4.0.0" yargs-parser "^15.0.1" -yargs@^15.3.1, yargs@^15.4.1: +yargs@^15.0.0, yargs@^15.3.1, yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== From 78a32845e5fd9b15ba2560d7f5fecba83c622d4d Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 6 Jan 2021 17:03:06 -0500 Subject: [PATCH 196/481] Adding logo to README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 0d4a253e36..6046de3542 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Serverless Stack Toolkit (SST) [![npm](https://img.shields.io/npm/v/@serverless-stack/cli.svg)](https://www.npmjs.com/package/@serverless-stack/cli) [![Build Status](https://github.com/serverless-stack/serverless-stack/workflows/CI/badge.svg)](https://github.com/serverless-stack/serverless-stack/actions) +Logo + Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.com/cdk/) that: - Allows you to use [**CDK with Serverless Framework**](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html) From bc56c47de147c12e93b393f8d48fa8687719bd13 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 6 Jan 2021 17:27:21 -0500 Subject: [PATCH 197/481] Adding GIF to README --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 6046de3542..3c2f4fb419 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,10 @@ $ cd my-sst-app $ npx sst start ``` +

+sst start +

+ ## Table of Contents - [Background](#background) From d826d06cc23f1b8e90f87ea3a51970e0afc21e4d Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 6 Jan 2021 17:30:30 -0500 Subject: [PATCH 198/481] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3c2f4fb419..a36e353f6a 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ $ npx sst start - [Usage](#usage) - [Creating an app](#creating-an-app) - [Working on your app](#working-on-your-app) - - [Developing your Lambdas](#developing-your-lambdas) + - [Developing locally](#developing-locally) - [Building your app](#building-your-app) - [Deploying your app](#deploying-your-app) - [Removing an app](#removing-an-app) @@ -96,7 +96,7 @@ The `sst start` command starts up a local development environment that opens a W - So if a Lambda fails on AWS due to lack of IAM permissions, it would fail locally as well - And it's fast. There's nothing to deploy when you make a change! -You can read more about the [**sst start** command here](https://github.com/serverless-stack/serverless-stack/tree/master/packages/cli#start). +You can read more about the [**sst start** command here](https://github.com/serverless-stack/serverless-stack/tree/master/packages/cli#start) and [try out a demo here](https://github.com/serverless-stack/sst-start-demo). ### And more @@ -239,7 +239,7 @@ Notice that we are using the `sst.Function` instead of the `cdk.lambda.NodejsFun You can read more about [**@serverless-stack/resources** here](https://github.com/serverless-stack/serverless-stack/tree/master/packages/resources). -### Developing your Lambdas +### Developing locally After you've defined your app in CDK and you are ready to work on your Lambda functions, start the local development environment using. From 6d75b934df962b23b5eb5f6c2dc0484faf920472 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 6 Jan 2021 17:38:15 -0500 Subject: [PATCH 199/481] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a36e353f6a..8ca21f2029 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,9 @@ Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.com/cdk/) that: - Allows you to use [**CDK with Serverless Framework**](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html) -- And develop your Lambdas **locally without mocking or deploying**! +- And develop your Lambdas **locally without mocking**! + +Join our community: [**Chat**](https://gitter.im/serverless-stack/Lobby) / [**Forums**](https://discourse.serverless-stack.com/) / [**Twitter**](https://twitter.com/ServerlessStack) ## Quick Start From c0991574259c096159c5f8b593f05949ff0f7494 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 6 Jan 2021 17:39:49 -0500 Subject: [PATCH 200/481] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8ca21f2029..9efdd789bb 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.c - Allows you to use [**CDK with Serverless Framework**](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html) - And develop your Lambdas **locally without mocking**! -Join our community: [**Chat**](https://gitter.im/serverless-stack/Lobby) / [**Forums**](https://discourse.serverless-stack.com/) / [**Twitter**](https://twitter.com/ServerlessStack) +Join our community: [**Chat**](https://gitter.im/serverless-stack/Lobby) / [**Twitter**](https://twitter.com/ServerlessStack) / [**Forums**](https://discourse.serverless-stack.com/) / [**Newsletter**](https://emailoctopus.com/lists/1c11b9a8-1500-11e8-a3c9-06b79b628af2/forms/subscribe) ## Quick Start From 0dfa4b120551ebefca173b2762a15cce9beda83d Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 6 Jan 2021 19:34:52 -0500 Subject: [PATCH 201/481] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9efdd789bb..0cb7679fb7 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.c - Allows you to use [**CDK with Serverless Framework**](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html) - And develop your Lambdas **locally without mocking**! -Join our community: [**Chat**](https://gitter.im/serverless-stack/Lobby) / [**Twitter**](https://twitter.com/ServerlessStack) / [**Forums**](https://discourse.serverless-stack.com/) / [**Newsletter**](https://emailoctopus.com/lists/1c11b9a8-1500-11e8-a3c9-06b79b628af2/forms/subscribe) +Getting help: [**Chat**](https://gitter.im/serverless-stack/Lobby) / [**Forums**](https://discourse.serverless-stack.com/) / [**Twitter**](https://twitter.com/ServerlessStack) ## Quick Start @@ -461,7 +461,7 @@ $ yarn test ## Community -[Follow us on Twitter](https://twitter.com/ServerlessStack), [join our chatroom](https://gitter.im/serverless-stack/Lobby), or [post on our forums](https://discourse.serverless-stack.com). +[Follow us on Twitter](https://twitter.com/ServerlessStack), [join our chatroom](https://gitter.im/serverless-stack/Lobby), [post on our forums](https://discourse.serverless-stack.com), and [subscribe to our newsletter](https://emailoctopus.com/lists/1c11b9a8-1500-11e8-a3c9-06b79b628af2/forms/subscribe). ## Thanks From da68e17ec3f152f3285db416d572f381e2a62d28 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 6 Jan 2021 20:37:25 -0500 Subject: [PATCH 202/481] Update README.md --- packages/resources/README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/resources/README.md b/packages/resources/README.md index 8a3856e496..b9dfddb6de 100644 --- a/packages/resources/README.md +++ b/packages/resources/README.md @@ -109,9 +109,7 @@ Relative path to the entry point of the function. Either based of the project ro ### `srcPath` -The source directory where the entry point file is located. The `node_modules` in this directory is used to generate the bundle. The `tsconfig.json` is expected to be here as well. - -Defaults to `""` (project root). +The source directory where the entry point file is located. The `node_modules` in this directory is used to generate the bundle. The `tsconfig.json` is expected to be here as well. Cannot be set to the project root. ### `handler` From 6e3910ece1b9f04dc74c558c61875cdebb434104 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 6 Jan 2021 21:09:36 -0500 Subject: [PATCH 203/481] Adding tests for sst start --- packages/cli/scripts/deploy.js | 1 + packages/cli/scripts/start.js | 47 +++++++++++++++---- packages/cli/scripts/util/cdkHelpers.js | 13 +++++ packages/cli/test/helpers/index.js | 2 + .../cli/test/helpers/run-start-command.js | 28 +++++++++++ packages/cli/test/start-no-src-path/lambda.js | 9 ++++ packages/cli/test/start-no-src-path/lib.js | 3 ++ .../cli/test/start-no-src-path/lib/index.js | 25 ++++++++++ .../cli/test/start-no-src-path/package.json | 24 ++++++++++ packages/cli/test/start-no-src-path/sst.json | 6 +++ .../start-no-src-path.test.js | 20 ++++++++ packages/core/index.js | 5 ++ packages/resources/src/Function.ts | 21 ++++++--- yarn.lock | 5 ++ 14 files changed, 194 insertions(+), 15 deletions(-) create mode 100644 packages/cli/test/helpers/run-start-command.js create mode 100644 packages/cli/test/start-no-src-path/lambda.js create mode 100644 packages/cli/test/start-no-src-path/lib.js create mode 100644 packages/cli/test/start-no-src-path/lib/index.js create mode 100644 packages/cli/test/start-no-src-path/package.json create mode 100644 packages/cli/test/start-no-src-path/sst.json create mode 100644 packages/cli/test/start-no-src-path/start-no-src-path.test.js diff --git a/packages/cli/scripts/deploy.js b/packages/cli/scripts/deploy.js index dd54c4aff7..c59d292652 100644 --- a/packages/cli/scripts/deploy.js +++ b/packages/cli/scripts/deploy.js @@ -61,6 +61,7 @@ module.exports = async function (argv, config, cliInfo) { return stackStates.map((stackState) => ({ name: stackState.name, status: stackState.status, + outputs: stackState.outputs, })); }; diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index b5afb3dc61..eccb3c6df5 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -10,11 +10,13 @@ const spawn = require("cross-spawn"); const allSettled = require("promise.allsettled"); const sstDeploy = require("./deploy"); +const sstBuild = require("./build"); const paths = require("./util/paths"); const { prepareCdk, applyConfig, deploy: cdkDeploy, + bootstrap: cdkBootstrap, } = require("./util/cdkHelpers"); const array = require("../lib/array"); const { logger, addFileTransport } = require("../lib/logger"); @@ -79,6 +81,7 @@ const clientState = { }; const MOCK_SLOW_ESBUILD_RETRANSPILE_IN_MS = 0; +const IS_TEST = process.env.__TEST__ === "true"; process.on("uncaughtException", (err, origin) => { logger.error("Unhandled Exception at:", err, "origin:", origin); @@ -94,7 +97,7 @@ module.exports = async function (argv, cliInfo) { const config = await applyConfig(argv); // Deploy debug stack - config.debugEndpoint = await deployDebugStack(cliInfo, config); + config.debugEndpoint = await deployDebugStack(argv, cliInfo, config); // Deploy app const cdkInputFiles = await deployApp(argv, cliInfo, config); @@ -106,7 +109,12 @@ module.exports = async function (argv, cliInfo) { startClient(config.debugEndpoint); }; -async function deployDebugStack(cliInfo, config) { +async function deployDebugStack(argv, cliInfo, config) { + // Do not deploy if running test + if (IS_TEST) { + return; + } + const stackName = `${config.stage}-debug-stack`; logger.info(""); @@ -120,11 +128,19 @@ async function deployDebugStack(cliInfo, config) { // Setting the current working directory to debug stack cdk app directory to allow // Lambda Function construct be able to reference code with relative path. process.chdir(path.join(paths.ownPath, "assets", "debug-stack")); - const debugStackRet = await cdkDeploy({ - ...cliInfo.cdkOptions, - app: `node bin/index.js ${debugAppArgs.join(" ")}`, - output: "cdk.out", - }); + let debugStackRet; + try { + const cdkOptions = { + ...cliInfo.cdkOptions, + app: `node bin/index.js ${debugAppArgs.join(" ")}`, + output: "cdk.out", + }; + await cdkBootstrap(cdkOptions); + debugStackRet = await cdkDeploy(cdkOptions); + } catch (e) { + logger.error(e); + } + // Note: Restore working directory process.chdir(paths.appPath); @@ -149,7 +165,11 @@ async function deployApp(argv, cliInfo, config) { logger.info(""); const { inputFiles } = await prepareCdk(argv, cliInfo, config); - await sstDeploy(argv, config, cliInfo); + + // When testing, we will do a build call to generate the lambda-handler.json + IS_TEST + ? await sstBuild(argv, config, cliInfo) + : await sstDeploy(argv, config, cliInfo); return inputFiles; } @@ -226,6 +246,12 @@ async function startBuilder(cdkInputFiles) { .on("ready", () => { builderLogger.debug(`Watcher ready for ${allInputFiles.length} files...`); }); + + // Terminate if running inside test + if (IS_TEST) { + console.log("===== IS_TEST DONE"); + return; + } } async function updateBuilder() { builderLogger.silly(serializeState()); @@ -771,6 +797,11 @@ function sleep(ms) { /////////////////////////////// function startClient(debugEndpoint) { + // Do not deploy if running test + if (IS_TEST) { + return; + } + clientState.ws = new WebSocket(debugEndpoint); clientState.ws.on("open", () => { diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index 4e28481364..ae9623685a 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -376,6 +376,18 @@ async function synth(options) { return results; } +async function bootstrap(options) { + let results; + + try { + results = await sstCore.bootstrap(options); + } catch (e) { + handleCdkErrors(e); + } + + return results; +} + async function deploy(options) { let results; @@ -428,6 +440,7 @@ module.exports = { synth, deploy, destroy, + bootstrap, prepareCdk, applyConfig, parallelDeploy, diff --git a/packages/cli/test/helpers/index.js b/packages/cli/test/helpers/index.js index d43ea9bba6..eabcf6274e 100644 --- a/packages/cli/test/helpers/index.js +++ b/packages/cli/test/helpers/index.js @@ -3,6 +3,7 @@ const yarnInstall = require("./yarn-install"); const runCdkCommand = require("./run-cdk-command"); const runJestCommand = require("./run-jest-command"); const runBuildCommand = require("./run-build-command"); +const runStartCommand = require("./run-start-command"); const runAddCdkCommand = require("./run-add-cdk-command"); const clearBuildOutput = require("./clear-build-output"); @@ -19,6 +20,7 @@ module.exports = { runCdkCommand, runJestCommand, runBuildCommand, + runStartCommand, runAddCdkCommand, clearBuildOutput, diff --git a/packages/cli/test/helpers/run-start-command.js b/packages/cli/test/helpers/run-start-command.js new file mode 100644 index 0000000000..f6d14500f7 --- /dev/null +++ b/packages/cli/test/helpers/run-start-command.js @@ -0,0 +1,28 @@ +const { promisify } = require("util"); +const { exec } = require("child_process"); +const yarnInstall = require("./yarn-install"); + +const execPromise = promisify(exec); +const TIMEOUT = 30000; + +async function runStartCommand(cwd) { + await yarnInstall(cwd); + + let result, error; + + try { + result = await execPromise(`yarn run start`, { + cwd, + env: { ...process.env, __TEST__: "true" }, + TIMEOUT, + }); + } catch (e) { + error = e.toString() + e.stdout; + } + + return error + ? error + : result.stdout.toString("utf8") + result.stderr.toString("utf8"); +} + +module.exports = runStartCommand; diff --git a/packages/cli/test/start-no-src-path/lambda.js b/packages/cli/test/start-no-src-path/lambda.js new file mode 100644 index 0000000000..60235b1568 --- /dev/null +++ b/packages/cli/test/start-no-src-path/lambda.js @@ -0,0 +1,9 @@ +import mirrarray from "mirrarray"; + +import str from "./lib"; + +export async function handler() { + mirrarray(["this", "that", "another"]); + + return "Hello World: " + str("Spongebob"); +} diff --git a/packages/cli/test/start-no-src-path/lib.js b/packages/cli/test/start-no-src-path/lib.js new file mode 100644 index 0000000000..f1e79568a3 --- /dev/null +++ b/packages/cli/test/start-no-src-path/lib.js @@ -0,0 +1,3 @@ +export default function (name) { + return name; +} diff --git a/packages/cli/test/start-no-src-path/lib/index.js b/packages/cli/test/start-no-src-path/lib/index.js new file mode 100644 index 0000000000..b80c7c4516 --- /dev/null +++ b/packages/cli/test/start-no-src-path/lib/index.js @@ -0,0 +1,25 @@ +import * as cdk from "@aws-cdk/core"; +import * as lambda from "@aws-cdk/aws-lambda"; + +import * as sst from "@serverless-stack/resources"; + +class MySampleStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + // Create a Lambda function + new sst.Function(this, "MyLambda", { + bundle: true, + srcPath: ".", + entry: "lambda.js", + // srcPath: "src/api", + // handler: "handler", + runtime: lambda.Runtime.NODEJS_12_X, + timeout: cdk.Duration.seconds(10), + }); + } +} + +export default function main(app) { + new MySampleStack(app, "sample"); +} diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json new file mode 100644 index 0000000000..9fc5304b22 --- /dev/null +++ b/packages/cli/test/start-no-src-path/package.json @@ -0,0 +1,24 @@ +{ + "name": "start-no-src-path", + "private": true, + "description": "tests", + "version": "0.0.1", + "scripts": { + "postinstall": "node ../helpers/copy-symlinks.js", + "start": "sst start", + "build": "sst build", + "deploy": "sst deploy", + "remove": "sst remove", + "cdk": "sst cdk" + }, + "dependencies": { + "@aws-cdk/aws-apigatewayv2": "1.74.0", + "@aws-cdk/aws-apigatewayv2-integrations": "1.74.0", + "@aws-cdk/aws-lambda": "1.74.0", + "@aws-cdk/core": "1.74.0", + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5", + "mirrarray": "^2.0.0" + }, + "license": "ISC" +} diff --git a/packages/cli/test/start-no-src-path/sst.json b/packages/cli/test/start-no-src-path/sst.json new file mode 100644 index 0000000000..550b59d5db --- /dev/null +++ b/packages/cli/test/start-no-src-path/sst.json @@ -0,0 +1,6 @@ +{ + "type": "@serverless-stack/resources", + "name": "cdknotes", + "stage": "prod", + "region": "us-east-1" +} diff --git a/packages/cli/test/start-no-src-path/start-no-src-path.test.js b/packages/cli/test/start-no-src-path/start-no-src-path.test.js new file mode 100644 index 0000000000..d144ad54f4 --- /dev/null +++ b/packages/cli/test/start-no-src-path/start-no-src-path.test.js @@ -0,0 +1,20 @@ +const { runStartCommand, clearBuildOutput } = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("start-no-src-path", async () => { + const result = await runStartCommand(__dirname); + + expect(result).toMatch( + /Error: Source path cannot be the project root for the MyLambda Lambda function/ + ); +}); diff --git a/packages/core/index.js b/packages/core/index.js index faaca7220a..263fc5e247 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -16,6 +16,10 @@ async function synth(cdkOptions) { return await cdk.synth(cdkOptions); } +async function bootstrap(cdkOptions) { + return await cdk.bootstrap(cdkOptions); +} + async function deploy(cdkOptions) { return await cdk.deploy(cdkOptions); } @@ -806,6 +810,7 @@ module.exports = { synth, deploy, destroy, + bootstrap, getCdkVersion, parallelDeploy, parallelDestroy, diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index 346403af23..969c132904 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -19,10 +19,8 @@ export interface FunctionProps extends lambda.FunctionOptions { /** * The source directory where the entry point is located. The node_modules in this * directory is used to generate the bundle. - * - * @default - Defaults to project root */ - readonly srcPath?: string; + readonly srcPath: string; /** * The runtime environment. Only runtimes of the Node.js family are * supported. @@ -64,12 +62,22 @@ export class Function extends lambda.Function { // Set defaults const handler = props.handler || "handler"; - const srcPath = props.srcPath || process.cwd(); const runtime = props.runtime || lambda.Runtime.NODEJS_12_X; const bundle = props.bundle === undefined ? true : props.bundle; + const srcPath = props.srcPath; + const entry = props.entry; + + // Validate source path + if (!srcPath) { + throw new Error(`No source path defined for the ${id} Lambda function`); + } else if (path.resolve(srcPath) === process.cwd()) { + throw new Error( + `Source path cannot be the project root for the ${id} Lambda function` + ); + } // Validate entry file - if (!props.entry) { + if (!entry) { throw new Error(`No entry point defined for the ${id} Lambda function`); } @@ -90,7 +98,6 @@ export class Function extends lambda.Function { } if (root.local) { - const entry = props.entry; super(scope, id, { ...props, runtime, @@ -113,7 +120,7 @@ export class Function extends lambda.Function { bundle: bundle, srcPath: srcPath, handler: handler, - entry: props.entry, + entry: entry, buildDir: root.buildDir, }); diff --git a/yarn.lock b/yarn.lock index 33d896823a..e36faaf4d3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7371,6 +7371,11 @@ minizlib@^1.2.1: dependencies: minipass "^2.9.0" +mirrarray@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mirrarray/-/mirrarray-2.0.0.tgz#f712a091269b79d4b3c8d3344242756bb0a5c671" + integrity sha512-z7YW6OC9zWriGlC+pM01GEnaqnzzAXwrNtaV2mPl2J0BmCRexAPLiWoaPH5zNvdrpZdijHD9/IQAovptiLPe5w== + mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" From 230b365a6642819fa4702b6adba57ced0b3414fb Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 6 Jan 2021 21:58:55 -0500 Subject: [PATCH 204/481] Updating to 1.79.0 --- packages/cli/package.json | 12 +- packages/cli/test/base-ts/package.json | 6 +- packages/cli/test/base/package.json | 12 +- packages/cli/test/config/package.json | 2 +- packages/cli/test/context/package.json | 2 +- packages/cli/test/jest-ts/package.json | 12 +- packages/cli/test/jest/package.json | 6 +- .../cli/test/stack-no-prefix/package.json | 2 +- .../cli/test/start-no-src-path/package.json | 8 +- packages/cli/test/start/package.json | 12 +- packages/core/package.json | 2 +- packages/resources/package.json | 6 +- yarn.lock | 733 +++++++++--------- 13 files changed, 422 insertions(+), 393 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index e19f84ebc1..838da40707 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -35,11 +35,11 @@ }, "homepage": "https://serverless-stack.com", "dependencies": { - "@aws-cdk/aws-apigatewayv2": "1.74.0", - "@aws-cdk/aws-dynamodb": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/core": "1.74.0", + "@aws-cdk/aws-apigatewayv2": "1.79.0", + "@aws-cdk/aws-dynamodb": "1.79.0", + "@aws-cdk/aws-iam": "1.79.0", + "@aws-cdk/aws-lambda": "1.79.0", + "@aws-cdk/core": "1.79.0", "@babel/core": "^7.10.5", "@babel/eslint-parser": "^7.11.3", "@babel/eslint-plugin": "^7.11.3", @@ -51,7 +51,7 @@ "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", "@typescript-eslint/parser": "^3.9.1", - "aws-cdk": "1.74.0", + "aws-cdk": "1.79.0", "chalk": "^4.1.0", "chokidar": "^3.4.3", "core-js": "^3.6.5", diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index 0d7a2be90f..e9d5293f57 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -12,13 +12,13 @@ "cdk": "sst cdk" }, "dependencies": { - "@aws-cdk/aws-s3": "1.74.0", - "@aws-cdk/core": "1.74.0", + "@aws-cdk/aws-s3": "1.79.0", + "@aws-cdk/core": "1.79.0", "@serverless-stack/cli": "^1.0.0-alpha.5", "@serverless-stack/resources": "^1.0.0-alpha.5" }, "license": "ISC", "devDependencies": { - "@aws-cdk/assert": "1.74.0" + "@aws-cdk/assert": "1.79.0" } } diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index 1d576ab262..9308882418 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -12,12 +12,12 @@ "cdk": "sst cdk" }, "dependencies": { - "@aws-cdk/aws-cloudformation": "1.74.0", - "@aws-cdk/aws-cognito": "1.74.0", - "@aws-cdk/aws-dynamodb": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-s3": "1.74.0", - "@aws-cdk/core": "1.74.0", + "@aws-cdk/aws-cloudformation": "1.79.0", + "@aws-cdk/aws-cognito": "1.79.0", + "@aws-cdk/aws-dynamodb": "1.79.0", + "@aws-cdk/aws-iam": "1.79.0", + "@aws-cdk/aws-s3": "1.79.0", + "@aws-cdk/core": "1.79.0", "@serverless-stack/cli": "^1.0.0-alpha.5", "@serverless-stack/resources": "^1.0.0-alpha.5" }, diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index d9c6da7050..10bb95f4d4 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -8,7 +8,7 @@ "build": "sst build" }, "dependencies": { - "@aws-cdk/aws-dynamodb": "1.74.0", + "@aws-cdk/aws-dynamodb": "1.79.0", "@serverless-stack/cli": "^1.0.0-alpha.5", "@serverless-stack/resources": "^1.0.0-alpha.5" }, diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index e1ce87edca..2a89320f19 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -8,7 +8,7 @@ "build": "sst build" }, "dependencies": { - "@aws-cdk/aws-dynamodb": "1.74.0", + "@aws-cdk/aws-dynamodb": "1.79.0", "@serverless-stack/cli": "^1.0.0-alpha.5", "@serverless-stack/resources": "^1.0.0-alpha.5" }, diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index c41dfe12e5..48c9d247d6 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -14,17 +14,17 @@ ] }, "dependencies": { - "@aws-cdk/aws-dynamodb": "1.74.0", - "@aws-cdk/aws-sns": "1.74.0", - "@aws-cdk/aws-sns-subscriptions": "1.74.0", - "@aws-cdk/aws-sqs": "1.74.0", - "@aws-cdk/core": "1.74.0", + "@aws-cdk/aws-dynamodb": "1.79.0", + "@aws-cdk/aws-sns": "1.79.0", + "@aws-cdk/aws-sns-subscriptions": "1.79.0", + "@aws-cdk/aws-sqs": "1.79.0", + "@aws-cdk/core": "1.79.0", "@serverless-stack/cli": "^1.0.0-alpha.5", "@serverless-stack/resources": "^1.0.0-alpha.5" }, "license": "ISC", "devDependencies": { - "@aws-cdk/assert": "1.74.0", + "@aws-cdk/assert": "1.79.0", "@types/jest": "^26.0.19", "@types/node": "^14.14.19" } diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index 684baec95e..bfb1d8309f 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -15,11 +15,11 @@ "dependencies": { "@serverless-stack/cli": "^1.0.0-alpha.5", "@serverless-stack/resources": "^1.0.0-alpha.5", - "@aws-cdk/aws-dynamodb": "1.74.0", - "@aws-cdk/core": "1.74.0" + "@aws-cdk/aws-dynamodb": "1.79.0", + "@aws-cdk/core": "1.79.0" }, "license": "ISC", "devDependencies": { - "@aws-cdk/assert": "1.74.0" + "@aws-cdk/assert": "1.79.0" } } diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index 4285133cfa..89c8106542 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -10,7 +10,7 @@ "dependencies": { "@serverless-stack/cli": "^1.0.0-alpha.5", "@serverless-stack/resources": "^1.0.0-alpha.5", - "@aws-cdk/core": "1.74.0" + "@aws-cdk/core": "1.79.0" }, "license": "ISC" } diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index 9fc5304b22..d666d946e3 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -12,10 +12,10 @@ "cdk": "sst cdk" }, "dependencies": { - "@aws-cdk/aws-apigatewayv2": "1.74.0", - "@aws-cdk/aws-apigatewayv2-integrations": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/core": "1.74.0", + "@aws-cdk/aws-apigatewayv2": "1.79.0", + "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", + "@aws-cdk/aws-lambda": "1.79.0", + "@aws-cdk/core": "1.79.0", "@serverless-stack/cli": "^1.0.0-alpha.5", "@serverless-stack/resources": "^1.0.0-alpha.5", "mirrarray": "^2.0.0" diff --git a/packages/cli/test/start/package.json b/packages/cli/test/start/package.json index 920b309a06..1a273ec95f 100644 --- a/packages/cli/test/start/package.json +++ b/packages/cli/test/start/package.json @@ -12,12 +12,12 @@ "cdk": "sst cdk" }, "dependencies": { - "@aws-cdk/aws-apigatewayv2": "1.74.0", - "@aws-cdk/aws-apigatewayv2-integrations": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-sns": "1.74.0", - "@aws-cdk/aws-sns-subscriptions": "1.74.0", - "@aws-cdk/core": "1.74.0", + "@aws-cdk/aws-apigatewayv2": "1.79.0", + "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", + "@aws-cdk/aws-lambda": "1.79.0", + "@aws-cdk/aws-sns": "1.79.0", + "@aws-cdk/aws-sns-subscriptions": "1.79.0", + "@aws-cdk/core": "1.79.0", "@serverless-stack/cli": "^1.0.0-alpha.5", "@serverless-stack/resources": "^1.0.0-alpha.5" }, diff --git a/packages/core/package.json b/packages/core/package.json index 7cd370ec0c..fc035343ac 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -20,7 +20,7 @@ "dependencies": { "aws-sdk": "^2.761.0", "chalk": "^4.1.0", - "sst-cdk": "1.74.0-rc.6" + "sst-cdk": "1.79.0-rc.1" }, "gitHead": "0a586f786aca7e7d498a80c4dda680159831f959" } diff --git a/packages/resources/package.json b/packages/resources/package.json index 7d5e93719c..aedede4634 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -25,9 +25,9 @@ "access": "public" }, "dependencies": { - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-lambda-nodejs": "1.74.0", - "@aws-cdk/core": "1.74.0", + "@aws-cdk/aws-lambda": "1.79.0", + "@aws-cdk/aws-lambda-nodejs": "1.79.0", + "@aws-cdk/core": "1.79.0", "chalk": "^4.1.0", "esbuild": "^0.8.26", "eslint": "^7.16.0", diff --git a/yarn.lock b/yarn.lock index 081e94edd7..b1aea20089 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,24 +2,24 @@ # yarn lockfile v1 -"@aws-cdk/assert@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.74.0.tgz#82795a3bb21ede93288a60322804f6f4e2d4959e" - integrity sha512-5M3M4lcSS2dGPgVANhv5GjqC6nNBy9bL1XECAJj3lg7q+6zJ00+0wq4bB0wyvm/mE+S0axkGZ4LVHF5QA2gCfQ== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/cloudformation-diff" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" +"@aws-cdk/assert@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.79.0.tgz#c30e904bff8dbabcc3ca6ee01904da1fc7a980e7" + integrity sha512-wCiMyxhtUz82blUlSnfoqpHdSjgFOkjpunjgxT2aG5Y6RTN0ExOOm9pdKDdXnul0zml6ZvfOL51wDG0Udg7zFg== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cloudformation-diff" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" constructs "^3.2.0" -"@aws-cdk/assets@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.74.0.tgz#8aea948a32afcf7c60449346a087c4b5aecff251" - integrity sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ== +"@aws-cdk/assets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.79.0.tgz#e97548a20e7fe9af8ebda8639ff275058211b128" + integrity sha512-h4FVseJK2lZ+FB8reFm0V37x0HEyg4mD8DGTb0akIz2A3U0ltmML+PN8EPANxLpSDOPYg2OLNAgPw5MOqXNC5A== dependencies: - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" constructs "^3.2.0" "@aws-cdk/assets@1.83.0": @@ -31,41 +31,41 @@ "@aws-cdk/cx-api" "1.83.0" constructs "^3.2.0" -"@aws-cdk/aws-apigatewayv2-integrations@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2-integrations/-/aws-apigatewayv2-integrations-1.74.0.tgz#a242aaa74e0f294da9b3beefd46a28fb53de5355" - integrity sha512-DkhmqK5VrYPOdCu75fzUCFX1ZXS+JcMq28MSW6chre23aDWDpLmFR3yoJ5+AxqgqxCmM2O5kqyIkjh5YaKC1Xg== - dependencies: - "@aws-cdk/aws-apigatewayv2" "1.74.0" - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-elasticloadbalancingv2" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-servicediscovery" "1.74.0" - "@aws-cdk/core" "1.74.0" +"@aws-cdk/aws-apigatewayv2-integrations@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2-integrations/-/aws-apigatewayv2-integrations-1.79.0.tgz#79bb0e39feb5630ed2493a8bdfe5e9f478b04798" + integrity sha512-/nlMJeSuji++LbW6HfJpibqzP0vq9Ia72O5YuohqxSj11p/l0bw9IaAuVE4e2Epv26pIY8DHkjhqZvIQ/seUrQ== + dependencies: + "@aws-cdk/aws-apigatewayv2" "1.79.0" + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-servicediscovery" "1.79.0" + "@aws-cdk/core" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-apigatewayv2@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.74.0.tgz#c65c94e25b70fcee53a3e15e211f74819eff4d77" - integrity sha512-Z8GRXYZX6MHZeyKQpiiCUvtxIKh6y9UGRM9f6+xfjMa75WwjoM8cFm9h41720LwKcUXYj0TlKiqEyeL12UIAYA== +"@aws-cdk/aws-apigatewayv2@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.79.0.tgz#a1e0303b432f154ec464c2fe2e8c1a9e51a193ad" + integrity sha512-+ktXFADC8fQ6Wnt7taTOBu+C5D0FClZ0oBWkIm+IUduLS0UQn2/4Qk1TWvrH64FMqPYSZ2b4dDQR4clv+on6wA== dependencies: - "@aws-cdk/aws-certificatemanager" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" + "@aws-cdk/aws-certificatemanager" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-applicationautoscaling@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz#ad5e946e68bd4094c3236e983d36f67d66135dfc" - integrity sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw== +"@aws-cdk/aws-applicationautoscaling@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.79.0.tgz#1211274a8c4a2a15e7a97cacc096eb775b9c207d" + integrity sha512-ctgfkgKorVui7xF01U9djVCnhMrtvnSl0B7LUAnI6gy6uFrzpg9rfaW845c8O+6211OP2v9zrBl06GGPeACkCQ== dependencies: - "@aws-cdk/aws-autoscaling-common" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" + "@aws-cdk/aws-autoscaling-common" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-applicationautoscaling@1.83.0": @@ -79,13 +79,13 @@ "@aws-cdk/core" "1.83.0" constructs "^3.2.0" -"@aws-cdk/aws-autoscaling-common@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz#f6bcbb987830f299b6e2ef454944afdde9a8a82e" - integrity sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg== +"@aws-cdk/aws-autoscaling-common@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.79.0.tgz#aa0516cafe8a5d9cf9ca642d05cf8fa0ce5fb79a" + integrity sha512-ZgprhHWRVvBz8Vh0sXYGdRiUm7cga4IzwHftuVu4MUWYu3IlQSm92tj9wv7dfttIT8v4z5idXsDzu3Og91lcjA== dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-autoscaling-common@1.83.0": @@ -97,15 +97,15 @@ "@aws-cdk/core" "1.83.0" constructs "^3.2.0" -"@aws-cdk/aws-certificatemanager@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.74.0.tgz#35b07c4b396a3db96da5d431e549460d1edc2251" - integrity sha512-Ve1SYM6qpUysHLD5bzHiE4kXBeo7VAEQlUti0cjkkjkuPh+dKHti/TqYhA0tkfUIMjZylnvkogBzMYdIUBTNxg== +"@aws-cdk/aws-certificatemanager@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.79.0.tgz#7989b7553c059d0d96814832badaaf49b32b3d87" + integrity sha512-8uBXTQXunDZlO2hvMZTnPr3tLM8ayPu/VuMX/Uh1deRf/UmlHyplT/ePwKoyRpeZcHfrGcTTVoQgli2saQxCtg== dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-route53" "1.74.0" - "@aws-cdk/core" "1.74.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-route53" "1.79.0" + "@aws-cdk/core" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-certificatemanager@1.83.0": @@ -119,17 +119,17 @@ "@aws-cdk/core" "1.83.0" constructs "^3.2.0" -"@aws-cdk/aws-cloudformation@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.74.0.tgz#04fffb02403fb52ee05ec43172b845a29a903a9e" - integrity sha512-VOyuMhoxA9vk3zSUfzqSg1YjYYgc+qyB0bpaOJIW/iinXYXhA64z5YQnTxdwd/exlFgA59chOanA7aRrNM2YIg== - dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-sns" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" +"@aws-cdk/aws-cloudformation@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.79.0.tgz#9f15101c3e1230d2ee1111d0e9ea9cade851b8ee" + integrity sha512-Rayo5xGbfE1gtsgXDcxun1vJJRDbA7VPJtfuMdh0cikpTeTA0/iMfpmg96Rgg+Ry/cxkHV8AFQAU0Va6uHiR2w== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-cloudformation@1.83.0": @@ -145,13 +145,13 @@ "@aws-cdk/cx-api" "1.83.0" constructs "^3.2.0" -"@aws-cdk/aws-cloudwatch@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz#94a29d2998a5c08412084b346d404b3a8b90f8a8" - integrity sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg== +"@aws-cdk/aws-cloudwatch@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.79.0.tgz#3bbeb41369d250470e87adc7e78d9f3d12a442ff" + integrity sha512-lbcrfUwI/9rvFCMyRa7g8DskqAXThDVrRM4SAdHAX/MCV5cBcb3GA1HzFfnILsq5RXPwoC4WT7hhxMibM4A0iA== dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-cloudwatch@1.83.0": @@ -163,13 +163,13 @@ "@aws-cdk/core" "1.83.0" constructs "^3.2.0" -"@aws-cdk/aws-codeguruprofiler@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz#d749688e9edb252ce6fc68efa4f9977f7ba02cb6" - integrity sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg== +"@aws-cdk/aws-codeguruprofiler@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.79.0.tgz#5aee986accca91b966e1a91ddc69d75d6c15721e" + integrity sha512-DF7MCJOCSGy9RV6X1ebhHOIggXOsJ21pQUs0mAClTt3/DPNEr0EQuiN30VhaiPxgUnbN3FTppLSLUzjIJSWbQA== dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-codeguruprofiler@1.83.0": @@ -181,16 +181,16 @@ "@aws-cdk/core" "1.83.0" constructs "^3.2.0" -"@aws-cdk/aws-cognito@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.74.0.tgz#740f51269cbe00b46ae6327814dd8c0dbb470912" - integrity sha512-t8XZbWQd8gMgn6FfYlPBmb3HDBVFHZI3tEODgc4mu/qRZAn2GH+pka4l1kdsgfzsBekvBLsOQosp7xJ6XaABsA== +"@aws-cdk/aws-cognito@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.79.0.tgz#b9263085c64415205ec07959ef34db47bbc01d66" + integrity sha512-m/Xu9VFXetB5DEtxM5irN0NsZK0p1RNh7WgIIoRoym1nQ8pwPvBegQTMaRVgNBnINSyyUtV/GtpArayey5V5Sg== dependencies: - "@aws-cdk/aws-certificatemanager" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/custom-resources" "1.74.0" + "@aws-cdk/aws-certificatemanager" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/custom-resources" "1.79.0" constructs "^3.2.0" punycode "^2.1.1" @@ -207,18 +207,18 @@ constructs "^3.2.0" punycode "^2.1.1" -"@aws-cdk/aws-dynamodb@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.74.0.tgz#7e0ef530e9c3d7301a9db616ddf6d650f7acb76f" - integrity sha512-YU38dFYLMyMe5u2GLy8sFCFTVxwDgWZ67HzFg41kSj8WpAsVQEE5Zxh1nf0+8Ai1J4MNeLeMCaXtuliHipoQSw== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/custom-resources" "1.74.0" +"@aws-cdk/aws-dynamodb@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.79.0.tgz#a7c03b3d28dddcb7430fbc3ef813dbb94796b214" + integrity sha512-4JYtuN67hdmyAVd0vcG8QkfxBf8RA4hv5sMwFRmxG0GuN2/iTa6Acp2XQstVk/nK8bE3BUioRRRNRK1/5amlDw== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/custom-resources" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-dynamodb@^1.55.0": @@ -235,22 +235,22 @@ "@aws-cdk/custom-resources" "1.83.0" constructs "^3.2.0" -"@aws-cdk/aws-ec2@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz#eae31df9045ca9374daf6b1562674e31d8053aff" - integrity sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/aws-ssm" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" +"@aws-cdk/aws-ec2@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.79.0.tgz#9c1ae84f374980f2456acdc57985a6612c1ae897" + integrity sha512-A2pbynk5o18gKeCy/epMiaD9R4OKrXlWzaqAOvUlHOom+SkxIyZMcALdxgU26nCty0DxGfgQiNHWTgNttLuRJQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/aws-ssm" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-ec2@1.83.0": @@ -271,6 +271,20 @@ "@aws-cdk/region-info" "1.83.0" constructs "^3.2.0" +"@aws-cdk/aws-ecr-assets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.79.0.tgz#1367783f50fc0974ee3f1f99e881b8682ac91221" + integrity sha512-pM6X3Q+Uybq9RlX5DSAKfLygyZqYA9eNFvQKmTtuiwt9A+SDAonHrv6xT9EvFQaPHpFnxESpBiuspJTr9hZggQ== + dependencies: + "@aws-cdk/assets" "1.79.0" + "@aws-cdk/aws-ecr" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + minimatch "^3.0.4" + "@aws-cdk/aws-ecr-assets@1.83.0": version "1.83.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.83.0.tgz#491407610dfd6cd831463eb214b60d1d478d5008" @@ -285,6 +299,16 @@ constructs "^3.2.0" minimatch "^3.0.4" +"@aws-cdk/aws-ecr@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr/-/aws-ecr-1.79.0.tgz#2257475e7a8ef103e9f9f7c7eff389430b4494e3" + integrity sha512-ZidVw6sdwNvMp+y75aH5k4IFMiIDCgpJ11d7tkSk1WKwoVu/pU/ZYLih/clTvFwzqzmh2A63rIyeC4+t5ziAvQ== + dependencies: + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + "@aws-cdk/aws-ecr@1.83.0": version "1.83.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr/-/aws-ecr-1.83.0.tgz#68b12106dac3b97388af7ef9714d5159bbd45a37" @@ -295,16 +319,16 @@ "@aws-cdk/core" "1.83.0" constructs "^3.2.0" -"@aws-cdk/aws-efs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz#367b89f14ccd090f98227dbc975076571b31faac" - integrity sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA== +"@aws-cdk/aws-efs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.79.0.tgz#429163c5334977ea4d63fec70b8f076dc8432647" + integrity sha512-iWjyRFKMIvf1tcwFhwcHaLhmLFeC+iknE36t1UvRFxcBV4K8mrHxkXCsJzqZTHpaAFP/LU0pFX04o03508NRWQ== dependencies: - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-efs@1.83.0": @@ -319,30 +343,30 @@ "@aws-cdk/cx-api" "1.83.0" constructs "^3.2.0" -"@aws-cdk/aws-elasticloadbalancingv2@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.74.0.tgz#794ee49baac329e43884748ecda3e66348fd5088" - integrity sha512-+Zx6/7CqZcsubSwxFC6rTq+uyzzQjIOGOh8RN/q93EZ9+snSJM/mRdZ/1DyNIjfSFbwyYQ1usE9rbYi1XWDPVA== - dependencies: - "@aws-cdk/aws-certificatemanager" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" +"@aws-cdk/aws-elasticloadbalancingv2@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.79.0.tgz#e20094caaf87be3302aad2083611206027e92342" + integrity sha512-kCEt2uKd8cyX7dvrbXOTqDFB8Isf75HI2Bj4I/GX6asnb9kK7DUEfvSDCFshEw6OJMAWEhL4TNPhIYJ94G3Eww== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-events@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz#2ed5a4cdd737ce4c8950506df496d0b43ac6aa12" - integrity sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw== +"@aws-cdk/aws-events@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.79.0.tgz#fa676d751de3aceb4bb408f00dab6e085ca90ea6" + integrity sha512-9fyvKqSC/Sa5cVe2SyvTrTBNw8MuZ8w29JX6O9McMff1i50ZMpdSFh/r/Hq4ImfcoRJvZcyXDYJmTUI8PYR6Fg== dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-events@1.83.0": @@ -363,13 +387,13 @@ "@aws-cdk/region-info" "1.57.0" constructs "^3.0.2" -"@aws-cdk/aws-iam@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz#c255c9676fb6048ab27c00d111ed5e7d8b46877c" - integrity sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA== +"@aws-cdk/aws-iam@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.79.0.tgz#456f0cc824c6e248378fcddfecb49637d7656089" + integrity sha512-lGgmOpdE2f05vQ3oT3pWlybTNb/PQcqkbdiBfvBPRYrg5p3lCGBDFSI3bv7Bjvl7lHhFRnxHnRb4CJRAXcUQqw== dependencies: - "@aws-cdk/core" "1.74.0" - "@aws-cdk/region-info" "1.74.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/region-info" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-iam@1.83.0": @@ -381,13 +405,14 @@ "@aws-cdk/region-info" "1.83.0" constructs "^3.2.0" -"@aws-cdk/aws-kms@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz#73531f7b5d2542eb5e3f7bb54604944921e34995" - integrity sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg== +"@aws-cdk/aws-kms@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.79.0.tgz#7c358ecd3823a7f965a7a091929c0afbc472d4d5" + integrity sha512-vYZUYO9GdOaalkVdJ8/7/f9KzCQh1XtU+MsKgxvXbjhLcjpt1mhPuxs0T+7fNuXbW8YVz1d6Y+BNjv4lEHz2Jw== dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/core" "1.74.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-kms@1.83.0": @@ -400,33 +425,36 @@ "@aws-cdk/cx-api" "1.83.0" constructs "^3.2.0" -"@aws-cdk/aws-lambda-nodejs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.74.0.tgz#aa818270e4dcd74be51d402cdb114da311b3c966" - integrity sha512-1mc8I+Yz43El8O8SjsfkABsI31tcpO5e3fAz7/40DKuFgM9jkL6vyiL55MLIckAqmE2N9mRYU0xF4RC7uRZdmQ== +"@aws-cdk/aws-lambda-nodejs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.79.0.tgz#f5a9b113a2dec4235a3b98084df285fa25e0880e" + integrity sha512-uopHiZaxbGspkb7h8+ziW8sDNaMoZjPVPXaWxSNqUuPSy6tBBi7vqXN0VfJzr1Ll4zL1cm9h6R2saMTgs4nn2Q== dependencies: - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/core" "1.74.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/core" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-lambda@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz#52175fbc9e679ca5c0f4d15e0666c99fc4a953d0" - integrity sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.74.0" - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-codeguruprofiler" "1.74.0" - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-efs" "1.74.0" - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/aws-sqs" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" +"@aws-cdk/aws-lambda@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.79.0.tgz#dfdfd699d376d79a04e399a023b126e2904f5117" + integrity sha512-K6A0nnYRO5MGq+0UdAXk1DRcOELWSPri4f6SNaWu0zhOEBKSAzcVRTJi/cNDs5VniGbGik4/3C5Hd6+8bp5nxA== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-codeguruprofiler" "1.79.0" + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-ecr" "1.79.0" + "@aws-cdk/aws-ecr-assets" "1.79.0" + "@aws-cdk/aws-efs" "1.79.0" + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/aws-sqs" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-lambda@1.83.0": @@ -452,16 +480,16 @@ "@aws-cdk/cx-api" "1.83.0" constructs "^3.2.0" -"@aws-cdk/aws-logs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz#cd40afe70ffeb5250ecea1db0ee0a2f68fb2084a" - integrity sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA== +"@aws-cdk/aws-logs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.79.0.tgz#b7ac08de2e1c3872a6bdf49488d92bf6b7425d55" + integrity sha512-J3iYGun//JsqpMl75/b6c+yxA5nY+Dxn0s72TA/BBYzaU4wI2NohwVaqe2X4HIuHniRBVVHBfJ36B3GMKdi4cQ== dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-s3-assets" "1.74.0" - "@aws-cdk/core" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/core" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-logs@1.83.0": @@ -476,15 +504,16 @@ "@aws-cdk/core" "1.83.0" constructs "^3.2.0" -"@aws-cdk/aws-route53@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.74.0.tgz#f9b3c770cf613227bba31c4a7499c8f19966f3e4" - integrity sha512-TYnAByXLc6B/uAG03bYLV0kPi1TU8G95kW6wNhfiqvPCSwfizbsg5rztbUoydJpBocbOs9qbtCM7v6gbDsB2bQ== +"@aws-cdk/aws-route53@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.79.0.tgz#877e568089f397989f0be59e7eb57742e9f03399" + integrity sha512-IJ32fcC6l1aKhI46wGH7HMUBRMQi8R8Cy9re3kmY4cVdAAfh8UJhIdr8jpaLs2iU0mrJPc4R0tHiCka4aNo2dQ== dependencies: - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/custom-resources" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-route53@1.83.0": @@ -499,17 +528,17 @@ "@aws-cdk/custom-resources" "1.83.0" constructs "^3.2.0" -"@aws-cdk/aws-s3-assets@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz#7f1988f3931e95d88a8c1357f98c47f7f9b73dee" - integrity sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg== - dependencies: - "@aws-cdk/assets" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-s3" "1.74.0" - "@aws-cdk/core" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" +"@aws-cdk/aws-s3-assets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.79.0.tgz#9351a396125a4a24227e071e29228c3ff9710d0b" + integrity sha512-P5ktD44LadqqX86IO/5q+cc38BsEeEaUBVCtymagCqYgZvDnkicuSMulcrbMefxUgQ6GLy+F7FuI4o9DHGb0nA== + dependencies: + "@aws-cdk/assets" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-s3-assets@1.83.0": @@ -525,15 +554,15 @@ "@aws-cdk/cx-api" "1.83.0" constructs "^3.2.0" -"@aws-cdk/aws-s3@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz#5b53839c3af0f67bfb1e96061f6a1ea5be445fe9" - integrity sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q== +"@aws-cdk/aws-s3@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.79.0.tgz#2de74f669d9cd058679c98c701f640412e2de3da" + integrity sha512-hJM+5jZWoOS4kJ8kXLLOVwjTkWY/BvpkOxuZSLcQV3eq2RFUCwtakx+NTnu+M98eezzme9wAXnKzDFsBcocuHQ== dependencies: - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/core" "1.74.0" + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/core" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-s3@1.83.0", "@aws-cdk/aws-s3@^1.57.0": @@ -547,40 +576,40 @@ "@aws-cdk/core" "1.83.0" constructs "^3.2.0" -"@aws-cdk/aws-servicediscovery@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.74.0.tgz#6e1145a4b85371431e8f6b21ce6ca7c9d855680c" - integrity sha512-5pABov1sNs0bgOb4UZKT+5H+OR3+0/8oxefFCiGxcGG4Kxsq4d4XJbmwx1oDUjCJclxlzOTuuCyay5NnoZ+6fg== +"@aws-cdk/aws-servicediscovery@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.79.0.tgz#b5a940a6591024bed859103565bfd83ae1a38679" + integrity sha512-3M+CiD1WfH5y/QSoYSkJIBYrQi65iFDq71mT0Ot8KBmERBTxcSgJjgQCqN45XhU522dr2cI9Gu/F03Sl3Reveg== dependencies: - "@aws-cdk/aws-ec2" "1.74.0" - "@aws-cdk/aws-elasticloadbalancingv2" "1.74.0" - "@aws-cdk/aws-route53" "1.74.0" - "@aws-cdk/core" "1.74.0" + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.79.0" + "@aws-cdk/aws-route53" "1.79.0" + "@aws-cdk/core" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-sns-subscriptions@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.74.0.tgz#6cdad4a409359122e8a410543e33da59d21b54cc" - integrity sha512-MOuArbCx1nxL5B40RMQzHNnU0SZWkaQfRDTURTQbX4e0OHyq5DnQrtXTu/XyI/MYPBU+ZnC/FXP+hynCatn+nw== +"@aws-cdk/aws-sns-subscriptions@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.79.0.tgz#c61248808e7aef9f49cdfdd4409336cc4af0e4b4" + integrity sha512-FeLsdUnwMCqyWP0ymQqa3VwLpFReAO8Hp5rihLsHI7dFXNaRflyaeXXbLbffn9AjeqbvqPhwIjTk3fb11STf6A== dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-sns" "1.74.0" - "@aws-cdk/aws-sqs" "1.74.0" - "@aws-cdk/core" "1.74.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/aws-sqs" "1.79.0" + "@aws-cdk/core" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-sns@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.74.0.tgz#c9289b34cb2512010a0b6813f684c93398502bdd" - integrity sha512-O0HDGvl1WjCTU53auNJKCW5/6vpbVYlj0RwLgGaOOlTeKnfuq53kGvL/t3QdZQlJWxSvkbN61O+rZB7GacXV0g== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-events" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/aws-sqs" "1.74.0" - "@aws-cdk/core" "1.74.0" +"@aws-cdk/aws-sns@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.79.0.tgz#e5ebfa22f344e8eaab29045e1e19b78c364d5228" + integrity sha512-Kmmj0A4anar8JUk8+SZZVJqyqMfsu+9jCMhU3AkKkfpHsnDTj+qz4aPKH+36XIijCQa9A55pjgy5v+k/8WJ81A== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-sqs" "1.79.0" + "@aws-cdk/core" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-sns@1.83.0": @@ -596,15 +625,15 @@ "@aws-cdk/core" "1.83.0" constructs "^3.2.0" -"@aws-cdk/aws-sqs@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz#998da5838d4310805432f0cf55fcc7c8f34657e2" - integrity sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg== +"@aws-cdk/aws-sqs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.79.0.tgz#237f16f8e18ca99e65d2909c91a7815022fa88d0" + integrity sha512-+rWIIHvygEwKmI2hyBXmoYo2sATpwzJw604Bp7stTQKcfp43vls5oq4SKjt87Gld2BO4cavF/ZCaEJO3pXMXyg== dependencies: - "@aws-cdk/aws-cloudwatch" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/core" "1.74.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/core" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-sqs@1.83.0": @@ -618,15 +647,15 @@ "@aws-cdk/core" "1.83.0" constructs "^3.2.0" -"@aws-cdk/aws-ssm@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz#426dd65c0b933618d5c196cb38386c1035b0fdc4" - integrity sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg== +"@aws-cdk/aws-ssm@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.79.0.tgz#0731a8681b072e720d430365fb7000c8e313a3f9" + integrity sha512-92DAyXS7sZa58LMDz9Or3IlmjgS1etHCBAHM5ombbKOFFwkBdd7A41y2QNXmtv2b61yJYcyetkLkDtmjEwNMaw== dependencies: - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-kms" "1.74.0" - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/core" "1.74.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/core" "1.79.0" constructs "^3.2.0" "@aws-cdk/aws-ssm@1.83.0": @@ -640,10 +669,10 @@ "@aws-cdk/core" "1.83.0" constructs "^3.2.0" -"@aws-cdk/cfnspec@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.74.0.tgz#03577e266721fe87287f9fc710a95d7b7e5886cd" - integrity sha512-9rdFgRUoV3lbAD6lnU+hGdkit8ILmUq+XCXzRdc9xWHUXIKxMmFK9frXTT+wGmjgdz/GpPyfSbFjzyqk4QE5+w== +"@aws-cdk/cfnspec@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.79.0.tgz#b5fe241290f20ed1a3911ba8f0a9807aab0ec749" + integrity sha512-rbBhox7hzXPXk2n+1BDjsmiz/0W9ZHv3NeCKiq94WfHW6Jj4mSjtGs7ZUBFq8JkkgYVsE9ktH1634wt9A9fbRg== dependencies: md5 "^2.3.0" @@ -663,10 +692,10 @@ jsonschema "^1.2.5" semver "^7.2.2" -"@aws-cdk/cloud-assembly-schema@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz#f1bbd8411ec320dd9e14ef2dce626a05019c42bc" - integrity sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw== +"@aws-cdk/cloud-assembly-schema@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.79.0.tgz#e089ed386f47b4e24e12e398b66d1df7894e5109" + integrity sha512-n2ARtOXIUq3FdJ1EBuHzsM0DQau6ZwHprPhpk1xc5bv21s7D5X5ECe06eC0K5xC5ZyfC13BDWu1f+xFh+krnYA== dependencies: jsonschema "^1.4.0" semver "^7.3.2" @@ -679,17 +708,17 @@ jsonschema "^1.4.0" semver "^7.3.2" -"@aws-cdk/cloudformation-diff@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.74.0.tgz#d86199db530f9df641cff7f3996939c47645d59f" - integrity sha512-aYAg85fkpX39euUo5HjsGtqOpyD5fAz1+jZ/F/5erA8Y/+rB4ifCVJH0cLYHVdYwo8oc3poB6jW4tVMxNYxbrg== +"@aws-cdk/cloudformation-diff@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.79.0.tgz#e26f2eaf93b26df14240c8704e056790aa0abe9b" + integrity sha512-GsX8Br7E0/2W2ugntO4zXodbApVi2C+AP/6QtTX6fasZbgZSwe8gjiXYPQ6EvtgjlWnYxPTn6vHRlb53vDFzMg== dependencies: - "@aws-cdk/cfnspec" "1.74.0" + "@aws-cdk/cfnspec" "1.79.0" colors "^1.4.0" diff "^5.0.0" fast-deep-equal "^3.1.3" string-width "^4.2.0" - table "^6.0.3" + table "^6.0.4" "@aws-cdk/core@1.56.0": version "1.56.0" @@ -713,14 +742,14 @@ fs-extra "^9.0.1" minimatch "^3.0.4" -"@aws-cdk/core@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.74.0.tgz#132d31c0ab9d39394827431ccd804cf10de34273" - integrity sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng== +"@aws-cdk/core@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.79.0.tgz#164b2f01877259eeb1ba16617be103522ae934d6" + integrity sha512-I+2GbQfbPy6TewnGbviE1W8cUhgBEA1mQLYm5gBj/Rzix1tCyaNvfYsBU3ipg3jIATpHsg1CzUq0zrumUnmnTg== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" "@balena/dockerignore" "^1.0.2" constructs "^3.2.0" fs-extra "^9.0.1" @@ -741,17 +770,17 @@ ignore "^5.1.8" minimatch "^3.0.4" -"@aws-cdk/custom-resources@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.74.0.tgz#19329e8a9b9bc0ca66e00c791b008c416a67265f" - integrity sha512-KDXgyRCeCMIj42nQcd2RXc4GYQpd7SWtx2iw0G4Wvs/wG4i3nR1qdlvEJvAlNgsYeqM4pp3mIp3PgdX341HsCg== - dependencies: - "@aws-cdk/aws-cloudformation" "1.74.0" - "@aws-cdk/aws-iam" "1.74.0" - "@aws-cdk/aws-lambda" "1.74.0" - "@aws-cdk/aws-logs" "1.74.0" - "@aws-cdk/aws-sns" "1.74.0" - "@aws-cdk/core" "1.74.0" +"@aws-cdk/custom-resources@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.79.0.tgz#2b68ee4e03a7d517693d0009e8380c045b968e90" + integrity sha512-+F4dpo/vju7kfNnajw9Fl2XwTmVG7qzYZ6weuKtfr0iFDHrBCZ5auGP45u8gHeNebnCdq51TNG9gskQ3ct5Aiw== + dependencies: + "@aws-cdk/aws-cloudformation" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/core" "1.79.0" constructs "^3.2.0" "@aws-cdk/custom-resources@1.83.0": @@ -784,12 +813,12 @@ "@aws-cdk/cloud-assembly-schema" "1.57.0" semver "^7.2.2" -"@aws-cdk/cx-api@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz#922c11389d723eadef2bc12666ced4980fe9e4cc" - integrity sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ== +"@aws-cdk/cx-api@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.79.0.tgz#c9770fdd9b14a64e7ef350aa020969902b8a182d" + integrity sha512-ymQOqHcPzYhrcQ4swMgw5JzAaOm+PehH1cepsxi/Wq2zNOXkyN9o6Hw6l+eDpezFvNIKFy4mMAo6FR9xRCUiow== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" semver "^7.3.2" "@aws-cdk/cx-api@1.83.0": @@ -805,20 +834,20 @@ resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.57.0.tgz#ae45fcf82fe7c66348c8b7ecfbb738dfb08bde9d" integrity sha512-U2V2f/PdD2VDGVwGGShb+7dqhmEEmShlOOdvDQvTmAg2SW6HwOt/rsz+va6EzvWV7fmxtFEfMiJVpnheZ1Vwyg== -"@aws-cdk/region-info@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.74.0.tgz#e53eabe2d8980c360e63ea956615253551005182" - integrity sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA== +"@aws-cdk/region-info@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.79.0.tgz#2a47339ca2dd48b9ecae46e985c8c3dcb83de577" + integrity sha512-klnXCc1Cd/krE4VOXJ1Blvey8ucPRzuwgGacPsCV2ugMSlaJSbdGqKzTUNxcK2o8g9PaEuJ5lNjfwqqyvp571g== "@aws-cdk/region-info@1.83.0": version "1.83.0" resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.83.0.tgz#aec59f22469192f19aa4df5f94f8d65cdd07d8e0" integrity sha512-5gwX1xhEPFb9eFFGNdHm99vSCJqrYIEvwIjFmoG8zpjV8TWtiY7D8WbhxED7Q2pejEMnuUtvmMXKgSH+lo6ung== -"@aws-cdk/yaml-cfn@1.74.0": - version "1.74.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/yaml-cfn/-/yaml-cfn-1.74.0.tgz#ea66da39391acf4d2f385845bb1c3466779bb90c" - integrity sha512-fJyS9apCC6lk3MHramd8Kjz4UwGWqM5gDRBci68Vs/nfXcpXY2ekHGjUMUfcel7VPobNKWszxWAMxXttAHa1zg== +"@aws-cdk/yaml-cfn@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/yaml-cfn/-/yaml-cfn-1.79.0.tgz#6d888417e8bd94bf192acfae19f7ab5e3ab75519" + integrity sha512-ABi7TSKtKl9iCN9F4OqxyDCJYGhKea8/QjLkGpZTFzi1wa512rAQBGSOrHxLvpdJFx7RH59oszrSd/kAGHwrgQ== dependencies: yaml "1.10.0" @@ -3217,7 +3246,7 @@ archiver-utils@^2.1.0: normalize-path "^3.0.0" readable-stream "^2.0.0" -archiver@^5.0.2: +archiver@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.1.0.tgz#05b0f6f7836f3e6356a0532763d2bb91017a7e37" integrity sha512-iKuQUP1nuKzBC2PFlGet5twENzCfyODmvkxwDV0cEFXavwcLrIW5ssTuHi9dyTPvpWr6Faweo2eQaQiLIwyXTA== @@ -3367,20 +3396,20 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -aws-cdk@1.74.0: - version "1.74.0" - resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-1.74.0.tgz#d049631ea578a8b75244b13a3028134ebb56add2" - integrity sha512-D4LKNlmvLHv+CWI/35Esaoij4v5VSqKyc+Gvnjhj1K3I4lG/AAxEy1CmRBhN/w1LJt70U9jnBpIsb6hGUlrV8A== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/cloudformation-diff" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - "@aws-cdk/yaml-cfn" "1.74.0" - archiver "^5.0.2" - aws-sdk "^2.792.0" +aws-cdk@1.79.0: + version "1.79.0" + resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-1.79.0.tgz#56521f87a6e9e6eafc940b39f9632d3bd95f4174" + integrity sha512-7cnEk963IUKbk0SiLEBH86MBl7TFvzYiJLaY/gyWp0hFGayd5C9RmJ/QDkw/caT5GIjYiGSnoyFWyMSV0o47fQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cloudformation-diff" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + "@aws-cdk/yaml-cfn" "1.79.0" + archiver "^5.1.0" + aws-sdk "^2.804.0" camelcase "^6.2.0" - cdk-assets "1.74.0" + cdk-assets "1.79.0" colors "^1.4.0" decamelize "^4.0.0" fs-extra "^9.0.1" @@ -3391,12 +3420,12 @@ aws-cdk@1.74.0: proxy-agent "^4.0.0" semver "^7.3.2" source-map-support "^0.5.19" - table "^6.0.3" + table "^6.0.4" uuid "^8.3.1" wrap-ansi "^7.0.0" - yargs "^16.1.1" + yargs "^16.2.0" -aws-sdk@^2.761.0, aws-sdk@^2.792.0: +aws-sdk@^2.761.0, aws-sdk@^2.804.0: version "2.823.0" resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.823.0.tgz#bbf7feaeb63959a451ec964b19cef6ea7128097a" integrity sha512-djrTmGu9MqsoUoaVRXjIjNPCfHBsrBBGFyZtgRhUGz9toa1ubZb2W2buUnT3ncws/bhOj5+7nO+qxAf/JzH9NA== @@ -3817,17 +3846,17 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -cdk-assets@1.74.0: - version "1.74.0" - resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.74.0.tgz#d70d5d5351181d91d9ee91791a858c2eb5d5e723" - integrity sha512-YF3nE1zAJU4dlWVnY30a4ALNzHhSTMMoAMv4bYkwXTLqzu+QB2v3MQdPpCLdGTGUYDaeRZy/Z/4R4MqM+/KPAA== +cdk-assets@1.79.0: + version "1.79.0" + resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-1.79.0.tgz#e786037816823a46a1beb8cd66f29598122b6bd5" + integrity sha512-sV0dD5KF16CYuJ38Paori/jVP1ORTTB3gnv2Gw8VqA3nTK0F8JyfzIxNLNuUKsKBl7ASvlt5ldDiA7RDQHmQBA== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - archiver "^5.0.2" - aws-sdk "^2.792.0" + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + archiver "^5.1.0" + aws-sdk "^2.804.0" glob "^7.1.6" - yargs "^16.1.1" + yargs "^16.2.0" chalk@^2.0.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" @@ -9436,20 +9465,20 @@ ssri@^7.0.0, ssri@^7.0.1: figgy-pudding "^3.5.1" minipass "^3.1.1" -sst-cdk@1.74.0-rc.6: - version "1.74.0-rc.6" - resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.74.0-rc.6.tgz#581a9c0ff8204a0f480c4cbe02b1f8ffd5b05180" - integrity sha512-VpDcqd1NOxSSwQ3Hk81YcWuDLscaRLzgGdgZ1UvA4EK2x66BPA8l1WHZesImQUKVsiqNB6115U4XNiUMCeWLIg== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.74.0" - "@aws-cdk/cloudformation-diff" "1.74.0" - "@aws-cdk/cx-api" "1.74.0" - "@aws-cdk/region-info" "1.74.0" - "@aws-cdk/yaml-cfn" "1.74.0" - archiver "^5.0.2" - aws-sdk "^2.792.0" +sst-cdk@1.79.0-rc.1: + version "1.79.0-rc.1" + resolved "https://registry.yarnpkg.com/sst-cdk/-/sst-cdk-1.79.0-rc.1.tgz#25111ce3c3b521710f20b3d6a47ee477313ed635" + integrity sha512-pg+4xuWqgEnpsixY68vXamCmr7OsVW10zSLt6IeorYBvPQphTxAPOgPC3OGwGUk48BVNVVMR5p2f3MIEtWSNEA== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.79.0" + "@aws-cdk/cloudformation-diff" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + "@aws-cdk/yaml-cfn" "1.79.0" + archiver "^5.1.0" + aws-sdk "^2.804.0" camelcase "^6.2.0" - cdk-assets "1.74.0" + cdk-assets "1.79.0" colors "^1.4.0" decamelize "^4.0.0" fs-extra "^9.0.1" @@ -9460,10 +9489,10 @@ sst-cdk@1.74.0-rc.6: proxy-agent "^4.0.0" semver "^7.3.2" source-map-support "^0.5.19" - table "^6.0.3" + table "^6.0.4" uuid "^8.3.1" wrap-ansi "^7.0.0" - yargs "^16.1.1" + yargs "^16.2.0" stack-trace@0.0.x: version "0.0.10" @@ -9715,7 +9744,7 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^6.0.3, table@^6.0.4: +table@^6.0.4: version "6.0.7" resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== @@ -10640,7 +10669,7 @@ yargs@^15.0.0, yargs@^15.3.1, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.1.1: +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== From 7ac5b1918cb9082b650660911fbe891565f4d7f2 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 6 Jan 2021 22:16:22 -0500 Subject: [PATCH 205/481] v1.0.0-alpha.6 --- lerna.json | 6 ++++-- packages/cli/package.json | 6 +++--- packages/cli/test/add-cdk/package.json | 4 ++-- packages/cli/test/base-ts/package.json | 6 +++--- packages/cli/test/base/package.json | 6 +++--- packages/cli/test/cdk-command/package.json | 6 +++--- packages/cli/test/config-invalid/package.json | 6 +++--- packages/cli/test/config-no-name/package.json | 6 +++--- packages/cli/test/config-no-type/package.json | 6 +++--- packages/cli/test/config-not-found/package.json | 6 +++--- packages/cli/test/config/package.json | 6 +++--- packages/cli/test/context/package.json | 6 +++--- packages/cli/test/eslint-ignore-rule/package.json | 6 +++--- packages/cli/test/eslint-ignore/package.json | 6 +++--- packages/cli/test/eslint-ts/package.json | 6 +++--- packages/cli/test/eslint/package.json | 6 +++--- packages/cli/test/handler-function-not-found/package.json | 6 +++--- packages/cli/test/handler-not-found/package.json | 6 +++--- packages/cli/test/jest-ts/package.json | 6 +++--- packages/cli/test/jest/package.json | 8 ++++---- packages/cli/test/mismatched-cdk-versions/package.json | 8 ++++---- packages/cli/test/stack-no-prefix/package.json | 8 ++++---- packages/cli/test/stack-set-env/package.json | 6 +++--- packages/cli/test/start-no-src-path/package.json | 6 +++--- packages/cli/test/start/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 28 files changed, 81 insertions(+), 79 deletions(-) diff --git a/lerna.json b/lerna.json index 0e6c64f5de..57ebdb5f3f 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,8 @@ { - "packages": ["packages/*"], + "packages": [ + "packages/*" + ], "npmClient": "yarn", "useWorkspaces": true, - "version": "1.0.0-alpha.5" + "version": "1.0.0-alpha.6" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 838da40707..169badb752 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "1.0.0-alpha.5", + "version": "1.0.0-alpha.6", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -45,8 +45,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5", + "@serverless-stack/core": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index 3c966f35df..866d46bbf3 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -2,13 +2,13 @@ "name": "add-cdk", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "add-cdk": "sst add-cdk" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index e9d5293f57..10a6e7db80 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -2,7 +2,7 @@ "name": "base-ts", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -14,8 +14,8 @@ "dependencies": { "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index 9308882418..6885d9d294 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -2,7 +2,7 @@ "name": "base", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -18,8 +18,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index 9974356da6..e8b07ccfd6 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -2,14 +2,14 @@ "name": "cdk-command", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "cdk": "sst cdk" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index 7adde81969..3828c02a62 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -2,14 +2,14 @@ "name": "config-invalid", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index 3b0c44e459..521d046bab 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -2,14 +2,14 @@ "name": "config-no-name", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/cli/test/config-no-type/package.json b/packages/cli/test/config-no-type/package.json index f3673caa1f..256d634d65 100644 --- a/packages/cli/test/config-no-type/package.json +++ b/packages/cli/test/config-no-type/package.json @@ -2,14 +2,14 @@ "name": "config-no-type", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index 37bcdf6914..dfd92c6962 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -2,14 +2,14 @@ "name": "config-not-found", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index 10bb95f4d4..10ffc0bee4 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -2,15 +2,15 @@ "name": "config-test", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index 2a89320f19..8fb47b2b52 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -2,15 +2,15 @@ "name": "context", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index ea3e0a49b8..0b94ee1c6b 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -2,14 +2,14 @@ "name": "eslint-ignore-rule", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index e312ede97d..2b3e419282 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -2,14 +2,14 @@ "name": "eslint-ignore", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index c89068a063..c10ea37419 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -2,14 +2,14 @@ "name": "eslint-ts", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index c814d95b65..92459758e6 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -2,14 +2,14 @@ "name": "eslint", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index d091620349..18b5285e50 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -2,14 +2,14 @@ "name": "handler-function-not-found", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index 44e5371b91..01f1a015f7 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -2,14 +2,14 @@ "name": "handler-not-found", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index 48c9d247d6..92cf8e734e 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -2,7 +2,7 @@ "name": "jest-ts", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -19,8 +19,8 @@ "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/aws-sqs": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index bfb1d8309f..ad33224d1d 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -2,7 +2,7 @@ "name": "jest", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "test": "sst test" @@ -13,10 +13,10 @@ ] }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5", "@aws-cdk/aws-dynamodb": "1.79.0", - "@aws-cdk/core": "1.79.0" + "@aws-cdk/core": "1.79.0", + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index d2e0983f0f..e48810c527 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -2,19 +2,19 @@ "name": "mismatched-cdk-versions", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5", "@aws-cdk/aws-cognito": "^1.55.0", "@aws-cdk/aws-dynamodb": "^1.55.0", "@aws-cdk/aws-iam": "1.57.0", "@aws-cdk/aws-s3": "^1.57.0", - "@aws-cdk/core": "1.56.0" + "@aws-cdk/core": "1.56.0", + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index 89c8106542..20bf25a948 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -2,15 +2,15 @@ "name": "stack-no-prefix", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5", - "@aws-cdk/core": "1.79.0" + "@aws-cdk/core": "1.79.0", + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index ce1f95cd94..451af1fee4 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -2,14 +2,14 @@ "name": "stack-set-env", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index d666d946e3..65677bb9f2 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -2,7 +2,7 @@ "name": "start-no-src-path", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -16,8 +16,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5", + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6", "mirrarray": "^2.0.0" }, "license": "ISC" diff --git a/packages/cli/test/start/package.json b/packages/cli/test/start/package.json index 1a273ec95f..33a1a4ee68 100644 --- a/packages/cli/test/start/package.json +++ b/packages/cli/test/start/package.json @@ -2,7 +2,7 @@ "name": "start", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.6", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -18,8 +18,8 @@ "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/core/package.json b/packages/core/package.json index fc035343ac..9292dec685 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "1.0.0-alpha.5", + "version": "1.0.0-alpha.6", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 1fdb6c5a0d..0b92fb478d 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "1.0.0-alpha.5", + "version": "1.0.0-alpha.6", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index aedede4634..d3695b89e9 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "1.0.0-alpha.5", + "version": "1.0.0-alpha.6", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 19ec22aeac1499cb9a9e00d12866ab3e39881777 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 6 Jan 2021 22:18:10 -0500 Subject: [PATCH 206/481] Updating npm ignore --- packages/cli/.npmignore | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/cli/.npmignore b/packages/cli/.npmignore index 6453e09014..6512c44ea9 100644 --- a/packages/cli/.npmignore +++ b/packages/cli/.npmignore @@ -1,3 +1,4 @@ +cdk.out node_modules test *.test.js From cdbc38ea6c2d4e6b4fe709773b3ecd6ed6694780 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 7 Jan 2021 01:34:05 -0500 Subject: [PATCH 207/481] Adding tests for sst start --- packages/cli/bin/scripts.js | 12 ++--- packages/cli/scripts/start.js | 44 +++++++++--------- .../dynamodb.js => jest-ts/lib/mystack.js} | 10 ++++- packages/cli/test/{start => jest-ts}/sst.json | 0 packages/cli/test/jest/lib/index.js | 6 +++ packages/cli/test/jest/lib/mystack.js | 38 ++++++++++++++++ packages/cli/test/jest/src/lambda.js | 3 ++ packages/cli/test/jest/sst.json | 6 +++ .../{dynamodb.test.js => mystack.test.js} | 6 +-- .../test/{start => start-base}/lib/index.js | 8 +--- .../test/{start => start-base}/package.json | 9 ++-- .../test/{start => start-base}/src/api/api.ts | 10 +++-- packages/cli/test/start-base/src/api/lib.ts | 3 ++ .../src/api/package.json | 0 .../src/api/tsconfig.json | 0 .../{start => start-base}/src/api/yarn.lock | 0 .../src/sns/sub-folder}/sns.js | 0 packages/cli/test/start-base/sst.json | 6 +++ .../cli/test/start-base/start-base.test.js | 45 +++++++++++++++++++ packages/cli/test/start/src/api/import.js | 1 - packages/cli/test/start/src/api/lib.ts | 3 -- 21 files changed, 156 insertions(+), 54 deletions(-) rename packages/cli/test/{jest/lib/dynamodb.js => jest-ts/lib/mystack.js} (80%) rename packages/cli/test/{start => jest-ts}/sst.json (100%) create mode 100644 packages/cli/test/jest/lib/index.js create mode 100644 packages/cli/test/jest/lib/mystack.js create mode 100644 packages/cli/test/jest/src/lambda.js create mode 100644 packages/cli/test/jest/sst.json rename packages/cli/test/jest/test/{dynamodb.test.js => mystack.test.js} (78%) rename packages/cli/test/{start => start-base}/lib/index.js (88%) rename packages/cli/test/{start => start-base}/package.json (73%) rename packages/cli/test/{start => start-base}/src/api/api.ts (77%) create mode 100644 packages/cli/test/start-base/src/api/lib.ts rename packages/cli/test/{start => start-base}/src/api/package.json (100%) rename packages/cli/test/{start => start-base}/src/api/tsconfig.json (100%) rename packages/cli/test/{start => start-base}/src/api/yarn.lock (100%) rename packages/cli/test/{start/src/sns => start-base/src/sns/sub-folder}/sns.js (100%) create mode 100644 packages/cli/test/start-base/sst.json create mode 100644 packages/cli/test/start-base/start-base.test.js delete mode 100644 packages/cli/test/start/src/api/import.js delete mode 100644 packages/cli/test/start/src/api/lib.ts diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index 73c9d5159f..58e4830103 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -202,15 +202,9 @@ switch (script) { } case cmd.cdk: case cmd.test: { - let promise = Promise.resolve(1); - - if (script === cmd.cdk) { - // Prepare app before running forked CDK commands - const cliInfo = getCliInfo(); - promise = prepareCdk(argv, cliInfo); - } - - promise.then(() => { + // Prepare app before running forked CDK commands + const cliInfo = getCliInfo(); + prepareCdk(argv, cliInfo).then(() => { const result = spawn.sync( "node", [require.resolve("../scripts/" + script)].concat(scriptArgs), diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index eccb3c6df5..0f306c3ada 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -83,16 +83,6 @@ const clientState = { const MOCK_SLOW_ESBUILD_RETRANSPILE_IN_MS = 0; const IS_TEST = process.env.__TEST__ === "true"; -process.on("uncaughtException", (err, origin) => { - logger.error("Unhandled Exception at:", err, "origin:", origin); -}); -process.on("unhandledRejection", (reason, promise) => { - logger.error("Unhandled Rejection at:", promise, "reason:", reason); -}); -process.on("rejectionHandled", (promise) => { - logger.error("Rejection Handled at:", promise); -}); - module.exports = async function (argv, cliInfo) { const config = await applyConfig(argv); @@ -112,7 +102,7 @@ module.exports = async function (argv, cliInfo) { async function deployDebugStack(argv, cliInfo, config) { // Do not deploy if running test if (IS_TEST) { - return; + return "ws://test-endpoint"; } const stackName = `${config.stage}-debug-stack`; @@ -215,14 +205,22 @@ async function startBuilder(cdkInputFiles) { const hasError = results.some((result) => result.status === "rejected"); if (hasError) { - Object.keys(builderState.entryPointsData).forEach((key) => { - if (builderState.entryPointsData[key].esbuilder !== null) { - builderState.entryPointsData[key].esbuilder.rebuild.dispose(); - } - }); + stopBuilder(); throw new Error("Error transpiling"); } + // Running inside test => stop builder + if (IS_TEST) { + const testOutputPath = path.join( + paths.appPath, + paths.appBuildDir, + "test-output.json" + ); + fs.writeFileSync(testOutputPath, JSON.stringify(builderState)); + stopBuilder(); + return; + } + // Validate transpiled const srcPaths = getAllSrcPaths(); if (srcPaths.length === 0) { @@ -238,7 +236,6 @@ async function startBuilder(cdkInputFiles) { // Run watcher const allInputFiles = getAllWatchedFiles(); - watcher = chokidar .watch(allInputFiles, chokidarOptions) .on("all", onFileChange) @@ -246,12 +243,13 @@ async function startBuilder(cdkInputFiles) { .on("ready", () => { builderLogger.debug(`Watcher ready for ${allInputFiles.length} files...`); }); - - // Terminate if running inside test - if (IS_TEST) { - console.log("===== IS_TEST DONE"); - return; - } +} +function stopBuilder() { + Object.keys(builderState.entryPointsData).forEach((key) => { + if (builderState.entryPointsData[key].esbuilder !== null) { + builderState.entryPointsData[key].esbuilder.rebuild.dispose(); + } + }); } async function updateBuilder() { builderLogger.silly(serializeState()); diff --git a/packages/cli/test/jest/lib/dynamodb.js b/packages/cli/test/jest-ts/lib/mystack.js similarity index 80% rename from packages/cli/test/jest/lib/dynamodb.js rename to packages/cli/test/jest-ts/lib/mystack.js index ba34d282a4..f25bc99b79 100644 --- a/packages/cli/test/jest/lib/dynamodb.js +++ b/packages/cli/test/jest-ts/lib/mystack.js @@ -4,12 +4,13 @@ import * as sst from "@serverless-stack/resources"; const service = "cdknotes"; -export default class DynamoDBStack extends sst.Stack { +export default class MyStack extends sst.Stack { constructor(scope, id, props) { super(scope, id, props); const stage = this.node.root.stage; + // Create a DynamoDb table const stageTableName = this.node.root.logicalPrefixedName("notes"); const table = new dynamodb.Table(this, stageTableName, { partitionKey: { name: "userId", type: dynamodb.AttributeType.STRING }, @@ -17,6 +18,13 @@ export default class DynamoDBStack extends sst.Stack { billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, }); + // Create a Lambda function + new sst.Function(this, "MyLambda", { + bundle: true, + srcPath: "src", + entry: "lambda.js", + }); + // Export values new CfnOutput(this, "notesTableName", { exportName: `${stage}-${service}-ExtNotesTableName`, diff --git a/packages/cli/test/start/sst.json b/packages/cli/test/jest-ts/sst.json similarity index 100% rename from packages/cli/test/start/sst.json rename to packages/cli/test/jest-ts/sst.json diff --git a/packages/cli/test/jest/lib/index.js b/packages/cli/test/jest/lib/index.js new file mode 100644 index 0000000000..a350c710e1 --- /dev/null +++ b/packages/cli/test/jest/lib/index.js @@ -0,0 +1,6 @@ +import MyStack from "./mystack"; + +// Add stacks +export default function main(app) { + new MyStack(app, "mystack"); +} diff --git a/packages/cli/test/jest/lib/mystack.js b/packages/cli/test/jest/lib/mystack.js new file mode 100644 index 0000000000..f25bc99b79 --- /dev/null +++ b/packages/cli/test/jest/lib/mystack.js @@ -0,0 +1,38 @@ +import { CfnOutput } from "@aws-cdk/core"; +import * as dynamodb from "@aws-cdk/aws-dynamodb"; +import * as sst from "@serverless-stack/resources"; + +const service = "cdknotes"; + +export default class MyStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + const stage = this.node.root.stage; + + // Create a DynamoDb table + const stageTableName = this.node.root.logicalPrefixedName("notes"); + const table = new dynamodb.Table(this, stageTableName, { + partitionKey: { name: "userId", type: dynamodb.AttributeType.STRING }, + sortKey: { name: "noteId", type: dynamodb.AttributeType.STRING }, + billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, + }); + + // Create a Lambda function + new sst.Function(this, "MyLambda", { + bundle: true, + srcPath: "src", + entry: "lambda.js", + }); + + // Export values + new CfnOutput(this, "notesTableName", { + exportName: `${stage}-${service}-ExtNotesTableName`, + value: table.tableName, + }); + new CfnOutput(this, "notesTableArn", { + exportName: `${stage}-${service}-ExtNotesTableArn`, + value: table.tableArn, + }); + } +} diff --git a/packages/cli/test/jest/src/lambda.js b/packages/cli/test/jest/src/lambda.js new file mode 100644 index 0000000000..d002cd6aae --- /dev/null +++ b/packages/cli/test/jest/src/lambda.js @@ -0,0 +1,3 @@ +export function handler() { + return "Hello World!"; +} diff --git a/packages/cli/test/jest/sst.json b/packages/cli/test/jest/sst.json new file mode 100644 index 0000000000..550b59d5db --- /dev/null +++ b/packages/cli/test/jest/sst.json @@ -0,0 +1,6 @@ +{ + "type": "@serverless-stack/resources", + "name": "cdknotes", + "stage": "prod", + "region": "us-east-1" +} diff --git a/packages/cli/test/jest/test/dynamodb.test.js b/packages/cli/test/jest/test/mystack.test.js similarity index 78% rename from packages/cli/test/jest/test/dynamodb.test.js rename to packages/cli/test/jest/test/mystack.test.js index 6a343b444f..d9a4962cf4 100644 --- a/packages/cli/test/jest/test/dynamodb.test.js +++ b/packages/cli/test/jest/test/mystack.test.js @@ -1,11 +1,11 @@ import { expect, haveResource } from "@aws-cdk/assert"; import * as sst from "@serverless-stack/resources"; -import DynamoDBStack from "../lib/dynamodb"; +import MyStack from "../lib/mystack"; -test("DynamoDB Stack", () => { +test("My Stack", () => { const app = new sst.App({ stage: "dev", region: "us-east-1" }); // WHEN - const stack = new DynamoDBStack(app, "MyTestStack"); + const stack = new MyStack(app, "MyTestStack"); // THEN try { expect(stack).to( diff --git a/packages/cli/test/start/lib/index.js b/packages/cli/test/start-base/lib/index.js similarity index 88% rename from packages/cli/test/start/lib/index.js rename to packages/cli/test/start-base/lib/index.js index cf58ca882a..7088a3b9bf 100644 --- a/packages/cli/test/start/lib/index.js +++ b/packages/cli/test/start-base/lib/index.js @@ -1,6 +1,5 @@ import * as cdk from "@aws-cdk/core"; import * as sns from "@aws-cdk/aws-sns"; -import * as lambda from "@aws-cdk/aws-lambda"; import * as apig from "@aws-cdk/aws-apigatewayv2"; import * as subscriptions from "@aws-cdk/aws-sns-subscriptions"; import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; @@ -18,10 +17,8 @@ class MySampleStack extends sst.Stack { // Create a Lambda function subscribed to the topic const snsFunc = new sst.Function(this, "MySnsLambda", { - entry: "sns.js", + entry: "sub-folder/sns.js", srcPath: "src/sns", - handler: "handler", - runtime: lambda.Runtime.NODEJS_12_X, }); topic.addSubscription(new subscriptions.LambdaSubscription(snsFunc)); @@ -30,8 +27,7 @@ class MySampleStack extends sst.Stack { bundle: true, entry: "api.ts", srcPath: "src/api", - handler: "handler", - runtime: lambda.Runtime.NODEJS_12_X, + handler: "main", timeout: cdk.Duration.seconds(10), environment: { TOPIC_ARN: topic.topicArn, diff --git a/packages/cli/test/start/package.json b/packages/cli/test/start-base/package.json similarity index 73% rename from packages/cli/test/start/package.json rename to packages/cli/test/start-base/package.json index 33a1a4ee68..625f387e0c 100644 --- a/packages/cli/test/start/package.json +++ b/packages/cli/test/start-base/package.json @@ -1,8 +1,8 @@ { - "name": "start", + "name": "start-base", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "0.0.1", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -14,12 +14,11 @@ "dependencies": { "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", - "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.5", + "@serverless-stack/resources": "^1.0.0-alpha.5" }, "license": "ISC" } diff --git a/packages/cli/test/start/src/api/api.ts b/packages/cli/test/start-base/src/api/api.ts similarity index 77% rename from packages/cli/test/start/src/api/api.ts rename to packages/cli/test/start-base/src/api/api.ts index 9fe9342dac..8ff1b568e5 100644 --- a/packages/cli/test/start/src/api/api.ts +++ b/packages/cli/test/start-base/src/api/api.ts @@ -3,12 +3,16 @@ import mirrarray from "mirrarray"; import { APIGatewayEvent } from "aws-lambda"; import str from "./lib"; -//import dummy from "./import"; const sns = new AWS.SNS(); -export async function handler(event: APIGatewayEvent) { - //dummy(); +interface APIResponse { + statusCode: number; + body: string; + headers: { [key: string]: string }; +} + +export async function main(event: APIGatewayEvent): Promise { console.log( `Logging from inside the API Lambda for route: ${event.routeKey}` ); diff --git a/packages/cli/test/start-base/src/api/lib.ts b/packages/cli/test/start-base/src/api/lib.ts new file mode 100644 index 0000000000..c304f24cd1 --- /dev/null +++ b/packages/cli/test/start-base/src/api/lib.ts @@ -0,0 +1,3 @@ +export default function (name: string): string { + return name; +} diff --git a/packages/cli/test/start/src/api/package.json b/packages/cli/test/start-base/src/api/package.json similarity index 100% rename from packages/cli/test/start/src/api/package.json rename to packages/cli/test/start-base/src/api/package.json diff --git a/packages/cli/test/start/src/api/tsconfig.json b/packages/cli/test/start-base/src/api/tsconfig.json similarity index 100% rename from packages/cli/test/start/src/api/tsconfig.json rename to packages/cli/test/start-base/src/api/tsconfig.json diff --git a/packages/cli/test/start/src/api/yarn.lock b/packages/cli/test/start-base/src/api/yarn.lock similarity index 100% rename from packages/cli/test/start/src/api/yarn.lock rename to packages/cli/test/start-base/src/api/yarn.lock diff --git a/packages/cli/test/start/src/sns/sns.js b/packages/cli/test/start-base/src/sns/sub-folder/sns.js similarity index 100% rename from packages/cli/test/start/src/sns/sns.js rename to packages/cli/test/start-base/src/sns/sub-folder/sns.js diff --git a/packages/cli/test/start-base/sst.json b/packages/cli/test/start-base/sst.json new file mode 100644 index 0000000000..550b59d5db --- /dev/null +++ b/packages/cli/test/start-base/sst.json @@ -0,0 +1,6 @@ +{ + "type": "@serverless-stack/resources", + "name": "cdknotes", + "stage": "prod", + "region": "us-east-1" +} diff --git a/packages/cli/test/start-base/start-base.test.js b/packages/cli/test/start-base/start-base.test.js new file mode 100644 index 0000000000..edf4452180 --- /dev/null +++ b/packages/cli/test/start-base/start-base.test.js @@ -0,0 +1,45 @@ +const fs = require("fs"); +const path = require("path"); +const { runStartCommand, clearBuildOutput } = require("../helpers"); +const paths = require("../../scripts/util/paths"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("start-base", async () => { + await runStartCommand(__dirname); + + const testOutputPath = path.join( + __dirname, + paths.appBuildDir, + "test-output.json" + ); + const testOutput = JSON.parse(fs.readFileSync(testOutputPath, "utf8")); + + expect(testOutput).toMatchObject({ + entryPointsData: { + "src/sns/sub-folder/sns.js/handler": { + outHandler: { + entry: "sub-folder/sns.js", + handler: "handler", + srcPath: "src/sns/.build", + }, + }, + "src/api/api.ts/main": { + outHandler: { + entry: "api.js", + handler: "main", + srcPath: "src/api/.build", + }, + }, + }, + }); +}); diff --git a/packages/cli/test/start/src/api/import.js b/packages/cli/test/start/src/api/import.js deleted file mode 100644 index ea9b101e1c..0000000000 --- a/packages/cli/test/start/src/api/import.js +++ /dev/null @@ -1 +0,0 @@ -export default function () {} diff --git a/packages/cli/test/start/src/api/lib.ts b/packages/cli/test/start/src/api/lib.ts deleted file mode 100644 index f3fb0892c5..0000000000 --- a/packages/cli/test/start/src/api/lib.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default function (name: number): string { - return name; -} From 51df6e3b6c6741ce77c58583e4f59aed66d06d49 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 7 Jan 2021 01:47:04 -0500 Subject: [PATCH 208/481] Fixing sst start did not handle entry with path --- packages/cli/scripts/start.js | 7 ++++++- packages/cli/test/start-base/start-base.test.js | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 0f306c3ada..e6930c6558 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -546,7 +546,12 @@ async function transpile(srcPath, entry, handler) { tsconfig, esbuilder, outHandler: { - entry: entry.split(".").slice(0, -1).concat(["js"]).join("."), + entry: path + .basename(entry) + .split(".") + .slice(0, -1) + .concat(["js"]) + .join("."), handler, srcPath: outSrcPath, }, diff --git a/packages/cli/test/start-base/start-base.test.js b/packages/cli/test/start-base/start-base.test.js index edf4452180..4e692e52a1 100644 --- a/packages/cli/test/start-base/start-base.test.js +++ b/packages/cli/test/start-base/start-base.test.js @@ -28,7 +28,7 @@ test("start-base", async () => { entryPointsData: { "src/sns/sub-folder/sns.js/handler": { outHandler: { - entry: "sub-folder/sns.js", + entry: "sns.js", handler: "handler", srcPath: "src/sns/.build", }, From b5d8bae39ba9dc3d1a7843dea19791467ab5f943 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 7 Jan 2021 02:31:02 -0500 Subject: [PATCH 209/481] Updating create-serverless-stack script --- .../lib/%stack-name.PascalCased%.template.js | 24 ++++++++++++++++++- .../javascript/package.template.json | 3 +++ .../resources/javascript/src/lambda.js | 7 ++++++ .../lib/%stack-name.PascalCased%.template.ts | 24 ++++++++++++++++++- .../typescript/package.template.json | 3 +++ .../resources/typescript/src/lambda.ts | 7 ++++++ 6 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 packages/create-serverless-stack/templates/resources/javascript/src/lambda.js create mode 100644 packages/create-serverless-stack/templates/resources/typescript/src/lambda.ts diff --git a/packages/create-serverless-stack/templates/resources/javascript/lib/%stack-name.PascalCased%.template.js b/packages/create-serverless-stack/templates/resources/javascript/lib/%stack-name.PascalCased%.template.js index f755e45d98..b3a684289b 100644 --- a/packages/create-serverless-stack/templates/resources/javascript/lib/%stack-name.PascalCased%.template.js +++ b/packages/create-serverless-stack/templates/resources/javascript/lib/%stack-name.PascalCased%.template.js @@ -1,9 +1,31 @@ +import * as cdk from "@aws-cdk/core"; +import * as apig from "@aws-cdk/aws-apigatewayv2"; +import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; + import * as sst from "@serverless-stack/resources"; export default class %stack-name.PascalCased% extends sst.Stack { constructor(scope, id, props) { super(scope, id, props); - // Define your stack + // Create a Lambda function triggered by an HTTP API + const lambda = new sst.Function(this, "Lambda", { + entry: "lambda.js", + srcPath: "src", + }); + + // Create the HTTP API + const api = new apig.HttpApi(this, "Api"); + api.addRoutes({ + path: "/", + integration: new apigIntegrations.LambdaProxyIntegration({ + handler: lambda, + }), + }); + + // Show API endpoint in output + new cdk.CfnOutput(this, "ApiEndpoint", { + value: api.apiEndpoint, + }); } } diff --git a/packages/create-serverless-stack/templates/resources/javascript/package.template.json b/packages/create-serverless-stack/templates/resources/javascript/package.template.json index 275463fe9e..074e87030c 100644 --- a/packages/create-serverless-stack/templates/resources/javascript/package.template.json +++ b/packages/create-serverless-stack/templates/resources/javascript/package.template.json @@ -4,6 +4,7 @@ "private": true, "scripts": { "test": "sst test", + "start": "sst start", "build": "sst build", "deploy": "sst deploy", "remove": "sst remove" @@ -14,6 +15,8 @@ "dependencies": { "@serverless-stack/cli": "%sst-version%", "@serverless-stack/resources": "%sst-version%", + "@aws-cdk/aws-apigatewayv2": "%cdk-version%", + "@aws-cdk/aws-apigatewayv2-integrations": "%cdk-version%", "@aws-cdk/core": "%cdk-version%" } } diff --git a/packages/create-serverless-stack/templates/resources/javascript/src/lambda.js b/packages/create-serverless-stack/templates/resources/javascript/src/lambda.js new file mode 100644 index 0000000000..3b26bcf3ee --- /dev/null +++ b/packages/create-serverless-stack/templates/resources/javascript/src/lambda.js @@ -0,0 +1,7 @@ +export async function handler() { + return { + statusCode: 200, + body: "Hello World!", + headers: { "Content-Type": "text/plain" }, + }; +} diff --git a/packages/create-serverless-stack/templates/resources/typescript/lib/%stack-name.PascalCased%.template.ts b/packages/create-serverless-stack/templates/resources/typescript/lib/%stack-name.PascalCased%.template.ts index 405e42a6e8..da1cd40654 100644 --- a/packages/create-serverless-stack/templates/resources/typescript/lib/%stack-name.PascalCased%.template.ts +++ b/packages/create-serverless-stack/templates/resources/typescript/lib/%stack-name.PascalCased%.template.ts @@ -1,9 +1,31 @@ +import * as cdk from "@aws-cdk/core"; +import * as apig from "@aws-cdk/aws-apigatewayv2"; +import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; + import * as sst from "@serverless-stack/resources"; export default class %stack-name.PascalCased% extends sst.Stack { constructor(scope: sst.App, id: string, props?: sst.StackProps) { super(scope, id, props); - // The code that defines your stack goes here + // Create a Lambda function triggered by an HTTP API + const lambda = new sst.Function(this, "Lambda", { + entry: "lambda.js", + srcPath: "src", + }); + + // Create the HTTP API + const api = new apig.HttpApi(this, "Api"); + api.addRoutes({ + path: "/", + integration: new apigIntegrations.LambdaProxyIntegration({ + handler: lambda, + }), + }); + + // Show API endpoint in output + new cdk.CfnOutput(this, "ApiEndpoint", { + value: api.apiEndpoint, + }); } } diff --git a/packages/create-serverless-stack/templates/resources/typescript/package.template.json b/packages/create-serverless-stack/templates/resources/typescript/package.template.json index 275463fe9e..074e87030c 100644 --- a/packages/create-serverless-stack/templates/resources/typescript/package.template.json +++ b/packages/create-serverless-stack/templates/resources/typescript/package.template.json @@ -4,6 +4,7 @@ "private": true, "scripts": { "test": "sst test", + "start": "sst start", "build": "sst build", "deploy": "sst deploy", "remove": "sst remove" @@ -14,6 +15,8 @@ "dependencies": { "@serverless-stack/cli": "%sst-version%", "@serverless-stack/resources": "%sst-version%", + "@aws-cdk/aws-apigatewayv2": "%cdk-version%", + "@aws-cdk/aws-apigatewayv2-integrations": "%cdk-version%", "@aws-cdk/core": "%cdk-version%" } } diff --git a/packages/create-serverless-stack/templates/resources/typescript/src/lambda.ts b/packages/create-serverless-stack/templates/resources/typescript/src/lambda.ts new file mode 100644 index 0000000000..3b26bcf3ee --- /dev/null +++ b/packages/create-serverless-stack/templates/resources/typescript/src/lambda.ts @@ -0,0 +1,7 @@ +export async function handler() { + return { + statusCode: 200, + body: "Hello World!", + headers: { "Content-Type": "text/plain" }, + }; +} From 8b2ba0e7564188d69b49cb2ed9d1c2e05553e7b3 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 7 Jan 2021 03:04:05 -0500 Subject: [PATCH 210/481] Updating build to .build in sst build copy --- packages/cli/scripts/build.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/scripts/build.js b/packages/cli/scripts/build.js index 05854dc832..cfe5bddde3 100644 --- a/packages/cli/scripts/build.js +++ b/packages/cli/scripts/build.js @@ -13,7 +13,7 @@ function printResults(results, usingYarn) { logger.info( `\nSuccessfully compiled ${l} ${stacksCopy} to ${chalk.cyan( - "build/cdk.out" + ".build/cdk.out" )}:\n` ); From c36acb75c8ce8097559e65d8da11419f3b466c42 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 7 Jan 2021 17:20:23 -0500 Subject: [PATCH 211/481] Fixing cdk code built twice when running deploy --- packages/cli/scripts/deploy.js | 47 ++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/packages/cli/scripts/deploy.js b/packages/cli/scripts/deploy.js index c59d292652..8ebf6c70ab 100644 --- a/packages/cli/scripts/deploy.js +++ b/packages/cli/scripts/deploy.js @@ -1,14 +1,21 @@ "use strict"; +const path = require("path"); const chalk = require("chalk"); -const { parallelDeploy } = require("./util/cdkHelpers"); +const paths = require("./util/paths"); +const { synth, parallelDeploy } = require("./util/cdkHelpers"); const { logger } = require("../lib/logger"); module.exports = async function (argv, config, cliInfo) { logger.info(chalk.grey("Deploying " + (argv.stack ? argv.stack : "stacks"))); - // Wait for deploy to complete + const cdkOutputPath = path.join(paths.appPath, paths.appBuildDir, "cdk.out"); + + // Build + await synth(cliInfo.cdkOptions); + + // Loop until deployment is complete let stackStates; let isCompleted; do { @@ -16,8 +23,10 @@ module.exports = async function (argv, config, cliInfo) { const prevEventCount = stackStates ? getEventCount(stackStates) : 0; // Update deploy status - const cdkOptions = { ...cliInfo.cdkOptions, stackName: argv.stack }; - const response = await parallelDeploy(cdkOptions, stackStates); + const response = await parallelDeploy( + { ...cliInfo.cdkOptions, stackName: argv.stack, cdkOutputPath }, + stackStates + ); stackStates = response.stackStates; isCompleted = response.isCompleted; @@ -35,6 +44,23 @@ module.exports = async function (argv, config, cliInfo) { } while (!isCompleted); // Print deploy result + printResults(stackStates); + + return stackStates.map((stackState) => ({ + name: stackState.name, + status: stackState.status, + outputs: stackState.outputs, + })); +}; + +function getEventCount(stackStates) { + return stackStates.reduce( + (acc, stackState) => acc + (stackState.events || []).length, + 0 + ); +} + +function printResults(stackStates) { stackStates.forEach(({ name, status, errorMessage, outputs, exports }) => { logger.info(`\nStack ${name}`); logger.info(` Status: ${formatStackStatus(status)}`); @@ -57,19 +83,6 @@ module.exports = async function (argv, config, cliInfo) { } }); logger.info(""); - - return stackStates.map((stackState) => ({ - name: stackState.name, - status: stackState.status, - outputs: stackState.outputs, - })); -}; - -function getEventCount(stackStates) { - return stackStates.reduce( - (acc, stackState) => acc + (stackState.events || []).length, - 0 - ); } function formatStackStatus(status) { From 54fbc7e386da37b45af1f6b1969374fe326ebf86 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 7 Jan 2021 20:52:46 -0500 Subject: [PATCH 212/481] Updating logger to respect --verbose flag --- packages/cli/bin/scripts.js | 9 ++- packages/cli/lib/logger.js | 96 +++++++++++-------------- packages/cli/scripts/start.js | 3 +- packages/cli/scripts/util/cdkHelpers.js | 6 -- 4 files changed, 52 insertions(+), 62 deletions(-) diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index 58e4830103..f2d360c7c2 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -13,13 +13,14 @@ process.on("unhandledRejection", (err) => { require("source-map-support").install(); -const fs = require("fs"); const path = require("path"); +const fs = require("fs-extra"); const yargs = require("yargs"); const chalk = require("chalk"); const spawn = require("cross-spawn"); const packageJson = require("../package.json"); +const { initializeLogger } = require("../lib/logger"); const paths = require("../scripts/util/paths"); const cdkOptions = require("../scripts/util/cdkOptions"); const { getCdkVersion } = require("@serverless-stack/core"); @@ -180,6 +181,12 @@ if (argv.verbose) { process.env.DEBUG = true; } +// Empty and recreate the .build directory +fs.emptyDirSync(paths.appBuildPath); + +// Initialize logger after .build diretory is created, in which the debug log will be written +initializeLogger(); + switch (script) { case cmd.build: case cmd.deploy: diff --git a/packages/cli/lib/logger.js b/packages/cli/lib/logger.js index 3c07481068..efe80e34ae 100644 --- a/packages/cli/lib/logger.js +++ b/packages/cli/lib/logger.js @@ -1,73 +1,63 @@ const { createLogger, format, transports } = require("winston"); -const jsonStringify = require('fast-safe-stringify'); -const LEVEL = Symbol.for("level"); +const jsonStringify = require("fast-safe-stringify"); const SPLAT = Symbol.for("splat"); const paths = require("../scripts/util/paths"); -const consoleLogFormat = format.printf( - ({ level, message, label, timestamp, [SPLAT]: splat, [LEVEL]: rawLevel }) => { +const consoleLogFormat = format.printf(({ message, label, [SPLAT]: splat }) => { + message = joinMessageAndSplat(message, splat); + + // handle label + // childLogger.info('hi') => [child] hi + message = label ? `[${label}] ${message}` : message; + + return message; +}); + +const fileLogFormat = format.printf( + ({ level, message, [SPLAT]: splat, label, timestamp }) => { message = joinMessageAndSplat(message, splat); - if (process.env.DEBUG) { - return label - ? `${timestamp} [${label}] ${level}: ${message}` - : `${timestamp} ${level}: ${message}`; - } else { - // logger.info('hi') => hi - // logger.warn('hi') => warn hi - // childLogger.warn('hi') => [child] warn hi - if (rawLevel === "info") { - return message; - } else { - return label - ? `[${label}] ${level} ${message}` - : `${level} ${message}`; - } - } + return label + ? `${timestamp} [${label}] ${level}: ${message}` + : `${timestamp} ${level}: ${message}`; } ); -const fileLogFormat = format.printf(({ level, message, [SPLAT]: splat, label, timestamp }) => { - message = joinMessageAndSplat(message, splat); - return label - ? `${timestamp} [${label}] ${level}: ${message}` - : `${timestamp} ${level}: ${message}`; +const consoleTransport = new transports.Console({ + level: "info", + format: format.combine(format.colorize(), consoleLogFormat), +}); + +const fileTransport = new transports.File({ + filename: `${paths.appBuildPath}/sst-debug.log`, + maxsize: 1024 * 1024 * 10, + maxFiles: 5, + tailable: true, + level: "silly", + format: format.combine(format.timestamp(), fileLogFormat), + handleExceptions: true, + handleRejections: true, }); const logger = createLogger({ - transports: [ - new transports.Console({ - level: process.env.DEBUG ? "debug" : "info", - format: format.combine( - format.colorize(), - format.timestamp(), - consoleLogFormat - ), - }), - ], + transports: [consoleTransport], }); -function addFileTransport() { - logger.add( - new transports.File({ - filename: `${paths.appBuildPath}/sst-debug.log`, - maxsize: 1024 * 1024 * 10, - maxFiles: 5, - tailable: true, - level: "silly", - format: format.combine(format.timestamp(), fileLogFormat), - handleExceptions: true, - handleRejections: true, - }) - ); -} +const initializeLogger = function () { + // Update level for console transport + consoleTransport.level = process.env.DEBUG ? "debug" : "info"; + + // Add file transport + logger.add(fileTransport); +}; function joinMessageAndSplat(message, splat) { - return [ message ].concat(splat || []) - .map(arg => typeof arg === 'string' ? arg : jsonStringify(arg)) - .join(' '); + return [message] + .concat(splat || []) + .map((arg) => (typeof arg === "string" ? arg : jsonStringify(arg))) + .join(" "); } module.exports = { - addFileTransport, logger, + initializeLogger, }; diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index e6930c6558..37a37d6c4f 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -19,10 +19,9 @@ const { bootstrap: cdkBootstrap, } = require("./util/cdkHelpers"); const array = require("../lib/array"); -const { logger, addFileTransport } = require("../lib/logger"); +const { logger } = require("../lib/logger"); // Setup logger -addFileTransport(); const clientLogger = logger.child({ label: "client" }); const builderLogger = logger.child({ label: "builder" }); diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index ae9623685a..44e0b93f6f 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -40,10 +40,6 @@ function exitWithMessage(message, shortMessage) { process.exit(1); } -async function createBuildPath() { - await fs.emptyDir(paths.appBuildPath); -} - async function getAppPackageJson() { const srcPath = paths.appPackageJson; @@ -338,8 +334,6 @@ async function writeConfig(config) { async function prepareCdk(argv, cliInfo, config) { let appliedConfig = config; - await createBuildPath(); - if (!config) { appliedConfig = await applyConfig(argv); } From bce25e64a76b11c03862f20496429254f26ba3c2 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 7 Jan 2021 20:56:56 -0500 Subject: [PATCH 213/481] Removing type from sst config --- packages/cli/scripts/util/cdkHelpers.js | 15 +-------------- packages/cli/test/base/sst.json | 1 - .../test/config-no-type/config-no-type.test.js | 18 ------------------ packages/cli/test/config-no-type/lib/index.js | 1 - packages/cli/test/config-no-type/package.json | 15 --------------- packages/cli/test/config-no-type/sst.json | 5 ----- .../cli/test/helpers/clear-build-output.js | 2 +- packages/create-serverless-stack/bin/index.js | 8 ++------ 8 files changed, 4 insertions(+), 61 deletions(-) delete mode 100644 packages/cli/test/config-no-type/config-no-type.test.js delete mode 100644 packages/cli/test/config-no-type/lib/index.js delete mode 100644 packages/cli/test/config-no-type/package.json delete mode 100644 packages/cli/test/config-no-type/sst.json diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index ae9623685a..e950c29afa 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -300,17 +300,6 @@ async function applyConfig(argv) { ); } - if (!config.type || config.type.trim() !== "@serverless-stack/resources") { - exitWithMessage( - `\nCannot detect the ${chalk.bold( - "type" - )} of Serverless Stack app. Make sure to set the following in your ${chalk.bold( - "sst.json" - )}.\n\n "type": "@serverless-stack/resources"\n`, - "Cannot detect the type of Serverless Stack app." - ); - } - if (!config.name || config.name.trim() === "") { exitWithMessage( `\nGive your Serverless Stack app a ${chalk.bold( @@ -328,9 +317,7 @@ async function applyConfig(argv) { } async function writeConfig(config) { - const type = config.type.trim(); - - logger.info(chalk.grey(`Preparing ${type}`)); + logger.info(chalk.grey("Preparing your SST app")); await fs.writeJson(path.join(paths.appBuildPath, "sst-merged.json"), config); } diff --git a/packages/cli/test/base/sst.json b/packages/cli/test/base/sst.json index 550b59d5db..9c8f7ed0ba 100644 --- a/packages/cli/test/base/sst.json +++ b/packages/cli/test/base/sst.json @@ -1,5 +1,4 @@ { - "type": "@serverless-stack/resources", "name": "cdknotes", "stage": "prod", "region": "us-east-1" diff --git a/packages/cli/test/config-no-type/config-no-type.test.js b/packages/cli/test/config-no-type/config-no-type.test.js deleted file mode 100644 index 80e9d31bdb..0000000000 --- a/packages/cli/test/config-no-type/config-no-type.test.js +++ /dev/null @@ -1,18 +0,0 @@ -const { runBuildCommand, clearBuildOutput } = require("../helpers"); - -beforeEach(async () => { - await clearBuildOutput(__dirname); -}); - -afterAll(async () => { - await clearBuildOutput(__dirname); -}); - -/** - * Test that the synth command ran successfully - */ -test("config-no-type", async () => { - const result = await runBuildCommand(__dirname); - - expect(result).toMatch(/Cannot detect the type of Serverless Stack app/); -}); diff --git a/packages/cli/test/config-no-type/lib/index.js b/packages/cli/test/config-no-type/lib/index.js deleted file mode 100644 index c857a02040..0000000000 --- a/packages/cli/test/config-no-type/lib/index.js +++ /dev/null @@ -1 +0,0 @@ -export default function main() {} diff --git a/packages/cli/test/config-no-type/package.json b/packages/cli/test/config-no-type/package.json deleted file mode 100644 index 256d634d65..0000000000 --- a/packages/cli/test/config-no-type/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "config-no-type", - "private": true, - "description": "tests", - "version": "1.0.0-alpha.6", - "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", - "build": "sst build" - }, - "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" - }, - "license": "ISC" -} diff --git a/packages/cli/test/config-no-type/sst.json b/packages/cli/test/config-no-type/sst.json deleted file mode 100644 index dc2fd52942..0000000000 --- a/packages/cli/test/config-no-type/sst.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "notes", - "stage": "prod", - "region": "us-west-1" -} diff --git a/packages/cli/test/helpers/clear-build-output.js b/packages/cli/test/helpers/clear-build-output.js index 94ba05e101..cb1d99afb7 100644 --- a/packages/cli/test/helpers/clear-build-output.js +++ b/packages/cli/test/helpers/clear-build-output.js @@ -5,7 +5,7 @@ const execPromise = promisify(exec); const TIMEOUT = 30000; async function clearBuildOutput(cwd) { - await execPromise("rm -rf build/", { + await execPromise("rm -rf .build/", { cwd, TIMEOUT, }); diff --git a/packages/create-serverless-stack/bin/index.js b/packages/create-serverless-stack/bin/index.js index 1966de9808..099beb3ad5 100755 --- a/packages/create-serverless-stack/bin/index.js +++ b/packages/create-serverless-stack/bin/index.js @@ -25,9 +25,6 @@ const cmd = { r: "resources", }; -const templateTypeCopy = { - resources: "Resources", -}; const languageTypeCopy = { javascript: "JavaScript", typescript: "TypeScript", @@ -97,11 +94,10 @@ const templatePath = path.join( ); (async function () { - const templateCopy = templateTypeCopy[templateType]; const languageCopy = languageTypeCopy[templateLanguage]; info( - `\nInitializing a new Serverless Stack ${templateCopy} ${languageCopy} project` + `\nInitializing a new Serverless Stack ${languageCopy} project` ); info(`Creating ${appName}/ directory`); @@ -237,7 +233,7 @@ function printSuccess() { console.log(" Deploy all your stacks and create your AWS resources"); console.log(""); console.log(" " + chalk.cyan(getUserCmd("remove"))); - console.log(" Remove all your stacks and all of their resources from AWS"); + console.log(" Remove all your stacks and all their resources from AWS"); console.log(""); console.log("Have fun!"); } From 357b03e359162794bba02617aa1527627d5046f9 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 7 Jan 2021 21:04:50 -0500 Subject: [PATCH 214/481] Scaffold new logger package --- packages/cli/package.json | 1 + packages/logger/index.js | 6 ++++++ packages/logger/package.json | 18 ++++++++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 packages/logger/index.js create mode 100644 packages/logger/package.json diff --git a/packages/cli/package.json b/packages/cli/package.json index 169badb752..0f0e5991f6 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -61,6 +61,7 @@ "fast-safe-stringify": "^2.0.6", "fs-extra": "^9.0.1", "jest": "^26.1.0", + "logger": "^1.0.0-alpha.6", "promise.allsettled": "^1.0.2", "source-map-support": "^0.5.19", "ts-jest": "^26.1.4", diff --git a/packages/logger/index.js b/packages/logger/index.js new file mode 100644 index 0000000000..5038104825 --- /dev/null +++ b/packages/logger/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function(str) { + console.log(str); +}; + diff --git a/packages/logger/package.json b/packages/logger/package.json new file mode 100644 index 0000000000..b271d2121e --- /dev/null +++ b/packages/logger/package.json @@ -0,0 +1,18 @@ +{ + "name": "logger", + "private": true, + "version": "1.0.0-alpha.6", + "homepage": "https://serverless-stack.com", + "description": "A logger package for Serverless Stack Toolkit.", + "main": "index.js", + "author": { + "name": "Anomaly Innovations", + "url": "https://anoma.ly" + }, + "repository": { + "type": "git", + "url": "https://github.com/serverless-stack/serverless-stack.git", + "directory": "packages/logger" + }, + "license": "MIT" +} From 52bdb4dbf410b2dba5fc061ead029207c0f6c838 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 7 Jan 2021 22:06:59 -0500 Subject: [PATCH 215/481] Adding logger for core --- packages/cli/bin/scripts.js | 4 +- packages/cli/lib/logger.js | 63 ------------------------- packages/cli/package.json | 1 - packages/cli/scripts/add-cdk.js | 3 +- packages/cli/scripts/build.js | 2 +- packages/cli/scripts/deploy.js | 3 +- packages/cli/scripts/remove.js | 2 +- packages/cli/scripts/start.js | 2 +- packages/cli/scripts/util/cdkHelpers.js | 2 +- packages/core/index.js | 46 +++++++++--------- packages/core/util/logger.js | 24 ---------- packages/logger/index.js | 58 ++++++++++++++++++++++- packages/logger/package.json | 6 ++- 13 files changed, 92 insertions(+), 124 deletions(-) delete mode 100644 packages/cli/lib/logger.js delete mode 100644 packages/core/util/logger.js diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index f2d360c7c2..686a1e4d39 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -18,9 +18,9 @@ const fs = require("fs-extra"); const yargs = require("yargs"); const chalk = require("chalk"); const spawn = require("cross-spawn"); +const { initializeLogger } = require("logger"); const packageJson = require("../package.json"); -const { initializeLogger } = require("../lib/logger"); const paths = require("../scripts/util/paths"); const cdkOptions = require("../scripts/util/cdkOptions"); const { getCdkVersion } = require("@serverless-stack/core"); @@ -185,7 +185,7 @@ if (argv.verbose) { fs.emptyDirSync(paths.appBuildPath); // Initialize logger after .build diretory is created, in which the debug log will be written -initializeLogger(); +initializeLogger(paths.appBuildPath); switch (script) { case cmd.build: diff --git a/packages/cli/lib/logger.js b/packages/cli/lib/logger.js deleted file mode 100644 index efe80e34ae..0000000000 --- a/packages/cli/lib/logger.js +++ /dev/null @@ -1,63 +0,0 @@ -const { createLogger, format, transports } = require("winston"); -const jsonStringify = require("fast-safe-stringify"); -const SPLAT = Symbol.for("splat"); -const paths = require("../scripts/util/paths"); - -const consoleLogFormat = format.printf(({ message, label, [SPLAT]: splat }) => { - message = joinMessageAndSplat(message, splat); - - // handle label - // childLogger.info('hi') => [child] hi - message = label ? `[${label}] ${message}` : message; - - return message; -}); - -const fileLogFormat = format.printf( - ({ level, message, [SPLAT]: splat, label, timestamp }) => { - message = joinMessageAndSplat(message, splat); - return label - ? `${timestamp} [${label}] ${level}: ${message}` - : `${timestamp} ${level}: ${message}`; - } -); - -const consoleTransport = new transports.Console({ - level: "info", - format: format.combine(format.colorize(), consoleLogFormat), -}); - -const fileTransport = new transports.File({ - filename: `${paths.appBuildPath}/sst-debug.log`, - maxsize: 1024 * 1024 * 10, - maxFiles: 5, - tailable: true, - level: "silly", - format: format.combine(format.timestamp(), fileLogFormat), - handleExceptions: true, - handleRejections: true, -}); - -const logger = createLogger({ - transports: [consoleTransport], -}); - -const initializeLogger = function () { - // Update level for console transport - consoleTransport.level = process.env.DEBUG ? "debug" : "info"; - - // Add file transport - logger.add(fileTransport); -}; - -function joinMessageAndSplat(message, splat) { - return [message] - .concat(splat || []) - .map((arg) => (typeof arg === "string" ? arg : jsonStringify(arg))) - .join(" "); -} - -module.exports = { - logger, - initializeLogger, -}; diff --git a/packages/cli/package.json b/packages/cli/package.json index 0f0e5991f6..a574533bab 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -66,7 +66,6 @@ "source-map-support": "^0.5.19", "ts-jest": "^26.1.4", "typescript": "^3.9.7", - "winston": "^3.3.3", "ws": "^7.4.0", "yargs": "^15.4.1" }, diff --git a/packages/cli/scripts/add-cdk.js b/packages/cli/scripts/add-cdk.js index 11d264c493..aa3db9ebab 100644 --- a/packages/cli/scripts/add-cdk.js +++ b/packages/cli/scripts/add-cdk.js @@ -2,8 +2,7 @@ const chalk = require("chalk"); const spawn = require("cross-spawn"); - -const { logger } = require("../lib/logger"); +const { logger } = require("logger"); module.exports = async function (argv, cliInfo) { const npm = cliInfo.npm; diff --git a/packages/cli/scripts/build.js b/packages/cli/scripts/build.js index cfe5bddde3..221e562b72 100644 --- a/packages/cli/scripts/build.js +++ b/packages/cli/scripts/build.js @@ -2,7 +2,7 @@ const chalk = require("chalk"); -const { logger } = require("../lib/logger"); +const { logger } = require("logger"); const { synth } = require("./util/cdkHelpers"); function printResults(results, usingYarn) { diff --git a/packages/cli/scripts/deploy.js b/packages/cli/scripts/deploy.js index 8ebf6c70ab..5f4f1ed9a6 100644 --- a/packages/cli/scripts/deploy.js +++ b/packages/cli/scripts/deploy.js @@ -2,11 +2,10 @@ const path = require("path"); const chalk = require("chalk"); +const { logger } = require("logger"); const paths = require("./util/paths"); const { synth, parallelDeploy } = require("./util/cdkHelpers"); -const { logger } = require("../lib/logger"); - module.exports = async function (argv, config, cliInfo) { logger.info(chalk.grey("Deploying " + (argv.stack ? argv.stack : "stacks"))); diff --git a/packages/cli/scripts/remove.js b/packages/cli/scripts/remove.js index b86c8236db..8457161ed6 100644 --- a/packages/cli/scripts/remove.js +++ b/packages/cli/scripts/remove.js @@ -2,11 +2,11 @@ const path = require("path"); const chalk = require("chalk"); +const { logger } = require("logger"); const { parallelDestroy } = require("@serverless-stack/core"); const paths = require("./util/paths"); const { destroy: cdkDestroy } = require("./util/cdkHelpers"); -const { logger } = require("../lib/logger"); module.exports = async function (argv, config, cliInfo) { const stackName = `${config.stage}-debug-stack`; diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 37a37d6c4f..0a2af7a87b 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -7,6 +7,7 @@ const WebSocket = require("ws"); const esbuild = require("esbuild"); const chokidar = require("chokidar"); const spawn = require("cross-spawn"); +const { logger } = require("logger"); const allSettled = require("promise.allsettled"); const sstDeploy = require("./deploy"); @@ -19,7 +20,6 @@ const { bootstrap: cdkBootstrap, } = require("./util/cdkHelpers"); const array = require("../lib/array"); -const { logger } = require("../lib/logger"); // Setup logger const clientLogger = logger.child({ label: "client" }); diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index 2e49cc8073..9783b37f7a 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -9,7 +9,7 @@ const sstCore = require("@serverless-stack/core"); const exec = util.promisify(require("child_process").exec); const paths = require("./paths"); -const { logger } = require("../../lib/logger"); +const { logger } = require("logger"); const { isSubProcessError } = require("../../lib/errors"); const buildDir = path.join(paths.appBuildPath, "lib"); diff --git a/packages/core/index.js b/packages/core/index.js index 263fc5e247..4da509a796 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -4,7 +4,7 @@ const cdk = require("sst-cdk"); const aws = require("aws-sdk"); const chalk = require("chalk"); -const logger = require("./util/logger"); +const { logger } = require("logger"); const packageJson = require("./package.json"); function getCdkVersion() { @@ -84,7 +84,7 @@ async function parallelDeploy(cdkOptions, stackStates) { stackState.status = STACK_DEPLOY_STATUS_UNCHANGED; stackState.endedAt = stackState.startedAt; hasSucceededStack = true; - logger.log( + logger.info( chalk.green(`\n ✅ ${stackState.name} (no changes)\n`) ); } else if (status === "no_resources") { @@ -92,7 +92,7 @@ async function parallelDeploy(cdkOptions, stackStates) { stackState.endedAt = stackState.startedAt; stackState.errorMessage = `The ${stackState.name} stack contains no resources.`; skipPendingStacks(); - logger.log( + logger.info( chalk.red( `\n ❌ ${chalk.bold(stackState.name)} failed: ${ stackState.errorMessage @@ -106,7 +106,7 @@ async function parallelDeploy(cdkOptions, stackStates) { stackState.endedAt = stackState.startedAt; stackState.errorMessage = `The ${stackState.name} stack failed to deploy.`; skipPendingStacks(); - logger.log( + logger.info( chalk.red( `\n ❌ ${chalk.bold(stackState.name)} failed: ${ stackState.errorMessage @@ -137,7 +137,7 @@ async function parallelDeploy(cdkOptions, stackStates) { stackState.endedAt = stackState.startedAt; stackState.errorMessage = bootstrapEx.message; skipPendingStacks(); - logger.log( + logger.info( chalk.red( `\n ❌ ${chalk.bold( stackState.name @@ -152,7 +152,7 @@ async function parallelDeploy(cdkOptions, stackStates) { stackState.endedAt = stackState.startedAt; stackState.errorMessage = deployEx.message; skipPendingStacks(); - logger.log( + logger.info( chalk.red( `\n ❌ ${chalk.bold(stackState.name)} failed: ${deployEx}\n` ) @@ -202,7 +202,7 @@ async function parallelDeploy(cdkOptions, stackStates) { if (isDeployed) { stackState.status = STACK_DEPLOY_STATUS_SUCCEEDED; stackState.endedAt = Date.now(); - logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); + logger.info(chalk.green(`\n ✅ ${stackState.name}\n`)); } } catch (statusEx) { logger.debug(statusEx); @@ -214,7 +214,7 @@ async function parallelDeploy(cdkOptions, stackStates) { stackState.errorMessage = stackState.eventsLatestErrorMessage || statusEx.message; skipPendingStacks(); - logger.log( + logger.info( chalk.red( `\n ❌ ${chalk.bold(stackState.name)} failed: ${ stackState.errorMessage @@ -352,7 +352,7 @@ async function parallelDeploy(cdkOptions, stackStates) { } // Print new events const statusColor = colorFromStatusResult(event.ResourceStatus); - logger.log( + logger.info( `${stackState.name}` + ` | ${statusColor(event.ResourceStatus || "")}` + ` | ${event.ResourceType}` + @@ -439,11 +439,11 @@ async function parallelDeploy(cdkOptions, stackStates) { })); } - logger.debug(`Initial stack states: ${JSON.stringify(stackStates)}`); + logger.silly(`Initial stack states: ${JSON.stringify(stackStates)}`); await updateDeployStatuses(); - logger.debug(`After update deploy statuses: ${JSON.stringify(stackStates)}`); + logger.silly(`After update deploy statuses: ${JSON.stringify(stackStates)}`); await deployStacks(); - logger.debug(`After deploy stacks: ${JSON.stringify(stackStates)}`); + logger.silly(`After deploy stacks: ${JSON.stringify(stackStates)}`); const isCompleted = stackStates.every( (stackState) => @@ -495,14 +495,14 @@ async function parallelDestroy(cdkOptions, stackStates) { if (status === "destroyed") { stackState.status = STACK_DESTROY_STATUS_SUCCEEDED; hasSucceededStack = true; - logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); + logger.info(chalk.green(`\n ✅ ${stackState.name}\n`)); } else if (status === "destroying") { stackState.status = STACK_DESTROY_STATUS_REMOVING; } else { stackState.status = STACK_DESTROY_STATUS_FAILED; stackState.errorMessage = `The ${stackState.name} stack failed to destroy.`; skipPendingStacks(); - logger.log( + logger.info( chalk.red( `\n ❌ ${chalk.bold(stackState.name)} failed: ${ stackState.errorMessage @@ -518,7 +518,7 @@ async function parallelDestroy(cdkOptions, stackStates) { stackState.status = STACK_DESTROY_STATUS_FAILED; stackState.errorMessage = e.message; skipPendingStacks(); - logger.log( + logger.info( chalk.red( `\n ❌ ${chalk.bold(stackState.name)} failed: ${e}\n` ) @@ -555,7 +555,7 @@ async function parallelDestroy(cdkOptions, stackStates) { } else if (isStackNotExistException(eventsEx)) { // ignore stackState.status = STACK_DESTROY_STATUS_SUCCEEDED; - logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); + logger.info(chalk.green(`\n ✅ ${stackState.name}\n`)); return; } // ignore error @@ -568,7 +568,7 @@ async function parallelDestroy(cdkOptions, stackStates) { if (isDestroyed) { stackState.status = STACK_DESTROY_STATUS_SUCCEEDED; - logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); + logger.info(chalk.green(`\n ✅ ${stackState.name}\n`)); } } catch (statusEx) { logger.debug(statusEx); @@ -576,13 +576,13 @@ async function parallelDestroy(cdkOptions, stackStates) { // retry } else if (isStackNotExistException(statusEx)) { stackState.status = STACK_DESTROY_STATUS_SUCCEEDED; - logger.log(chalk.green(`\n ✅ ${stackState.name}\n`)); + logger.info(chalk.green(`\n ✅ ${stackState.name}\n`)); } else { stackState.status = STACK_DESTROY_STATUS_FAILED; stackState.errorMessage = stackState.eventsLatestErrorMessage || statusEx.message; skipPendingStacks(); - logger.log( + logger.info( chalk.red( `\n ❌ ${chalk.bold(stackState.name)} failed: ${ stackState.errorMessage @@ -699,7 +699,7 @@ async function parallelDestroy(cdkOptions, stackStates) { } // Print new events const statusColor = colorFromStatusResult(event.ResourceStatus); - logger.log( + logger.info( `${stackState.name}` + ` | ${statusColor(event.ResourceStatus || "")}` + ` | ${event.ResourceType}` + @@ -790,11 +790,11 @@ async function parallelDestroy(cdkOptions, stackStates) { })); } - logger.debug(`Initial stack states: ${JSON.stringify(stackStates)}`); + logger.silly(`Initial stack states: ${JSON.stringify(stackStates)}`); await updateDestroyStatuses(); - logger.debug(`After update destroy statuses: ${JSON.stringify(stackStates)}`); + logger.silly(`After update destroy statuses: ${JSON.stringify(stackStates)}`); await destroyStacks(); - logger.debug(`After destroy stacks: ${JSON.stringify(stackStates)}`); + logger.silly(`After destroy stacks: ${JSON.stringify(stackStates)}`); const isCompleted = stackStates.every( (stackState) => diff --git a/packages/core/util/logger.js b/packages/core/util/logger.js deleted file mode 100644 index 675fe6577b..0000000000 --- a/packages/core/util/logger.js +++ /dev/null @@ -1,24 +0,0 @@ -const chalk = require("chalk"); - -function debug(message) { - if (!process.env.DEBUG) { - return; - } - console.debug(chalk.grey("debug ") + message); -} -function log(message) { - console.log(message); -} -function warn(message) { - console.warn(chalk.yellow("warn ") + message); -} -function error(message) { - console.error(chalk.red("error ") + message); -} - -module.exports = { - log, - warn, - debug, - error, -}; diff --git a/packages/logger/index.js b/packages/logger/index.js index 5038104825..9fccf7116e 100644 --- a/packages/logger/index.js +++ b/packages/logger/index.js @@ -1,6 +1,60 @@ "use strict"; -module.exports = function(str) { - console.log(str); +const path = require("path"); +const jsonStringify = require("fast-safe-stringify"); +const { createLogger, format, transports } = require("winston"); +const SPLAT = Symbol.for("splat"); + +const consoleLogFormat = format.printf(({ message, label, [SPLAT]: splat }) => { + return joinMessageAndSplat(message, splat); +}); + +const fileLogFormat = format.printf( + ({ level, message, [SPLAT]: splat, label, timestamp }) => { + message = joinMessageAndSplat(message, splat); + return label + ? `${timestamp} [${label}] ${level}: ${message}` + : `${timestamp} ${level}: ${message}`; + } +); + +const consoleTransport = new transports.Console({ + level: "info", + format: format.combine(format.colorize(), consoleLogFormat), +}); + +const logger = createLogger({ + transports: [ consoleTransport ], +}); + +const initializeLogger = function (appBuildPath) { + // Update level for console transport + consoleTransport.level = process.env.DEBUG ? "debug" : "info"; + + // Add file transport + logger.add( + new transports.File({ + filename: path.join(appBuildPath, 'sst-debug.log'), + maxsize: 1024 * 1024 * 10, + maxFiles: 5, + tailable: true, + level: "silly", + format: format.combine(format.timestamp(), fileLogFormat), + handleExceptions: true, + handleRejections: true, + }) + ); + }; +function joinMessageAndSplat(message, splat) { + return [message] + .concat(splat || []) + .map((arg) => (typeof arg === "string" ? arg : jsonStringify(arg))) + .join(" "); +} + +module.exports = { + logger, + initializeLogger, +}; diff --git a/packages/logger/package.json b/packages/logger/package.json index b271d2121e..33d8ff056a 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -14,5 +14,9 @@ "url": "https://github.com/serverless-stack/serverless-stack.git", "directory": "packages/logger" }, - "license": "MIT" + "license": "MIT", + "dependencies": { + "logger": "^1.0.0-alpha.6", + "winston": "^3.3.3" + } } From ac74ce02880f19b231be93421af0399c94b6d0c6 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 8 Jan 2021 15:48:27 -0500 Subject: [PATCH 216/481] Moving away from "resources" keyword --- packages/cli/scripts/util/cdkHelpers.js | 2 +- packages/create-serverless-stack/bin/index.js | 11 +++++------ .../{resources => }/javascript/.template.gitignore | 0 .../{resources => }/javascript/README.template.md | 0 .../lib/%stack-name.PascalCased%.template.js | 0 .../{resources => }/javascript/lib/index.template.js | 0 .../{resources => }/javascript/package.template.json | 0 .../{resources => }/javascript/src/lambda.js | 0 .../{resources => }/javascript/sst.template.json | 0 .../test/%stack-name.PascalCased%.test.template.js | 0 .../{resources => }/typescript/.template.gitignore | 0 .../{resources => }/typescript/README.template.md | 0 .../lib/%stack-name.PascalCased%.template.ts | 0 .../{resources => }/typescript/lib/index.template.ts | 0 .../{resources => }/typescript/package.template.json | 0 .../{resources => }/typescript/src/lambda.ts | 4 +++- .../{resources => }/typescript/sst.template.json | 0 .../test/%stack-name.PascalCased%.test.template.ts | 0 .../{resources => }/typescript/tsconfig.json | 0 19 files changed, 9 insertions(+), 8 deletions(-) rename packages/create-serverless-stack/templates/{resources => }/javascript/.template.gitignore (100%) rename packages/create-serverless-stack/templates/{resources => }/javascript/README.template.md (100%) rename packages/create-serverless-stack/templates/{resources => }/javascript/lib/%stack-name.PascalCased%.template.js (100%) rename packages/create-serverless-stack/templates/{resources => }/javascript/lib/index.template.js (100%) rename packages/create-serverless-stack/templates/{resources => }/javascript/package.template.json (100%) rename packages/create-serverless-stack/templates/{resources => }/javascript/src/lambda.js (100%) rename packages/create-serverless-stack/templates/{resources => }/javascript/sst.template.json (100%) rename packages/create-serverless-stack/templates/{resources => }/javascript/test/%stack-name.PascalCased%.test.template.js (100%) rename packages/create-serverless-stack/templates/{resources => }/typescript/.template.gitignore (100%) rename packages/create-serverless-stack/templates/{resources => }/typescript/README.template.md (100%) rename packages/create-serverless-stack/templates/{resources => }/typescript/lib/%stack-name.PascalCased%.template.ts (100%) rename packages/create-serverless-stack/templates/{resources => }/typescript/lib/index.template.ts (100%) rename packages/create-serverless-stack/templates/{resources => }/typescript/package.template.json (100%) rename packages/create-serverless-stack/templates/{resources => }/typescript/src/lambda.ts (50%) rename packages/create-serverless-stack/templates/{resources => }/typescript/sst.template.json (100%) rename packages/create-serverless-stack/templates/{resources => }/typescript/test/%stack-name.PascalCased%.test.template.ts (100%) rename packages/create-serverless-stack/templates/{resources => }/typescript/tsconfig.json (100%) diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index 2e49cc8073..c96f72a076 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -30,7 +30,7 @@ function exitWithMessage(message, shortMessage) { shortMessage = shortMessage || message; // Formatted error to grep - logger.debug(`SST Resources Error: ${shortMessage.trim()}`); + logger.debug(`SST Error: ${shortMessage.trim()}`); // Move newline before message if (message.indexOf("\n") === 0) { diff --git a/packages/create-serverless-stack/bin/index.js b/packages/create-serverless-stack/bin/index.js index 099beb3ad5..d337fd3131 100755 --- a/packages/create-serverless-stack/bin/index.js +++ b/packages/create-serverless-stack/bin/index.js @@ -31,12 +31,11 @@ const languageTypeCopy = { }; const argv = yargs - .usage(`${cmd.i} `) - .demandCommand(1) + .usage(`${cmd.i} [name]`) .command( - `${cmd.r} [name]`, - "Initialize a template for the resources in your Serverless Stack", + "* [name]", + "Initialize a template for your Serverless Stack app", function (yargs) { yargs.positional("name", { type: "string", @@ -79,7 +78,6 @@ const argv = yargs .parse(); const appName = argv.name; -const templateType = argv._[0]; const templateLanguage = argv.language; const useYarn = argv.useYarn; @@ -89,7 +87,6 @@ const cdkVersion = fs.readFileSync(path.join(paths.ownPath, "CDK_VERSION")); const appPath = path.join(paths.parentPath, appName); const templatePath = path.join( paths.ownTemplatesPath, - templateType, templateLanguage ); @@ -117,6 +114,8 @@ const templatePath = path.join( info("Installing packages"); +return; + // Install dependencies let cmd; let args; diff --git a/packages/create-serverless-stack/templates/resources/javascript/.template.gitignore b/packages/create-serverless-stack/templates/javascript/.template.gitignore similarity index 100% rename from packages/create-serverless-stack/templates/resources/javascript/.template.gitignore rename to packages/create-serverless-stack/templates/javascript/.template.gitignore diff --git a/packages/create-serverless-stack/templates/resources/javascript/README.template.md b/packages/create-serverless-stack/templates/javascript/README.template.md similarity index 100% rename from packages/create-serverless-stack/templates/resources/javascript/README.template.md rename to packages/create-serverless-stack/templates/javascript/README.template.md diff --git a/packages/create-serverless-stack/templates/resources/javascript/lib/%stack-name.PascalCased%.template.js b/packages/create-serverless-stack/templates/javascript/lib/%stack-name.PascalCased%.template.js similarity index 100% rename from packages/create-serverless-stack/templates/resources/javascript/lib/%stack-name.PascalCased%.template.js rename to packages/create-serverless-stack/templates/javascript/lib/%stack-name.PascalCased%.template.js diff --git a/packages/create-serverless-stack/templates/resources/javascript/lib/index.template.js b/packages/create-serverless-stack/templates/javascript/lib/index.template.js similarity index 100% rename from packages/create-serverless-stack/templates/resources/javascript/lib/index.template.js rename to packages/create-serverless-stack/templates/javascript/lib/index.template.js diff --git a/packages/create-serverless-stack/templates/resources/javascript/package.template.json b/packages/create-serverless-stack/templates/javascript/package.template.json similarity index 100% rename from packages/create-serverless-stack/templates/resources/javascript/package.template.json rename to packages/create-serverless-stack/templates/javascript/package.template.json diff --git a/packages/create-serverless-stack/templates/resources/javascript/src/lambda.js b/packages/create-serverless-stack/templates/javascript/src/lambda.js similarity index 100% rename from packages/create-serverless-stack/templates/resources/javascript/src/lambda.js rename to packages/create-serverless-stack/templates/javascript/src/lambda.js diff --git a/packages/create-serverless-stack/templates/resources/javascript/sst.template.json b/packages/create-serverless-stack/templates/javascript/sst.template.json similarity index 100% rename from packages/create-serverless-stack/templates/resources/javascript/sst.template.json rename to packages/create-serverless-stack/templates/javascript/sst.template.json diff --git a/packages/create-serverless-stack/templates/resources/javascript/test/%stack-name.PascalCased%.test.template.js b/packages/create-serverless-stack/templates/javascript/test/%stack-name.PascalCased%.test.template.js similarity index 100% rename from packages/create-serverless-stack/templates/resources/javascript/test/%stack-name.PascalCased%.test.template.js rename to packages/create-serverless-stack/templates/javascript/test/%stack-name.PascalCased%.test.template.js diff --git a/packages/create-serverless-stack/templates/resources/typescript/.template.gitignore b/packages/create-serverless-stack/templates/typescript/.template.gitignore similarity index 100% rename from packages/create-serverless-stack/templates/resources/typescript/.template.gitignore rename to packages/create-serverless-stack/templates/typescript/.template.gitignore diff --git a/packages/create-serverless-stack/templates/resources/typescript/README.template.md b/packages/create-serverless-stack/templates/typescript/README.template.md similarity index 100% rename from packages/create-serverless-stack/templates/resources/typescript/README.template.md rename to packages/create-serverless-stack/templates/typescript/README.template.md diff --git a/packages/create-serverless-stack/templates/resources/typescript/lib/%stack-name.PascalCased%.template.ts b/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts similarity index 100% rename from packages/create-serverless-stack/templates/resources/typescript/lib/%stack-name.PascalCased%.template.ts rename to packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts diff --git a/packages/create-serverless-stack/templates/resources/typescript/lib/index.template.ts b/packages/create-serverless-stack/templates/typescript/lib/index.template.ts similarity index 100% rename from packages/create-serverless-stack/templates/resources/typescript/lib/index.template.ts rename to packages/create-serverless-stack/templates/typescript/lib/index.template.ts diff --git a/packages/create-serverless-stack/templates/resources/typescript/package.template.json b/packages/create-serverless-stack/templates/typescript/package.template.json similarity index 100% rename from packages/create-serverless-stack/templates/resources/typescript/package.template.json rename to packages/create-serverless-stack/templates/typescript/package.template.json diff --git a/packages/create-serverless-stack/templates/resources/typescript/src/lambda.ts b/packages/create-serverless-stack/templates/typescript/src/lambda.ts similarity index 50% rename from packages/create-serverless-stack/templates/resources/typescript/src/lambda.ts rename to packages/create-serverless-stack/templates/typescript/src/lambda.ts index 3b26bcf3ee..c037139ff9 100644 --- a/packages/create-serverless-stack/templates/resources/typescript/src/lambda.ts +++ b/packages/create-serverless-stack/templates/typescript/src/lambda.ts @@ -1,4 +1,6 @@ -export async function handler() { +import { APIGatewayEvent } from "aws-lambda"; + +export async function handler(event: APIGatewayEvent): any { return { statusCode: 200, body: "Hello World!", diff --git a/packages/create-serverless-stack/templates/resources/typescript/sst.template.json b/packages/create-serverless-stack/templates/typescript/sst.template.json similarity index 100% rename from packages/create-serverless-stack/templates/resources/typescript/sst.template.json rename to packages/create-serverless-stack/templates/typescript/sst.template.json diff --git a/packages/create-serverless-stack/templates/resources/typescript/test/%stack-name.PascalCased%.test.template.ts b/packages/create-serverless-stack/templates/typescript/test/%stack-name.PascalCased%.test.template.ts similarity index 100% rename from packages/create-serverless-stack/templates/resources/typescript/test/%stack-name.PascalCased%.test.template.ts rename to packages/create-serverless-stack/templates/typescript/test/%stack-name.PascalCased%.test.template.ts diff --git a/packages/create-serverless-stack/templates/resources/typescript/tsconfig.json b/packages/create-serverless-stack/templates/typescript/tsconfig.json similarity index 100% rename from packages/create-serverless-stack/templates/resources/typescript/tsconfig.json rename to packages/create-serverless-stack/templates/typescript/tsconfig.json From d63efa967109b915292d599ea78f7abf6bc3927c Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 8 Jan 2021 16:05:31 -0500 Subject: [PATCH 217/481] Deprecating old resources keyword --- packages/create-serverless-stack/bin/index.js | 46 ++++++++----------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/packages/create-serverless-stack/bin/index.js b/packages/create-serverless-stack/bin/index.js index d337fd3131..f18b104e52 100755 --- a/packages/create-serverless-stack/bin/index.js +++ b/packages/create-serverless-stack/bin/index.js @@ -20,30 +20,31 @@ const camelCase = require("camelcase"); const paths = require("../config/paths"); -const cmd = { - i: "create-serverless-stack", - r: "resources", -}; +const cmd = "create-serverless-stack"; const languageTypeCopy = { javascript: "JavaScript", typescript: "TypeScript", }; +const commandDesc = "Initialize a template for your Serverless Stack app"; +const argBuilder = (yargs) => + yargs.positional("name", { + type: "string", + default: "my-sst-app", + describe: "The name of your Serverless Stack app", + }); + const argv = yargs - .usage(`${cmd.i} [name]`) - - .command( - "* [name]", - "Initialize a template for your Serverless Stack app", - function (yargs) { - yargs.positional("name", { - type: "string", - default: "my-sst-app", - describe: "The name of your Serverless Stack app", - }); - } - ) + .usage(`${cmd} [name]`) + + .command("* [name]", commandDesc, argBuilder) + .command({ + command: "resources [name]", + desc: commandDesc, + deprecated: true, + builder: argBuilder, + }) .option("use-yarn", { type: "boolean", @@ -85,17 +86,12 @@ const sstVersion = require("../package.json").version; const cdkVersion = fs.readFileSync(path.join(paths.ownPath, "CDK_VERSION")); const appPath = path.join(paths.parentPath, appName); -const templatePath = path.join( - paths.ownTemplatesPath, - templateLanguage -); +const templatePath = path.join(paths.ownTemplatesPath, templateLanguage); (async function () { const languageCopy = languageTypeCopy[templateLanguage]; - info( - `\nInitializing a new Serverless Stack ${languageCopy} project` - ); + info(`\nInitializing a new Serverless Stack ${languageCopy} project`); info(`Creating ${appName}/ directory`); @@ -114,8 +110,6 @@ const templatePath = path.join( info("Installing packages"); -return; - // Install dependencies let cmd; let args; From c6384025c4c1d1e13b3f04c0f86c904c604a6d77 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 8 Jan 2021 16:09:33 -0500 Subject: [PATCH 218/481] Fixing formatting --- lerna.json | 4 +--- packages/cli/test/base/cdk.context.json | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/lerna.json b/lerna.json index 57ebdb5f3f..4b35eb2c1f 100644 --- a/lerna.json +++ b/lerna.json @@ -1,7 +1,5 @@ { - "packages": [ - "packages/*" - ], + "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, "version": "1.0.0-alpha.6" diff --git a/packages/cli/test/base/cdk.context.json b/packages/cli/test/base/cdk.context.json index 391c9f9a49..ceb5f0afc5 100644 --- a/packages/cli/test/base/cdk.context.json +++ b/packages/cli/test/base/cdk.context.json @@ -2,4 +2,4 @@ "bootstrappedEnvs": { "aws://087220554750/us-west-1": true } -} \ No newline at end of file +} From 95b4c790f2c10d46a0f7ee1691fde10e869d53e5 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 8 Jan 2021 16:10:32 -0500 Subject: [PATCH 219/481] Adding prettier script --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index b2a3360054..a7cc3cbe95 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ ], "scripts": { "lint": "eslint . --fix --ext .js,.ts", + "prettier": "prettier --write **/*.{js,ts,json,md}", "changelog": "lerna-changelog", "release": "lerna publish --force-publish", "release-alpha": "lerna publish --force-publish --dist-tag alpha", From cf93fc0fc85cbf21d745a45d666e0eda2e65d46a Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 8 Jan 2021 20:42:31 -0500 Subject: [PATCH 220/481] Removing input files from tsc --- packages/cli/scripts/start.js | 2 +- packages/cli/scripts/util/cdkHelpers.js | 1 - packages/cli/test/start-base/package.json | 4 ++-- packages/cli/test/start-base/sst.json | 1 - packages/resources/src/util/builder.ts | 1 - 5 files changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 37a37d6c4f..b6fe1f4307 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -620,7 +620,7 @@ function typeCheck(srcPath) { const process = spawn( path.join(paths.appNodeModules, ".bin", "tsc"), - ["--noEmit", ...tsFiles], + ["--noEmit"], { stdio: "inherit", cwd: path.join(paths.appPath, srcPath), diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index c96f72a076..8dafbb8947 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -192,7 +192,6 @@ async function typeCheck(inputFiles) { path.join(paths.appNodeModules, ".bin", "tsc"), "--pretty", "--noEmit", - ...inputFiles, ].join(" "), { cwd: paths.appPath } ); diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index 625f387e0c..398c9fb62b 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -17,8 +17,8 @@ "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.5", - "@serverless-stack/resources": "^1.0.0-alpha.5" + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" }, "license": "ISC" } diff --git a/packages/cli/test/start-base/sst.json b/packages/cli/test/start-base/sst.json index 550b59d5db..9c8f7ed0ba 100644 --- a/packages/cli/test/start-base/sst.json +++ b/packages/cli/test/start-base/sst.json @@ -1,5 +1,4 @@ { - "type": "@serverless-stack/resources", "name": "cdknotes", "stage": "prod", "region": "us-east-1" diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index 2d7c269605..dc35d7a920 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -136,7 +136,6 @@ export function builder(builderProps: BuilderProps): BuilderOutput { path.join(appNodeModules, ".bin", "tsc"), "--pretty", "--noEmit", - ...inputFiles, ].join(" "), { cwd: srcPath } ); From eae08ebf070e8277bb514ce736d17288d9e2a0b8 Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 8 Jan 2021 22:40:04 -0500 Subject: [PATCH 221/481] Support --no-color flag in all packages --- packages/cli/assets/cdk-wrapper/run.js | 6 ++++++ packages/cli/bin/scripts.js | 8 +++++--- packages/cli/scripts/start.js | 22 ++++++++++++++-------- packages/cli/scripts/util/cdkHelpers.js | 4 +++- packages/resources/src/util/builder.ts | 4 +++- 5 files changed, 31 insertions(+), 13 deletions(-) diff --git a/packages/cli/assets/cdk-wrapper/run.js b/packages/cli/assets/cdk-wrapper/run.js index 6e8f773643..32b32d24b9 100644 --- a/packages/cli/assets/cdk-wrapper/run.js +++ b/packages/cli/assets/cdk-wrapper/run.js @@ -11,12 +11,18 @@ process.on("uncaughtException", function (err) { const fs = require("fs"); const path = require("path"); +const chalk = require("chalk"); const sst = require("@serverless-stack/resources"); const config = require("./sst-merged.json"); const appPath = process.cwd(); +// Disable color +if (process.env.NO_COLOR === 'true') { + chalk.level = 0; +} + // Check first and throw an error if (!fs.existsSync(path.join(__dirname, "lib", "index.js"))) { handlerNotFound(true); diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index 686a1e4d39..3437308ba8 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -64,7 +64,7 @@ function getCliInfo() { cdkOptions: { ...cdkOptions, verbose: argv.verbose ? 2 : 0, - noColor: argv.noColor || chalk.level === 0, + noColor: process.env.NO_COLOR === 'true', }, }; } @@ -173,12 +173,14 @@ const argv = yargs }) .parse(); -if (!process.stdout.isTTY) { +// Disable color +if (!process.stdout.isTTY || argv.noColor) { + process.env.NO_COLOR = 'true'; chalk.level = 0; } if (argv.verbose) { - process.env.DEBUG = true; + process.env.DEBUG = 'true'; } // Empty and recreate the .build directory diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 865fb7deb1..da94831841 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -190,7 +190,7 @@ async function startBuilder(cdkInputFiles) { initializeBuilderState(entryPoints, cdkInputFiles); // Run transpiler - builderLogger.info("Transpiling Lambda code..."); + builderLogger.info(chalk.grey("Transpiling Lambda code...")); esbuildService = await esbuild.startService(); const results = await Promise.allSettled( @@ -534,6 +534,7 @@ async function transpile(srcPath, entry, handler) { platform: "node", incremental: true, entryPoints: [fullPath], + color: process.env.NO_COLOR !== 'true', outdir: path.join(paths.appPath, outSrcPath), }; @@ -584,10 +585,11 @@ async function reTranspiler(srcPath, entry, handler) { function lint(srcPath) { const { inputFiles } = builderState.srcPathsData[srcPath]; - const process = spawn( + const cp = spawn( path.join(paths.appNodeModules, ".bin", "eslint"), [ "--no-error-on-unmatched-pattern", + process.env.NO_COLOR === "true" ? "--no-color" : "--color", "--config", path.join(paths.appBuildPath, ".eslintrc.internal.js"), path.join(paths.ownPath, "scripts", "util", ".eslintrc.internal.js"), @@ -603,12 +605,12 @@ function lint(srcPath) { { stdio: "inherit", cwd: path.join(paths.appPath, srcPath) } ); - process.on("close", (code) => { + cp.on("close", (code) => { builderLogger.debug(`linter exited with code ${code}`); onLintDone(srcPath); }); - return process; + return cp; } function typeCheck(srcPath) { const { inputFiles } = builderState.srcPathsData[srcPath]; @@ -618,21 +620,25 @@ function typeCheck(srcPath) { return null; } - const process = spawn( + const cp = spawn( path.join(paths.appNodeModules, ".bin", "tsc"), - ["--noEmit"], + [ + "--noEmit", + "--pretty", + process.env.NO_COLOR === "true" ? "false" : "true", + ], { stdio: "inherit", cwd: path.join(paths.appPath, srcPath), } ); - process.on("close", (code) => { + cp.on("close", (code) => { builderLogger.debug(`type checker exited with code ${code}`); onTypeCheckDone(srcPath); }); - return process; + return cp; } ///////////////////////////// diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index d1034bde17..1f383a2107 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -149,7 +149,7 @@ async function lint(inputFiles) { const { stdout, stderr } = await exec( [ path.join(paths.appNodeModules, ".bin", "eslint"), - "--color", + process.env.NO_COLOR === "true" ? "--no-color" : "--color", "--no-error-on-unmatched-pattern", "--config", path.join(paths.appBuildPath, ".eslintrc.internal.js"), @@ -191,6 +191,7 @@ async function typeCheck(inputFiles) { [ path.join(paths.appNodeModules, ".bin", "tsc"), "--pretty", + process.env.NO_COLOR === "true" ? "false" : "true", "--noEmit", ].join(" "), { cwd: paths.appPath } @@ -247,6 +248,7 @@ async function transpile(cliInfo) { outdir: buildDir, entryPoints: [entryPoint], tsconfig: isTs ? tsconfig : undefined, + color: process.env.NO_COLOR !== 'true', }); } catch (e) { logger.debug(e); diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index dc35d7a920..f5c74cd4ef 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -96,7 +96,7 @@ export function builder(builderProps: BuilderProps): BuilderOutput { const stdout = execSync( [ path.join(appNodeModules, ".bin", "eslint"), - "--color", + process.env.NO_COLOR === "true" ? "--no-color" : "--color", "--no-error-on-unmatched-pattern", "--config", path.join(appPath, buildDir, ".eslintrc.internal.js"), @@ -135,6 +135,7 @@ export function builder(builderProps: BuilderProps): BuilderOutput { [ path.join(appNodeModules, ".bin", "tsc"), "--pretty", + process.env.NO_COLOR === "true" ? "false" : "true", "--noEmit", ].join(" "), { cwd: srcPath } @@ -163,6 +164,7 @@ export function builder(builderProps: BuilderProps): BuilderOutput { platform: "node", outdir: buildPath, entryPoints: [entryPath], + color: process.env.NO_COLOR !== 'true', tsconfig: hasTsconfig ? tsconfig : undefined, }); From 589b3c1df0690682f557c140069c256ff0e7eeef Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 8 Jan 2021 22:45:50 -0500 Subject: [PATCH 222/481] Fixing lint error --- packages/logger/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/logger/index.js b/packages/logger/index.js index 9fccf7116e..cb8dcd1462 100644 --- a/packages/logger/index.js +++ b/packages/logger/index.js @@ -5,7 +5,7 @@ const jsonStringify = require("fast-safe-stringify"); const { createLogger, format, transports } = require("winston"); const SPLAT = Symbol.for("splat"); -const consoleLogFormat = format.printf(({ message, label, [SPLAT]: splat }) => { +const consoleLogFormat = format.printf(({ message, [SPLAT]: splat }) => { return joinMessageAndSplat(message, splat); }); From b22ff7bd573fab84a01e9584b9af4a9b77bc3023 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 8 Jan 2021 22:47:09 -0500 Subject: [PATCH 223/481] Adding tests for eslint ignore --- .eslintignore | 2 + .prettierignore | 4 ++ packages/cli/scripts/util/cdkHelpers.js | 1 - packages/cli/test/helpers/copy-symlinks.js | 3 ++ .../lambda-override-eslintrc/.eslintrc.json | 5 +++ .../lambda-override-eslintrc.test.js | 22 +++++++++++ .../lambda-override-eslintrc/lib/index.js | 37 ++++++++++++++++++ .../lambda-override-eslintrc/package.json | 19 ++++++++++ .../src/.eslintrc.json | 5 +++ .../lambda-override-eslintrc/src/lambda.js | 8 ++++ .../test/lambda-override-eslintrc/sst.json | 5 +++ .../lambda-override-tsconfig.test.js | 23 +++++++++++ .../lambda-override-tsconfig/lib/index.ts | 38 +++++++++++++++++++ .../lambda-override-tsconfig/package.json | 22 +++++++++++ .../lambda-override-tsconfig/src/lambda.ts | 11 ++++++ .../src/tsconfig.json | 21 ++++++++++ .../test/lambda-override-tsconfig/sst.json | 5 +++ .../lambda-override-tsconfig/tsconfig.json | 22 +++++++++++ packages/create-serverless-stack/bin/index.js | 1 + .../lib/%stack-name.PascalCased%.template.ts | 2 +- .../typescript/package.template.json | 3 +- .../templates/typescript/src/lambda.ts | 4 +- packages/resources/src/util/builder.ts | 8 ++-- yarn.lock | 5 +++ 24 files changed, 266 insertions(+), 10 deletions(-) create mode 100644 packages/cli/test/lambda-override-eslintrc/.eslintrc.json create mode 100644 packages/cli/test/lambda-override-eslintrc/lambda-override-eslintrc.test.js create mode 100644 packages/cli/test/lambda-override-eslintrc/lib/index.js create mode 100644 packages/cli/test/lambda-override-eslintrc/package.json create mode 100644 packages/cli/test/lambda-override-eslintrc/src/.eslintrc.json create mode 100644 packages/cli/test/lambda-override-eslintrc/src/lambda.js create mode 100644 packages/cli/test/lambda-override-eslintrc/sst.json create mode 100644 packages/cli/test/lambda-override-tsconfig/lambda-override-tsconfig.test.js create mode 100644 packages/cli/test/lambda-override-tsconfig/lib/index.ts create mode 100644 packages/cli/test/lambda-override-tsconfig/package.json create mode 100644 packages/cli/test/lambda-override-tsconfig/src/lambda.ts create mode 100644 packages/cli/test/lambda-override-tsconfig/src/tsconfig.json create mode 100644 packages/cli/test/lambda-override-tsconfig/sst.json create mode 100644 packages/cli/test/lambda-override-tsconfig/tsconfig.json diff --git a/.eslintignore b/.eslintignore index 6ff47e1f7f..7ce7c29cb3 100644 --- a/.eslintignore +++ b/.eslintignore @@ -21,4 +21,6 @@ cdk.out /packages/cli/test/eslint-ignore/** /packages/cli/test/eslint-ts/** /packages/cli/test/eslint/** +/packages/cli/test/lambda-override-tsconfig/** +/packages/cli/test/lambda-override-eslintrc/** /packages/cli/test/start/src/** diff --git a/.prettierignore b/.prettierignore index 337cd77a5a..d24d386838 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,7 @@ +# Ignore CDK outputs +cdk.out +# Ignore SST outputs +.build # Ignore templates /packages/create-serverless-stack/templates/** diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index d1034bde17..dd8e92ee99 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -171,7 +171,6 @@ async function lint(inputFiles) { logger.info(stderr); } } catch (e) { - console.log(e); logger.info(e.stdout); exitWithMessage("There was a problem linting the source."); } diff --git a/packages/cli/test/helpers/copy-symlinks.js b/packages/cli/test/helpers/copy-symlinks.js index fe5053f0aa..989af45fbe 100644 --- a/packages/cli/test/helpers/copy-symlinks.js +++ b/packages/cli/test/helpers/copy-symlinks.js @@ -26,6 +26,9 @@ const files = fs.readdirSync(rootBin, { }); files.forEach((file) => { + if (file.name !== "eslint" && file.name !== "tsc") { + return; + } if (file.isSymbolicLink()) { const name = file.name; const relPath = fs.readlinkSync(path.join(rootBin, name)); diff --git a/packages/cli/test/lambda-override-eslintrc/.eslintrc.json b/packages/cli/test/lambda-override-eslintrc/.eslintrc.json new file mode 100644 index 0000000000..a1294e008d --- /dev/null +++ b/packages/cli/test/lambda-override-eslintrc/.eslintrc.json @@ -0,0 +1,5 @@ +{ + "rules": { + "no-unused-vars": "off" + } +} diff --git a/packages/cli/test/lambda-override-eslintrc/lambda-override-eslintrc.test.js b/packages/cli/test/lambda-override-eslintrc/lambda-override-eslintrc.test.js new file mode 100644 index 0000000000..77473b6751 --- /dev/null +++ b/packages/cli/test/lambda-override-eslintrc/lambda-override-eslintrc.test.js @@ -0,0 +1,22 @@ +const { + runBuildCommand, + clearBuildOutput, + successRegex, +} = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the tsconfig inside the Lambda srcPath overrides the root tsconfig + */ +test("lambda-override-eslintrc", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).toMatch("2:9 error 'a' is assigned a value but never used"); +}); diff --git a/packages/cli/test/lambda-override-eslintrc/lib/index.js b/packages/cli/test/lambda-override-eslintrc/lib/index.js new file mode 100644 index 0000000000..08c6bd56bf --- /dev/null +++ b/packages/cli/test/lambda-override-eslintrc/lib/index.js @@ -0,0 +1,37 @@ +import * as cdk from "@aws-cdk/core"; +import * as apig from "@aws-cdk/aws-apigatewayv2"; +import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; + +import * as sst from "@serverless-stack/resources"; + +class ApiStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + const a = 1; + + // Create a Lambda function triggered by an HTTP API + const lambda = new sst.Function(this, "Lambda", { + entry: "lambda.js", + srcPath: "src", + }); + + // Create the HTTP API + const api = new apig.HttpApi(this, "Api"); + api.addRoutes({ + path: "/", + integration: new apigIntegrations.LambdaProxyIntegration({ + handler: lambda, + }), + }); + + // Show API endpoint in output + new cdk.CfnOutput(this, "ApiEndpoint", { + value: api.apiEndpoint, + }); + } +} + +export default function(app) { + new ApiStack(app, "api-stack"); +} diff --git a/packages/cli/test/lambda-override-eslintrc/package.json b/packages/cli/test/lambda-override-eslintrc/package.json new file mode 100644 index 0000000000..22032d6cb4 --- /dev/null +++ b/packages/cli/test/lambda-override-eslintrc/package.json @@ -0,0 +1,19 @@ +{ + "name": "lambda-override-eslintrc", + "private": true, + "description": "tests", + "version": "0.0.1", + "scripts": { + "postinstall": "node ../helpers/copy-symlinks.js", + "build": "sst build", + "start": "sst start" + }, + "dependencies": { + "@aws-cdk/aws-apigatewayv2": "1.79.0", + "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", + "@aws-cdk/core": "1.79.0", + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" + }, + "license": "ISC" +} diff --git a/packages/cli/test/lambda-override-eslintrc/src/.eslintrc.json b/packages/cli/test/lambda-override-eslintrc/src/.eslintrc.json new file mode 100644 index 0000000000..0eb0592cdb --- /dev/null +++ b/packages/cli/test/lambda-override-eslintrc/src/.eslintrc.json @@ -0,0 +1,5 @@ +{ + "rules": { + "no-unused-vars": "error" + } +} diff --git a/packages/cli/test/lambda-override-eslintrc/src/lambda.js b/packages/cli/test/lambda-override-eslintrc/src/lambda.js new file mode 100644 index 0000000000..54a5bc7889 --- /dev/null +++ b/packages/cli/test/lambda-override-eslintrc/src/lambda.js @@ -0,0 +1,8 @@ +export async function handler() { + const a = 1; + return { + statusCode: 200, + body: "Hello World!", + headers: { "Content-Type": "text/plain" }, + }; +} diff --git a/packages/cli/test/lambda-override-eslintrc/sst.json b/packages/cli/test/lambda-override-eslintrc/sst.json new file mode 100644 index 0000000000..9c8f7ed0ba --- /dev/null +++ b/packages/cli/test/lambda-override-eslintrc/sst.json @@ -0,0 +1,5 @@ +{ + "name": "cdknotes", + "stage": "prod", + "region": "us-east-1" +} diff --git a/packages/cli/test/lambda-override-tsconfig/lambda-override-tsconfig.test.js b/packages/cli/test/lambda-override-tsconfig/lambda-override-tsconfig.test.js new file mode 100644 index 0000000000..4654f03df5 --- /dev/null +++ b/packages/cli/test/lambda-override-tsconfig/lambda-override-tsconfig.test.js @@ -0,0 +1,23 @@ +const { + runBuildCommand, + clearBuildOutput, + successRegex, +} = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the tsconfig inside the Lambda srcPath overrides the root tsconfig + */ +test("lambda-override-tsconfig", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).not.toMatch("lib/index.ts:12:5 - error TS2322: Type 'null' is not assignable to type 'number'"); + expect(result).toMatch("lambda.ts(3,3): error TS2322: Type 'null' is not assignable to type 'number'"); +}); diff --git a/packages/cli/test/lambda-override-tsconfig/lib/index.ts b/packages/cli/test/lambda-override-tsconfig/lib/index.ts new file mode 100644 index 0000000000..b92d1fbed9 --- /dev/null +++ b/packages/cli/test/lambda-override-tsconfig/lib/index.ts @@ -0,0 +1,38 @@ +import * as cdk from "@aws-cdk/core"; +import * as apig from "@aws-cdk/aws-apigatewayv2"; +import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; + +import * as sst from "@serverless-stack/resources"; + +class ApiStack extends sst.Stack { + constructor(scope: sst.App, id: string, props?: sst.StackProps) { + super(scope, id, props); + + let x: number; // eslint-disable-line prefer-const + x = null; // eslint-disable-line prefer-const, @typescript-eslint/no-unused-vars + + // Create a Lambda function triggered by an HTTP API + const lambda = new sst.Function(this, "Lambda", { + entry: "lambda.ts", + srcPath: "src", + }); + + // Create the HTTP API + const api = new apig.HttpApi(this, "Api"); + api.addRoutes({ + path: "/", + integration: new apigIntegrations.LambdaProxyIntegration({ + handler: lambda, + }), + }); + + // Show API endpoint in output + new cdk.CfnOutput(this, "ApiEndpoint", { + value: api.apiEndpoint, + }); + } +} + +export default function (app: sst.App): void { + new ApiStack(app, "api-stack"); +} diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json new file mode 100644 index 0000000000..52c1c6611c --- /dev/null +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -0,0 +1,22 @@ +{ + "name": "lambda-override-tsconfig", + "private": true, + "description": "tests", + "version": "0.0.1", + "scripts": { + "postinstall": "node ../helpers/copy-symlinks.js", + "build": "sst build", + "start": "sst start" + }, + "dependencies": { + "@aws-cdk/aws-apigatewayv2": "1.79.0", + "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", + "@aws-cdk/core": "1.79.0", + "@serverless-stack/cli": "^1.0.0-alpha.6", + "@serverless-stack/resources": "^1.0.0-alpha.6" + }, + "license": "ISC", + "devDependencies": { + "@types/aws-lambda": "^8.10.70" + } +} diff --git a/packages/cli/test/lambda-override-tsconfig/src/lambda.ts b/packages/cli/test/lambda-override-tsconfig/src/lambda.ts new file mode 100644 index 0000000000..eac544bfe6 --- /dev/null +++ b/packages/cli/test/lambda-override-tsconfig/src/lambda.ts @@ -0,0 +1,11 @@ +import { APIGatewayProxyResult } from "aws-lambda"; + +export async function handler(): Promise { + let y: number; // eslint-disable-line prefer-const + y = null; // eslint-disable-line prefer-const, @typescript-eslint/no-unused-vars + return { + statusCode: 200, + body: "Hello World!", + headers: { "Content-Type": "text/plain" }, + }; +} diff --git a/packages/cli/test/lambda-override-tsconfig/src/tsconfig.json b/packages/cli/test/lambda-override-tsconfig/src/tsconfig.json new file mode 100644 index 0000000000..9d1973ade9 --- /dev/null +++ b/packages/cli/test/lambda-override-tsconfig/src/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "ES2018", + "module": "commonjs", + "lib": ["es2018"], + "declaration": true, + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "noImplicitThis": true, + "alwaysStrict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": false, + "inlineSourceMap": true, + "inlineSources": true, + "experimentalDecorators": true, + "strictPropertyInitialization": false + } +} diff --git a/packages/cli/test/lambda-override-tsconfig/sst.json b/packages/cli/test/lambda-override-tsconfig/sst.json new file mode 100644 index 0000000000..9c8f7ed0ba --- /dev/null +++ b/packages/cli/test/lambda-override-tsconfig/sst.json @@ -0,0 +1,5 @@ +{ + "name": "cdknotes", + "stage": "prod", + "region": "us-east-1" +} diff --git a/packages/cli/test/lambda-override-tsconfig/tsconfig.json b/packages/cli/test/lambda-override-tsconfig/tsconfig.json new file mode 100644 index 0000000000..415acf9843 --- /dev/null +++ b/packages/cli/test/lambda-override-tsconfig/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ES2018", + "module": "commonjs", + "lib": ["es2018"], + "declaration": true, + "strict": true, + "noImplicitAny": true, + "strictNullChecks": false, + "noImplicitThis": true, + "alwaysStrict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": false, + "inlineSourceMap": true, + "inlineSources": true, + "experimentalDecorators": true, + "strictPropertyInitialization": false, + "typeRoots": ["./node_modules/@types"] + } +} diff --git a/packages/create-serverless-stack/bin/index.js b/packages/create-serverless-stack/bin/index.js index f18b104e52..327896f902 100755 --- a/packages/create-serverless-stack/bin/index.js +++ b/packages/create-serverless-stack/bin/index.js @@ -39,6 +39,7 @@ const argv = yargs .usage(`${cmd} [name]`) .command("* [name]", commandDesc, argBuilder) + // TODO: Remove deprecated command later .command({ command: "resources [name]", desc: commandDesc, diff --git a/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts b/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts index da1cd40654..8a1ea3557c 100644 --- a/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts +++ b/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts @@ -10,7 +10,7 @@ export default class %stack-name.PascalCased% extends sst.Stack { // Create a Lambda function triggered by an HTTP API const lambda = new sst.Function(this, "Lambda", { - entry: "lambda.js", + entry: "lambda.ts", srcPath: "src", }); diff --git a/packages/create-serverless-stack/templates/typescript/package.template.json b/packages/create-serverless-stack/templates/typescript/package.template.json index 074e87030c..5d6845d17e 100644 --- a/packages/create-serverless-stack/templates/typescript/package.template.json +++ b/packages/create-serverless-stack/templates/typescript/package.template.json @@ -10,7 +10,8 @@ "remove": "sst remove" }, "devDependencies": { - "@aws-cdk/assert": "%cdk-version%" + "@aws-cdk/assert": "%cdk-version%", + "@types/aws-lambda": "^8.10.70" }, "dependencies": { "@serverless-stack/cli": "%sst-version%", diff --git a/packages/create-serverless-stack/templates/typescript/src/lambda.ts b/packages/create-serverless-stack/templates/typescript/src/lambda.ts index c037139ff9..66909a498e 100644 --- a/packages/create-serverless-stack/templates/typescript/src/lambda.ts +++ b/packages/create-serverless-stack/templates/typescript/src/lambda.ts @@ -1,6 +1,6 @@ -import { APIGatewayEvent } from "aws-lambda"; +import { APIGatewayProxyResult } from "aws-lambda"; -export async function handler(event: APIGatewayEvent): any { +export async function handler(): Promise { return { statusCode: 200, body: "Hello World!", diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index dc35d7a920..328daa861d 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -132,11 +132,9 @@ export function builder(builderProps: BuilderProps): BuilderOutput { try { const stdout = execSync( - [ - path.join(appNodeModules, ".bin", "tsc"), - "--pretty", - "--noEmit", - ].join(" "), + [path.join(appNodeModules, ".bin", "tsc"), "--pretty", "--noEmit"].join( + " " + ), { cwd: srcPath } ); const output = stdout.toString(); diff --git a/yarn.lock b/yarn.lock index b1aea20089..79628238bd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2829,6 +2829,11 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@types/aws-lambda@^8.10.70": + version "8.10.70" + resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.70.tgz#1d1c79730669b337208e3476f7a16150d43fcaf5" + integrity sha512-adaPn39OKMIzCxaf2KHBu4d3MJKLGdm27zxAyag+rAI1UTwgtgEgrwRpuzN1NDMZn/i6vRxJZRbsSmlw7I0/Sg== + "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.12" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" From 9488f0e1f7054a4fce31eb4f74210f35c69e2a02 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 8 Jan 2021 23:02:45 -0500 Subject: [PATCH 224/481] Fixing test --- .../lambda-override-tsconfig/lambda-override-tsconfig.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/test/lambda-override-tsconfig/lambda-override-tsconfig.test.js b/packages/cli/test/lambda-override-tsconfig/lambda-override-tsconfig.test.js index 4654f03df5..26d1a66fe8 100644 --- a/packages/cli/test/lambda-override-tsconfig/lambda-override-tsconfig.test.js +++ b/packages/cli/test/lambda-override-tsconfig/lambda-override-tsconfig.test.js @@ -19,5 +19,5 @@ test("lambda-override-tsconfig", async () => { const result = await runBuildCommand(__dirname); expect(result).not.toMatch("lib/index.ts:12:5 - error TS2322: Type 'null' is not assignable to type 'number'"); - expect(result).toMatch("lambda.ts(3,3): error TS2322: Type 'null' is not assignable to type 'number'"); + expect(result).toMatch("lambda.ts(5,3): error TS2322: Type 'null' is not assignable to type 'number'"); }); From 6ba0ac482bb762417ae6210d269ba3e96442375d Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 9 Jan 2021 16:03:07 -0500 Subject: [PATCH 225/481] Updating esbuild. Fixing create CLI copy. --- packages/cli/package.json | 2 +- packages/create-serverless-stack/bin/index.js | 16 +++++++++------- packages/resources/package.json | 2 +- yarn.lock | 2 +- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index a574533bab..e32262133a 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -56,7 +56,7 @@ "chokidar": "^3.4.3", "core-js": "^3.6.5", "cross-spawn": "^7.0.3", - "esbuild": "^0.8.26", + "esbuild": "^0.8.31", "eslint": "^7.16.0", "fast-safe-stringify": "^2.0.6", "fs-extra": "^9.0.1", diff --git a/packages/create-serverless-stack/bin/index.js b/packages/create-serverless-stack/bin/index.js index 327896f902..c3b15b9363 100755 --- a/packages/create-serverless-stack/bin/index.js +++ b/packages/create-serverless-stack/bin/index.js @@ -138,8 +138,7 @@ const templatePath = path.join(paths.ownTemplatesPath, templateLanguage); })(); function getUserCmd(action) { - const run = action === "test" ? "" : "run "; - return useYarn ? `yarn ${run}${action}` : `npm ${run}${action}`; + return useYarn ? `yarn run ${action}` : `npm run ${action}`; } /* eslint-disable no-unused-vars */ @@ -210,12 +209,10 @@ function copyFiles(sourceDirectory, targetDirectory) { function printSuccess() { console.log(`Success! Created ${appName} in ${appPath}`); + console.log("You can run:"); console.log(""); - console.log("To get started:"); - console.log(""); - console.log(" " + chalk.cyan("cd ") + appName); - console.log(""); - console.log("And run:"); + console.log(" " + chalk.cyan(getUserCmd("start"))); + console.log(" Start the local development environment"); console.log(""); console.log(" " + chalk.cyan(getUserCmd("test"))); console.log(" Run your tests"); @@ -229,5 +226,10 @@ function printSuccess() { console.log(" " + chalk.cyan(getUserCmd("remove"))); console.log(" Remove all your stacks and all their resources from AWS"); console.log(""); + console.log("To get started:"); + console.log(""); + console.log(" " + chalk.cyan("cd ") + appName); + console.log(" " + chalk.cyan(getUserCmd("start"))); + console.log(""); console.log("Have fun!"); } diff --git a/packages/resources/package.json b/packages/resources/package.json index d3695b89e9..3eb0e84c4f 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -29,7 +29,7 @@ "@aws-cdk/aws-lambda-nodejs": "1.79.0", "@aws-cdk/core": "1.79.0", "chalk": "^4.1.0", - "esbuild": "^0.8.26", + "esbuild": "^0.8.31", "eslint": "^7.16.0", "fs-extra": "^9.0.1", "typescript": "^3.9.7" diff --git a/yarn.lock b/yarn.lock index 79628238bd..ee758dcb71 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4842,7 +4842,7 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -esbuild@^0.8.26: +esbuild@^0.8.31: version "0.8.31" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.8.31.tgz#c21e7adb3ad283c951a53de7ad64a5ae2df2ed34" integrity sha512-7EIU0VdUxltwivjVezX3HgeNzeIVR1snkrAo57WdUnuBMykdzin5rTrxwCDM6xQqj0RL/HjOEm3wFr2ijHKeaA== From 605b77b7db9739316110e8988579e56f3784c7ed Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 9 Jan 2021 16:04:14 -0500 Subject: [PATCH 226/481] v1.0.0-alpha.7 --- lerna.json | 6 ++++-- packages/cli/package.json | 8 ++++---- packages/cli/test/add-cdk/package.json | 4 ++-- packages/cli/test/base-ts/package.json | 6 +++--- packages/cli/test/base/package.json | 6 +++--- packages/cli/test/cdk-command/package.json | 6 +++--- packages/cli/test/config-invalid/package.json | 6 +++--- packages/cli/test/config-no-name/package.json | 6 +++--- packages/cli/test/config-not-found/package.json | 6 +++--- packages/cli/test/config/package.json | 6 +++--- packages/cli/test/context/package.json | 6 +++--- packages/cli/test/eslint-ignore-rule/package.json | 6 +++--- packages/cli/test/eslint-ignore/package.json | 6 +++--- packages/cli/test/eslint-ts/package.json | 6 +++--- packages/cli/test/eslint/package.json | 6 +++--- packages/cli/test/handler-function-not-found/package.json | 6 +++--- packages/cli/test/handler-not-found/package.json | 6 +++--- packages/cli/test/jest-ts/package.json | 6 +++--- packages/cli/test/jest/package.json | 6 +++--- packages/cli/test/lambda-override-eslintrc/package.json | 6 +++--- packages/cli/test/lambda-override-tsconfig/package.json | 6 +++--- packages/cli/test/mismatched-cdk-versions/package.json | 6 +++--- packages/cli/test/stack-no-prefix/package.json | 6 +++--- packages/cli/test/stack-set-env/package.json | 6 +++--- packages/cli/test/start-base/package.json | 6 +++--- packages/cli/test/start-no-src-path/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/logger/package.json | 4 ++-- packages/resources/package.json | 2 +- 30 files changed, 84 insertions(+), 82 deletions(-) diff --git a/lerna.json b/lerna.json index 4b35eb2c1f..5cfa05235a 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,8 @@ { - "packages": ["packages/*"], + "packages": [ + "packages/*" + ], "npmClient": "yarn", "useWorkspaces": true, - "version": "1.0.0-alpha.6" + "version": "1.0.0-alpha.7" } diff --git a/packages/cli/package.json b/packages/cli/package.json index e32262133a..d605e47ccf 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -45,8 +45,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6", + "@serverless-stack/core": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", @@ -61,7 +61,7 @@ "fast-safe-stringify": "^2.0.6", "fs-extra": "^9.0.1", "jest": "^26.1.0", - "logger": "^1.0.0-alpha.6", + "logger": "^1.0.0-alpha.7", "promise.allsettled": "^1.0.2", "source-map-support": "^0.5.19", "ts-jest": "^26.1.4", diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index 866d46bbf3..a4890617db 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -2,13 +2,13 @@ "name": "add-cdk", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "add-cdk": "sst add-cdk" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7" }, "license": "ISC" } diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index 10a6e7db80..4a0eb82a70 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -2,7 +2,7 @@ "name": "base-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -14,8 +14,8 @@ "dependencies": { "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index 6885d9d294..977b889d1d 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -2,7 +2,7 @@ "name": "base", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -18,8 +18,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC" } diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index e8b07ccfd6..212a4c80f7 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -2,14 +2,14 @@ "name": "cdk-command", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "cdk": "sst cdk" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC" } diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index 3828c02a62..9a5e177050 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -2,14 +2,14 @@ "name": "config-invalid", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC" } diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index 521d046bab..132627249f 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -2,14 +2,14 @@ "name": "config-no-name", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC" } diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index dfd92c6962..6f510acf70 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -2,14 +2,14 @@ "name": "config-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC" } diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index 10ffc0bee4..678a10fc05 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -2,15 +2,15 @@ "name": "config-test", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC" } diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index 8fb47b2b52..24197427d2 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -2,15 +2,15 @@ "name": "context", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index 0b94ee1c6b..f2306d70f2 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -2,14 +2,14 @@ "name": "eslint-ignore-rule", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index 2b3e419282..3bdd208726 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -2,14 +2,14 @@ "name": "eslint-ignore", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index c10ea37419..0c0e7244df 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -2,14 +2,14 @@ "name": "eslint-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC" } diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index 92459758e6..7c1eef0dc8 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -2,14 +2,14 @@ "name": "eslint", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC" } diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index 18b5285e50..8b8b2d43de 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -2,14 +2,14 @@ "name": "handler-function-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC" } diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index 01f1a015f7..9b8e8fc2f7 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -2,14 +2,14 @@ "name": "handler-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC" } diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index 92cf8e734e..3b6e13d088 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -2,7 +2,7 @@ "name": "jest-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -19,8 +19,8 @@ "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/aws-sqs": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index ad33224d1d..ed21be9a31 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -2,7 +2,7 @@ "name": "jest", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "test": "sst test" @@ -15,8 +15,8 @@ "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/lambda-override-eslintrc/package.json b/packages/cli/test/lambda-override-eslintrc/package.json index 22032d6cb4..4107cf850f 100644 --- a/packages/cli/test/lambda-override-eslintrc/package.json +++ b/packages/cli/test/lambda-override-eslintrc/package.json @@ -2,7 +2,7 @@ "name": "lambda-override-eslintrc", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -12,8 +12,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC" } diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json index 52c1c6611c..7352d2ed68 100644 --- a/packages/cli/test/lambda-override-tsconfig/package.json +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -2,7 +2,7 @@ "name": "lambda-override-tsconfig", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -12,8 +12,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index e48810c527..f492f0ebe5 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -2,7 +2,7 @@ "name": "mismatched-cdk-versions", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" @@ -13,8 +13,8 @@ "@aws-cdk/aws-iam": "1.57.0", "@aws-cdk/aws-s3": "^1.57.0", "@aws-cdk/core": "1.56.0", - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC" } diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index 20bf25a948..9fca430a76 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -2,15 +2,15 @@ "name": "stack-no-prefix", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC" } diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index 451af1fee4..bc9081446b 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -2,14 +2,14 @@ "name": "stack-set-env", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC" } diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index 398c9fb62b..c424707d9b 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -2,7 +2,7 @@ "name": "start-base", "private": true, "description": "tests", - "version": "0.0.1", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -17,8 +17,8 @@ "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6" + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7" }, "license": "ISC" } diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index 65677bb9f2..1cd4e9f5a0 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -2,7 +2,7 @@ "name": "start-no-src-path", "private": true, "description": "tests", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -16,8 +16,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.6", - "@serverless-stack/resources": "^1.0.0-alpha.6", + "@serverless-stack/cli": "^1.0.0-alpha.7", + "@serverless-stack/resources": "^1.0.0-alpha.7", "mirrarray": "^2.0.0" }, "license": "ISC" diff --git a/packages/core/package.json b/packages/core/package.json index 9292dec685..0ef2178dd4 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 0b92fb478d..7a96772a75 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/logger/package.json b/packages/logger/package.json index 33d8ff056a..ca65830048 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -1,7 +1,7 @@ { "name": "logger", "private": true, - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "homepage": "https://serverless-stack.com", "description": "A logger package for Serverless Stack Toolkit.", "main": "index.js", @@ -16,7 +16,7 @@ }, "license": "MIT", "dependencies": { - "logger": "^1.0.0-alpha.6", + "logger": "^1.0.0-alpha.7", "winston": "^3.3.3" } } diff --git a/packages/resources/package.json b/packages/resources/package.json index 3eb0e84c4f..d4f59614a7 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 4ef7f5e79053d31eb8c410b29486469b9c9662fd Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 9 Jan 2021 16:33:14 -0500 Subject: [PATCH 227/481] Fixing dependencies --- packages/logger/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/logger/package.json b/packages/logger/package.json index ca65830048..c5a5a45eac 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -16,7 +16,6 @@ }, "license": "MIT", "dependencies": { - "logger": "^1.0.0-alpha.7", "winston": "^3.3.3" } } From 3a6ff7b4cf24a4f4e230219642125dc8601d58f7 Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 9 Jan 2021 16:34:14 -0500 Subject: [PATCH 228/481] v1.0.0-alpha.8 --- lerna.json | 2 +- packages/cli/package.json | 8 ++++---- packages/cli/test/add-cdk/package.json | 4 ++-- packages/cli/test/base-ts/package.json | 6 +++--- packages/cli/test/base/package.json | 6 +++--- packages/cli/test/cdk-command/package.json | 6 +++--- packages/cli/test/config-invalid/package.json | 6 +++--- packages/cli/test/config-no-name/package.json | 6 +++--- packages/cli/test/config-not-found/package.json | 6 +++--- packages/cli/test/config/package.json | 6 +++--- packages/cli/test/context/package.json | 6 +++--- packages/cli/test/eslint-ignore-rule/package.json | 6 +++--- packages/cli/test/eslint-ignore/package.json | 6 +++--- packages/cli/test/eslint-ts/package.json | 6 +++--- packages/cli/test/eslint/package.json | 6 +++--- packages/cli/test/handler-function-not-found/package.json | 6 +++--- packages/cli/test/handler-not-found/package.json | 6 +++--- packages/cli/test/jest-ts/package.json | 6 +++--- packages/cli/test/jest/package.json | 6 +++--- packages/cli/test/lambda-override-eslintrc/package.json | 6 +++--- packages/cli/test/lambda-override-tsconfig/package.json | 6 +++--- packages/cli/test/mismatched-cdk-versions/package.json | 6 +++--- packages/cli/test/stack-no-prefix/package.json | 6 +++--- packages/cli/test/stack-set-env/package.json | 6 +++--- packages/cli/test/start-base/package.json | 6 +++--- packages/cli/test/start-no-src-path/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/logger/package.json | 2 +- packages/resources/package.json | 2 +- 30 files changed, 80 insertions(+), 80 deletions(-) diff --git a/lerna.json b/lerna.json index 5cfa05235a..144cd7d779 100644 --- a/lerna.json +++ b/lerna.json @@ -4,5 +4,5 @@ ], "npmClient": "yarn", "useWorkspaces": true, - "version": "1.0.0-alpha.7" + "version": "1.0.0-alpha.8" } diff --git a/packages/cli/package.json b/packages/cli/package.json index d605e47ccf..306acfe057 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -45,8 +45,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7", + "@serverless-stack/core": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", @@ -61,7 +61,7 @@ "fast-safe-stringify": "^2.0.6", "fs-extra": "^9.0.1", "jest": "^26.1.0", - "logger": "^1.0.0-alpha.7", + "logger": "^1.0.0-alpha.8", "promise.allsettled": "^1.0.2", "source-map-support": "^0.5.19", "ts-jest": "^26.1.4", diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index a4890617db..460adff97d 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -2,13 +2,13 @@ "name": "add-cdk", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "add-cdk": "sst add-cdk" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8" }, "license": "ISC" } diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index 4a0eb82a70..a8b845a021 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -2,7 +2,7 @@ "name": "base-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -14,8 +14,8 @@ "dependencies": { "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index 977b889d1d..3fdb0bcec1 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -2,7 +2,7 @@ "name": "base", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -18,8 +18,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC" } diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index 212a4c80f7..318c3cbe3b 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -2,14 +2,14 @@ "name": "cdk-command", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "cdk": "sst cdk" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC" } diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index 9a5e177050..c7e087a393 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -2,14 +2,14 @@ "name": "config-invalid", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC" } diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index 132627249f..91e7d30a73 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -2,14 +2,14 @@ "name": "config-no-name", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC" } diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index 6f510acf70..da9cba115c 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -2,14 +2,14 @@ "name": "config-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC" } diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index 678a10fc05..c4b18740c5 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -2,15 +2,15 @@ "name": "config-test", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC" } diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index 24197427d2..d0e4f647f9 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -2,15 +2,15 @@ "name": "context", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index f2306d70f2..9c9ec0e1bf 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -2,14 +2,14 @@ "name": "eslint-ignore-rule", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index 3bdd208726..078f788f85 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -2,14 +2,14 @@ "name": "eslint-ignore", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index 0c0e7244df..e7ccc0c27f 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -2,14 +2,14 @@ "name": "eslint-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC" } diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index 7c1eef0dc8..557cdd8ad5 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -2,14 +2,14 @@ "name": "eslint", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC" } diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index 8b8b2d43de..7d4d783e04 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -2,14 +2,14 @@ "name": "handler-function-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC" } diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index 9b8e8fc2f7..6d68f609a6 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -2,14 +2,14 @@ "name": "handler-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC" } diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index 3b6e13d088..c8ca00324b 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -2,7 +2,7 @@ "name": "jest-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -19,8 +19,8 @@ "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/aws-sqs": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index ed21be9a31..1724a83047 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -2,7 +2,7 @@ "name": "jest", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "test": "sst test" @@ -15,8 +15,8 @@ "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/lambda-override-eslintrc/package.json b/packages/cli/test/lambda-override-eslintrc/package.json index 4107cf850f..a92e22c3d2 100644 --- a/packages/cli/test/lambda-override-eslintrc/package.json +++ b/packages/cli/test/lambda-override-eslintrc/package.json @@ -2,7 +2,7 @@ "name": "lambda-override-eslintrc", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -12,8 +12,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC" } diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json index 7352d2ed68..91f758c946 100644 --- a/packages/cli/test/lambda-override-tsconfig/package.json +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -2,7 +2,7 @@ "name": "lambda-override-tsconfig", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -12,8 +12,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index f492f0ebe5..057d5c6f56 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -2,7 +2,7 @@ "name": "mismatched-cdk-versions", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" @@ -13,8 +13,8 @@ "@aws-cdk/aws-iam": "1.57.0", "@aws-cdk/aws-s3": "^1.57.0", "@aws-cdk/core": "1.56.0", - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC" } diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index 9fca430a76..f9e10921b7 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -2,15 +2,15 @@ "name": "stack-no-prefix", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC" } diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index bc9081446b..66390688f4 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -2,14 +2,14 @@ "name": "stack-set-env", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC" } diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index c424707d9b..14d07e9e09 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -2,7 +2,7 @@ "name": "start-base", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -17,8 +17,8 @@ "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7" + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8" }, "license": "ISC" } diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index 1cd4e9f5a0..c44578659a 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -2,7 +2,7 @@ "name": "start-no-src-path", "private": true, "description": "tests", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -16,8 +16,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.7", - "@serverless-stack/resources": "^1.0.0-alpha.7", + "@serverless-stack/cli": "^1.0.0-alpha.8", + "@serverless-stack/resources": "^1.0.0-alpha.8", "mirrarray": "^2.0.0" }, "license": "ISC" diff --git a/packages/core/package.json b/packages/core/package.json index 0ef2178dd4..0985f9d8a3 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 7a96772a75..7ae5766de6 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/logger/package.json b/packages/logger/package.json index c5a5a45eac..179dcb89e4 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -1,7 +1,7 @@ { "name": "logger", "private": true, - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "homepage": "https://serverless-stack.com", "description": "A logger package for Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/resources/package.json b/packages/resources/package.json index d4f59614a7..71ced52d57 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "1.0.0-alpha.7", + "version": "1.0.0-alpha.8", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 6827e998e22ab0e56f06f9d64c4ae3d901fd5d85 Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 9 Jan 2021 19:46:04 -0500 Subject: [PATCH 229/481] Moving logger to core --- packages/cli/bin/scripts.js | 2 +- packages/cli/package.json | 1 - packages/cli/scripts/add-cdk.js | 2 +- packages/cli/scripts/build.js | 2 +- packages/cli/scripts/deploy.js | 3 ++- packages/cli/scripts/remove.js | 3 +-- packages/cli/scripts/start.js | 2 +- packages/cli/scripts/util/cdkHelpers.js | 3 ++- packages/core/index.js | 5 ++++- packages/{logger/index.js => core/logger.js} | 0 packages/core/package.json | 3 ++- packages/logger/package.json | 21 -------------------- 12 files changed, 15 insertions(+), 32 deletions(-) rename packages/{logger/index.js => core/logger.js} (100%) delete mode 100644 packages/logger/package.json diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index 3437308ba8..c82f8886ac 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -18,7 +18,7 @@ const fs = require("fs-extra"); const yargs = require("yargs"); const chalk = require("chalk"); const spawn = require("cross-spawn"); -const { initializeLogger } = require("logger"); +const { initializeLogger } = require("@serverless-stack/core"); const packageJson = require("../package.json"); const paths = require("../scripts/util/paths"); diff --git a/packages/cli/package.json b/packages/cli/package.json index 306acfe057..ff1e15d0cf 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -61,7 +61,6 @@ "fast-safe-stringify": "^2.0.6", "fs-extra": "^9.0.1", "jest": "^26.1.0", - "logger": "^1.0.0-alpha.8", "promise.allsettled": "^1.0.2", "source-map-support": "^0.5.19", "ts-jest": "^26.1.4", diff --git a/packages/cli/scripts/add-cdk.js b/packages/cli/scripts/add-cdk.js index aa3db9ebab..729d5daee8 100644 --- a/packages/cli/scripts/add-cdk.js +++ b/packages/cli/scripts/add-cdk.js @@ -2,7 +2,7 @@ const chalk = require("chalk"); const spawn = require("cross-spawn"); -const { logger } = require("logger"); +const { logger } = require("@serverless-stack/core"); module.exports = async function (argv, cliInfo) { const npm = cliInfo.npm; diff --git a/packages/cli/scripts/build.js b/packages/cli/scripts/build.js index 221e562b72..1a4745b248 100644 --- a/packages/cli/scripts/build.js +++ b/packages/cli/scripts/build.js @@ -1,8 +1,8 @@ "use strict"; const chalk = require("chalk"); +const { logger } = require("@serverless-stack/core"); -const { logger } = require("logger"); const { synth } = require("./util/cdkHelpers"); function printResults(results, usingYarn) { diff --git a/packages/cli/scripts/deploy.js b/packages/cli/scripts/deploy.js index 5f4f1ed9a6..50a4f1bbb0 100644 --- a/packages/cli/scripts/deploy.js +++ b/packages/cli/scripts/deploy.js @@ -2,7 +2,8 @@ const path = require("path"); const chalk = require("chalk"); -const { logger } = require("logger"); +const { logger } = require("@serverless-stack/core"); + const paths = require("./util/paths"); const { synth, parallelDeploy } = require("./util/cdkHelpers"); diff --git a/packages/cli/scripts/remove.js b/packages/cli/scripts/remove.js index 8457161ed6..f307ec3968 100644 --- a/packages/cli/scripts/remove.js +++ b/packages/cli/scripts/remove.js @@ -2,8 +2,7 @@ const path = require("path"); const chalk = require("chalk"); -const { logger } = require("logger"); -const { parallelDestroy } = require("@serverless-stack/core"); +const { logger, parallelDestroy } = require("@serverless-stack/core"); const paths = require("./util/paths"); const { destroy: cdkDestroy } = require("./util/cdkHelpers"); diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index da94831841..34f520a603 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -7,8 +7,8 @@ const WebSocket = require("ws"); const esbuild = require("esbuild"); const chokidar = require("chokidar"); const spawn = require("cross-spawn"); -const { logger } = require("logger"); const allSettled = require("promise.allsettled"); +const { logger } = require("@serverless-stack/core"); const sstDeploy = require("./deploy"); const sstBuild = require("./build"); diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index d03c00afc2..1358c90a67 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -9,9 +9,10 @@ const sstCore = require("@serverless-stack/core"); const exec = util.promisify(require("child_process").exec); const paths = require("./paths"); -const { logger } = require("logger"); const { isSubProcessError } = require("../../lib/errors"); +const logger = sstCore.logger; + const buildDir = path.join(paths.appBuildPath, "lib"); const tsconfig = path.join(paths.appPath, "tsconfig.json"); diff --git a/packages/core/index.js b/packages/core/index.js index 4da509a796..15331086c7 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -4,7 +4,8 @@ const cdk = require("sst-cdk"); const aws = require("aws-sdk"); const chalk = require("chalk"); -const { logger } = require("logger"); +const { logger, initializeLogger } = require("./logger"); + const packageJson = require("./package.json"); function getCdkVersion() { @@ -809,9 +810,11 @@ async function parallelDestroy(cdkOptions, stackStates) { module.exports = { synth, deploy, + logger, destroy, bootstrap, getCdkVersion, parallelDeploy, parallelDestroy, + initializeLogger, }; diff --git a/packages/logger/index.js b/packages/core/logger.js similarity index 100% rename from packages/logger/index.js rename to packages/core/logger.js diff --git a/packages/core/package.json b/packages/core/package.json index 0985f9d8a3..7742eae8a8 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -20,7 +20,8 @@ "dependencies": { "aws-sdk": "^2.761.0", "chalk": "^4.1.0", - "sst-cdk": "1.79.0-rc.1" + "sst-cdk": "1.79.0-rc.1", + "winston": "^3.3.3" }, "gitHead": "0a586f786aca7e7d498a80c4dda680159831f959" } diff --git a/packages/logger/package.json b/packages/logger/package.json deleted file mode 100644 index 179dcb89e4..0000000000 --- a/packages/logger/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "logger", - "private": true, - "version": "1.0.0-alpha.8", - "homepage": "https://serverless-stack.com", - "description": "A logger package for Serverless Stack Toolkit.", - "main": "index.js", - "author": { - "name": "Anomaly Innovations", - "url": "https://anoma.ly" - }, - "repository": { - "type": "git", - "url": "https://github.com/serverless-stack/serverless-stack.git", - "directory": "packages/logger" - }, - "license": "MIT", - "dependencies": { - "winston": "^3.3.3" - } -} From 5118ec7c0b296521c566d040e357787faadbc25b Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 9 Jan 2021 19:59:59 -0500 Subject: [PATCH 230/481] Fixing test package names --- packages/cli/test/add-cdk/package.json | 2 +- packages/cli/test/base-ts/package.json | 2 +- packages/cli/test/base/package.json | 2 +- packages/cli/test/cdk-command/package.json | 2 +- packages/cli/test/config-invalid/package.json | 2 +- packages/cli/test/config-no-name/package.json | 2 +- packages/cli/test/config-not-found/package.json | 2 +- packages/cli/test/config/package.json | 2 +- packages/cli/test/context/package.json | 2 +- packages/cli/test/eslint-ignore-rule/package.json | 2 +- packages/cli/test/eslint-ignore/package.json | 2 +- packages/cli/test/eslint-ts/package.json | 2 +- packages/cli/test/eslint/package.json | 2 +- packages/cli/test/handler-function-not-found/package.json | 2 +- packages/cli/test/handler-not-found/package.json | 2 +- packages/cli/test/jest-ts/package.json | 2 +- packages/cli/test/jest/package.json | 2 +- packages/cli/test/lambda-override-eslintrc/package.json | 2 +- packages/cli/test/lambda-override-tsconfig/package.json | 2 +- packages/cli/test/mismatched-cdk-versions/package.json | 2 +- packages/cli/test/stack-no-prefix/package.json | 2 +- packages/cli/test/stack-set-env/package.json | 2 +- packages/cli/test/start-base/package.json | 2 +- packages/cli/test/start-no-src-path/package.json | 2 +- 24 files changed, 24 insertions(+), 24 deletions(-) diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index 460adff97d..85ab1fa744 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -1,5 +1,5 @@ { - "name": "add-cdk", + "name": "@serverless-stack/cli-test-add-cdk", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index a8b845a021..d09c670303 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -1,5 +1,5 @@ { - "name": "base-ts", + "name": "@serverless-stack/cli-test-base-ts", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index 3fdb0bcec1..cb6c0f68fc 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -1,5 +1,5 @@ { - "name": "base", + "name": "@serverless-stack/cli-test-base", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index 318c3cbe3b..83418fb59c 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -1,5 +1,5 @@ { - "name": "cdk-command", + "name": "@serverless-stack/cli-test-cdk-command", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index c7e087a393..b54c26e800 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -1,5 +1,5 @@ { - "name": "config-invalid", + "name": "@serverless-stack/cli-test-config-invalid", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index 91e7d30a73..2d27a87336 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -1,5 +1,5 @@ { - "name": "config-no-name", + "name": "@serverless-stack/cli-test-config-no-name", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index da9cba115c..c46fc23acb 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -1,5 +1,5 @@ { - "name": "config-not-found", + "name": "@serverless-stack/cli-test-config-not-found", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index c4b18740c5..0a1e50cb69 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -1,5 +1,5 @@ { - "name": "config-test", + "name": "@serverless-stack/cli-test-config-test", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index d0e4f647f9..689ac7a2d8 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -1,5 +1,5 @@ { - "name": "context", + "name": "@serverless-stack/cli-test-context", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index 9c9ec0e1bf..b2e79bc694 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -1,5 +1,5 @@ { - "name": "eslint-ignore-rule", + "name": "@serverless-stack/cli-test-eslint-ignore-rule", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index 078f788f85..e74c4af3bc 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -1,5 +1,5 @@ { - "name": "eslint-ignore", + "name": "@serverless-stack/cli-test-eslint-ignore", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index e7ccc0c27f..2e79b9d31f 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -1,5 +1,5 @@ { - "name": "eslint-ts", + "name": "@serverless-stack/cli-test-eslint-ts", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index 557cdd8ad5..315275e238 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -1,5 +1,5 @@ { - "name": "eslint", + "name": "@serverless-stack/cli-test-eslint", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index 7d4d783e04..e058c17d4a 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -1,5 +1,5 @@ { - "name": "handler-function-not-found", + "name": "@serverless-stack/cli-test-handler-function-not-found", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index 6d68f609a6..80556290ff 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -1,5 +1,5 @@ { - "name": "handler-not-found", + "name": "@serverless-stack/cli-test-handler-not-found", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index c8ca00324b..41fccb5581 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -1,5 +1,5 @@ { - "name": "jest-ts", + "name": "@serverless-stack/cli-test-jest-ts", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index 1724a83047..eeb143a572 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -1,5 +1,5 @@ { - "name": "jest", + "name": "@serverless-stack/cli-test-jest", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/lambda-override-eslintrc/package.json b/packages/cli/test/lambda-override-eslintrc/package.json index a92e22c3d2..eb535568aa 100644 --- a/packages/cli/test/lambda-override-eslintrc/package.json +++ b/packages/cli/test/lambda-override-eslintrc/package.json @@ -1,5 +1,5 @@ { - "name": "lambda-override-eslintrc", + "name": "@serverless-stack/cli-test-lambda-override-eslintrc", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json index 91f758c946..c9030cf7c4 100644 --- a/packages/cli/test/lambda-override-tsconfig/package.json +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -1,5 +1,5 @@ { - "name": "lambda-override-tsconfig", + "name": "@serverless-stack/cli-test-lambda-override-tsconfig", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index 057d5c6f56..1544001b61 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -1,5 +1,5 @@ { - "name": "mismatched-cdk-versions", + "name": "@serverless-stack/cli-test-mismatched-cdk-versions", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index f9e10921b7..a72d11d525 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -1,5 +1,5 @@ { - "name": "stack-no-prefix", + "name": "@serverless-stack/cli-test-stack-no-prefix", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index 66390688f4..df5611d98a 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -1,5 +1,5 @@ { - "name": "stack-set-env", + "name": "@serverless-stack/cli-test-stack-set-env", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index 14d07e9e09..19f5e9d4e0 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -1,5 +1,5 @@ { - "name": "start-base", + "name": "@serverless-stack/cli-test-start-base", "private": true, "description": "tests", "version": "1.0.0-alpha.8", diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index c44578659a..5ff8fa34f4 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -1,5 +1,5 @@ { - "name": "start-no-src-path", + "name": "@serverless-stack/cli-test-start-no-src-path", "private": true, "description": "tests", "version": "1.0.0-alpha.8", From 9ad1e68e6cf2919702090353e12a325c3dcd529f Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 9 Jan 2021 20:06:40 -0500 Subject: [PATCH 231/481] v1.0.0-alpha.9 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/cli/test/add-cdk/package.json | 4 ++-- packages/cli/test/base-ts/package.json | 6 +++--- packages/cli/test/base/package.json | 6 +++--- packages/cli/test/cdk-command/package.json | 6 +++--- packages/cli/test/config-invalid/package.json | 6 +++--- packages/cli/test/config-no-name/package.json | 6 +++--- packages/cli/test/config-not-found/package.json | 6 +++--- packages/cli/test/config/package.json | 6 +++--- packages/cli/test/context/package.json | 6 +++--- packages/cli/test/eslint-ignore-rule/package.json | 6 +++--- packages/cli/test/eslint-ignore/package.json | 6 +++--- packages/cli/test/eslint-ts/package.json | 6 +++--- packages/cli/test/eslint/package.json | 6 +++--- packages/cli/test/handler-function-not-found/package.json | 6 +++--- packages/cli/test/handler-not-found/package.json | 6 +++--- packages/cli/test/jest-ts/package.json | 6 +++--- packages/cli/test/jest/package.json | 6 +++--- packages/cli/test/lambda-override-eslintrc/package.json | 6 +++--- packages/cli/test/lambda-override-tsconfig/package.json | 6 +++--- packages/cli/test/mismatched-cdk-versions/package.json | 6 +++--- packages/cli/test/stack-no-prefix/package.json | 6 +++--- packages/cli/test/stack-set-env/package.json | 6 +++--- packages/cli/test/start-base/package.json | 6 +++--- packages/cli/test/start-no-src-path/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 29 files changed, 78 insertions(+), 78 deletions(-) diff --git a/lerna.json b/lerna.json index 144cd7d779..9b0d4fd3ba 100644 --- a/lerna.json +++ b/lerna.json @@ -4,5 +4,5 @@ ], "npmClient": "yarn", "useWorkspaces": true, - "version": "1.0.0-alpha.8" + "version": "1.0.0-alpha.9" } diff --git a/packages/cli/package.json b/packages/cli/package.json index ff1e15d0cf..de0414d694 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -45,8 +45,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8", + "@serverless-stack/core": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index 85ab1fa744..51708c445f 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-add-cdk", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "add-cdk": "sst add-cdk" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9" }, "license": "ISC" } diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index d09c670303..a08bb4f5e5 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -14,8 +14,8 @@ "dependencies": { "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index cb6c0f68fc..d6be01b40a 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -18,8 +18,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC" } diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index 83418fb59c..8967bb7831 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-cdk-command", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "cdk": "sst cdk" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC" } diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index b54c26e800..093114dac5 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-invalid", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC" } diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index 2d27a87336..2d45eb80f3 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-no-name", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC" } diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index c46fc23acb..ff7e8fb2be 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC" } diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index 0a1e50cb69..98f5b051e9 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -2,15 +2,15 @@ "name": "@serverless-stack/cli-test-config-test", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC" } diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index 689ac7a2d8..b98b0fd5ad 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -2,15 +2,15 @@ "name": "@serverless-stack/cli-test-context", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index b2e79bc694..6d1d776e78 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint-ignore-rule", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index e74c4af3bc..70f719c58f 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint-ignore", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index 2e79b9d31f..7121d6257a 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC" } diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index 315275e238..ea44ad63bc 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC" } diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index e058c17d4a..e0a000c32f 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-handler-function-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC" } diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index 80556290ff..3727760642 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-handler-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC" } diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index 41fccb5581..daa4abe81a 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -19,8 +19,8 @@ "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/aws-sqs": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index eeb143a572..6e243e87ba 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "test": "sst test" @@ -15,8 +15,8 @@ "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/lambda-override-eslintrc/package.json b/packages/cli/test/lambda-override-eslintrc/package.json index eb535568aa..921019455b 100644 --- a/packages/cli/test/lambda-override-eslintrc/package.json +++ b/packages/cli/test/lambda-override-eslintrc/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-eslintrc", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -12,8 +12,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC" } diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json index c9030cf7c4..6d137345be 100644 --- a/packages/cli/test/lambda-override-tsconfig/package.json +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-tsconfig", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -12,8 +12,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index 1544001b61..2f3940524b 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-mismatched-cdk-versions", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" @@ -13,8 +13,8 @@ "@aws-cdk/aws-iam": "1.57.0", "@aws-cdk/aws-s3": "^1.57.0", "@aws-cdk/core": "1.56.0", - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC" } diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index a72d11d525..4dc7e04ecd 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -2,15 +2,15 @@ "name": "@serverless-stack/cli-test-stack-no-prefix", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC" } diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index df5611d98a..38062a1c16 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-stack-set-env", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC" } diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index 19f5e9d4e0..09d6b11f1f 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-base", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -17,8 +17,8 @@ "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8" + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9" }, "license": "ISC" } diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index 5ff8fa34f4..9b6ab43bc8 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-no-src-path", "private": true, "description": "tests", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -16,8 +16,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.8", - "@serverless-stack/resources": "^1.0.0-alpha.8", + "@serverless-stack/cli": "^1.0.0-alpha.9", + "@serverless-stack/resources": "^1.0.0-alpha.9", "mirrarray": "^2.0.0" }, "license": "ISC" diff --git a/packages/core/package.json b/packages/core/package.json index 7742eae8a8..ef95e3777e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 7ae5766de6..ef85f2a6f2 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 71ced52d57..0a795121c3 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From ed8450be05e51c0c2f701be270c91dade16c0c2d Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 9 Jan 2021 21:03:39 -0500 Subject: [PATCH 232/481] Updating teamplates. Fixing remove script. --- .prettierignore | 1 - lerna.json | 4 +--- packages/cli/scripts/util/cdkHelpers.js | 2 +- .../templates/javascript/README.template.md | 8 ++++++-- .../templates/javascript/sst.template.json | 1 - .../test/%stack-name.PascalCased%.test.template.js | 10 ++++------ .../templates/typescript/README.template.md | 8 ++++++-- .../templates/typescript/sst.template.json | 1 - .../test/%stack-name.PascalCased%.test.template.ts | 6 +++--- .../templates/typescript/tsconfig.json | 2 +- packages/resources/src/util/builder.ts | 2 +- 11 files changed, 23 insertions(+), 22 deletions(-) diff --git a/.prettierignore b/.prettierignore index d24d386838..6ec664b251 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,4 +4,3 @@ cdk.out .build # Ignore templates /packages/create-serverless-stack/templates/** - diff --git a/lerna.json b/lerna.json index 9b0d4fd3ba..c7a55e2e40 100644 --- a/lerna.json +++ b/lerna.json @@ -1,7 +1,5 @@ { - "packages": [ - "packages/*" - ], + "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, "version": "1.0.0-alpha.9" diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index 1358c90a67..ad05db6547 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -335,7 +335,7 @@ async function prepareCdk(argv, cliInfo, config) { await runChecks(inputFiles); - return { appliedConfig, inputFiles }; + return { config: appliedConfig, inputFiles }; } function handleCdkErrors(e) { diff --git a/packages/create-serverless-stack/templates/javascript/README.template.md b/packages/create-serverless-stack/templates/javascript/README.template.md index 073c65f1b0..3401b3509c 100644 --- a/packages/create-serverless-stack/templates/javascript/README.template.md +++ b/packages/create-serverless-stack/templates/javascript/README.template.md @@ -10,11 +10,15 @@ $ %package-manager% install ## Commands +### `%package-manager% run start` + +Starts the local Lambda development environment. + ### `%package-manager% run build` Build your app and synthesize your stacks. -Generates a `build/` directory with the compiled files and a `build/cdk.out/` directory with the synthesized CloudFormation stacks. +Generates a `.build/` directory with the compiled files and a `.build/cdk.out/` directory with the synthesized CloudFormation stacks. ### `%package-manager% run deploy [stack]` @@ -24,7 +28,7 @@ Deploy all your stacks to AWS. Or optionally deploy, a specific stack. Remove all your stacks and all of their resources from AWS. Or optionally removes, a specific stack. -### `%package-manager% test` +### `%package-manager% run test` Runs your tests using Jest. Takes all the [Jest CLI options](https://jestjs.io/docs/en/cli). diff --git a/packages/create-serverless-stack/templates/javascript/sst.template.json b/packages/create-serverless-stack/templates/javascript/sst.template.json index 6f5cbea99a..fd6577b946 100644 --- a/packages/create-serverless-stack/templates/javascript/sst.template.json +++ b/packages/create-serverless-stack/templates/javascript/sst.template.json @@ -1,6 +1,5 @@ { "name": "%name%", - "type": "@serverless-stack/resources", "stage": "dev", "region": "us-east-1" } diff --git a/packages/create-serverless-stack/templates/javascript/test/%stack-name.PascalCased%.test.template.js b/packages/create-serverless-stack/templates/javascript/test/%stack-name.PascalCased%.test.template.js index d0b4ebd09d..cec544eb0c 100644 --- a/packages/create-serverless-stack/templates/javascript/test/%stack-name.PascalCased%.test.template.js +++ b/packages/create-serverless-stack/templates/javascript/test/%stack-name.PascalCased%.test.template.js @@ -1,13 +1,11 @@ -import { expect, matchTemplate, MatchStyle } from "@aws-cdk/assert"; +import { expect, haveResource } from "@aws-cdk/assert"; import * as sst from "@serverless-stack/resources"; import %stack-name.PascalCased% from "../lib/%stack-name.PascalCased%"; -test('Test Stack', () => { +test("Test Stack", () => { const app = new sst.App(); // WHEN - const stack = new %stack-name.PascalCased%(app, 'test-stack'); + const stack = new %stack-name.PascalCased%(app, "test-stack"); // THEN - expect(stack).to(matchTemplate({ - "Resources": {} - }, MatchStyle.EXACT)) + expect(stack).to(haveResource("AWS::Lambda::Function")); }); diff --git a/packages/create-serverless-stack/templates/typescript/README.template.md b/packages/create-serverless-stack/templates/typescript/README.template.md index 03f99672ae..c13323349b 100644 --- a/packages/create-serverless-stack/templates/typescript/README.template.md +++ b/packages/create-serverless-stack/templates/typescript/README.template.md @@ -10,11 +10,15 @@ $ %package-manager% install ## Commands +### `%package-manager% run start` + +Starts the local Lambda development environment. + ### `%package-manager% run build` Build your app and synthesize your stacks. -Generates a `build/` directory with the compiled files and a `build/cdk.out/` directory with the synthesized CloudFormation stacks. +Generates a `.build/` directory with the compiled files and a `.build/cdk.out/` directory with the synthesized CloudFormation stacks. ### `%package-manager% run deploy [stack]` @@ -24,7 +28,7 @@ Deploy all your stacks to AWS. Or optionally deploy a specific stack. Remove all your stacks and all of their resources from AWS. Or optionally remove a specific stack. -### `%package-manager% test` +### `%package-manager% run test` Runs your tests using Jest. Takes all the [Jest CLI options](https://jestjs.io/docs/en/cli). diff --git a/packages/create-serverless-stack/templates/typescript/sst.template.json b/packages/create-serverless-stack/templates/typescript/sst.template.json index 6f5cbea99a..fd6577b946 100644 --- a/packages/create-serverless-stack/templates/typescript/sst.template.json +++ b/packages/create-serverless-stack/templates/typescript/sst.template.json @@ -1,6 +1,5 @@ { "name": "%name%", - "type": "@serverless-stack/resources", "stage": "dev", "region": "us-east-1" } diff --git a/packages/create-serverless-stack/templates/typescript/test/%stack-name.PascalCased%.test.template.ts b/packages/create-serverless-stack/templates/typescript/test/%stack-name.PascalCased%.test.template.ts index d0b4ebd09d..ede5164c13 100644 --- a/packages/create-serverless-stack/templates/typescript/test/%stack-name.PascalCased%.test.template.ts +++ b/packages/create-serverless-stack/templates/typescript/test/%stack-name.PascalCased%.test.template.ts @@ -2,12 +2,12 @@ import { expect, matchTemplate, MatchStyle } from "@aws-cdk/assert"; import * as sst from "@serverless-stack/resources"; import %stack-name.PascalCased% from "../lib/%stack-name.PascalCased%"; -test('Test Stack', () => { +test("Test Stack", () => { const app = new sst.App(); // WHEN - const stack = new %stack-name.PascalCased%(app, 'test-stack'); + const stack = new %stack-name.PascalCased%(app, "test-stack"); // THEN expect(stack).to(matchTemplate({ "Resources": {} - }, MatchStyle.EXACT)) + }, MatchStyle.EXACT)); }); diff --git a/packages/create-serverless-stack/templates/typescript/tsconfig.json b/packages/create-serverless-stack/templates/typescript/tsconfig.json index 7d659db8a8..cc8a352940 100644 --- a/packages/create-serverless-stack/templates/typescript/tsconfig.json +++ b/packages/create-serverless-stack/templates/typescript/tsconfig.json @@ -19,5 +19,5 @@ "strictPropertyInitialization": false, "typeRoots": ["./node_modules/@types"] }, - "include": ["lib"] + "include": ["lib","src"] } diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index f5c74cd4ef..f95379996c 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -164,7 +164,7 @@ export function builder(builderProps: BuilderProps): BuilderOutput { platform: "node", outdir: buildPath, entryPoints: [entryPath], - color: process.env.NO_COLOR !== 'true', + color: process.env.NO_COLOR !== "true", tsconfig: hasTsconfig ? tsconfig : undefined, }); From 4aba41363a3acc4980a27bd30bea8ff52ebfc116 Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 9 Jan 2021 21:04:12 -0500 Subject: [PATCH 233/481] v1.0.0-alpha.10 --- lerna.json | 6 ++++-- packages/cli/package.json | 6 +++--- packages/cli/test/add-cdk/package.json | 4 ++-- packages/cli/test/base-ts/package.json | 6 +++--- packages/cli/test/base/package.json | 6 +++--- packages/cli/test/cdk-command/package.json | 6 +++--- packages/cli/test/config-invalid/package.json | 6 +++--- packages/cli/test/config-no-name/package.json | 6 +++--- packages/cli/test/config-not-found/package.json | 6 +++--- packages/cli/test/config/package.json | 6 +++--- packages/cli/test/context/package.json | 6 +++--- packages/cli/test/eslint-ignore-rule/package.json | 6 +++--- packages/cli/test/eslint-ignore/package.json | 6 +++--- packages/cli/test/eslint-ts/package.json | 6 +++--- packages/cli/test/eslint/package.json | 6 +++--- packages/cli/test/handler-function-not-found/package.json | 6 +++--- packages/cli/test/handler-not-found/package.json | 6 +++--- packages/cli/test/jest-ts/package.json | 6 +++--- packages/cli/test/jest/package.json | 6 +++--- packages/cli/test/lambda-override-eslintrc/package.json | 6 +++--- packages/cli/test/lambda-override-tsconfig/package.json | 6 +++--- packages/cli/test/mismatched-cdk-versions/package.json | 6 +++--- packages/cli/test/stack-no-prefix/package.json | 6 +++--- packages/cli/test/stack-set-env/package.json | 6 +++--- packages/cli/test/start-base/package.json | 6 +++--- packages/cli/test/start-no-src-path/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 29 files changed, 81 insertions(+), 79 deletions(-) diff --git a/lerna.json b/lerna.json index c7a55e2e40..e5bff9c818 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,8 @@ { - "packages": ["packages/*"], + "packages": [ + "packages/*" + ], "npmClient": "yarn", "useWorkspaces": true, - "version": "1.0.0-alpha.9" + "version": "1.0.0-alpha.10" } diff --git a/packages/cli/package.json b/packages/cli/package.json index de0414d694..6790c1969f 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -45,8 +45,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9", + "@serverless-stack/core": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index 51708c445f..9529fca889 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-add-cdk", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "add-cdk": "sst add-cdk" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10" }, "license": "ISC" } diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index a08bb4f5e5..b5ca3babec 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -14,8 +14,8 @@ "dependencies": { "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index d6be01b40a..d236f2698f 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -18,8 +18,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC" } diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index 8967bb7831..e2b2af405d 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-cdk-command", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "cdk": "sst cdk" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC" } diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index 093114dac5..8480597ee0 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-invalid", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC" } diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index 2d45eb80f3..8647f4624d 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-no-name", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC" } diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index ff7e8fb2be..498dc5558d 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC" } diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index 98f5b051e9..eba8ea9fa4 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -2,15 +2,15 @@ "name": "@serverless-stack/cli-test-config-test", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC" } diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index b98b0fd5ad..e4f359a740 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -2,15 +2,15 @@ "name": "@serverless-stack/cli-test-context", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index 6d1d776e78..2db6c371da 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint-ignore-rule", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index 70f719c58f..c9486a8541 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint-ignore", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index 7121d6257a..5819efc656 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC" } diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index ea44ad63bc..d961cab023 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC" } diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index e0a000c32f..0eb4f1710d 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-handler-function-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC" } diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index 3727760642..b2d2dd989a 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-handler-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC" } diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index daa4abe81a..2091e4b874 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -19,8 +19,8 @@ "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/aws-sqs": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index 6e243e87ba..24890f92a6 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "test": "sst test" @@ -15,8 +15,8 @@ "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/lambda-override-eslintrc/package.json b/packages/cli/test/lambda-override-eslintrc/package.json index 921019455b..3a080496e9 100644 --- a/packages/cli/test/lambda-override-eslintrc/package.json +++ b/packages/cli/test/lambda-override-eslintrc/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-eslintrc", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -12,8 +12,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC" } diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json index 6d137345be..84c83e55c9 100644 --- a/packages/cli/test/lambda-override-tsconfig/package.json +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-tsconfig", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -12,8 +12,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index 2f3940524b..a05a8264ca 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-mismatched-cdk-versions", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" @@ -13,8 +13,8 @@ "@aws-cdk/aws-iam": "1.57.0", "@aws-cdk/aws-s3": "^1.57.0", "@aws-cdk/core": "1.56.0", - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC" } diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index 4dc7e04ecd..0c9e5e5de6 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -2,15 +2,15 @@ "name": "@serverless-stack/cli-test-stack-no-prefix", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC" } diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index 38062a1c16..64cb62514e 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-stack-set-env", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC" } diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index 09d6b11f1f..68f7e20d74 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-base", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -17,8 +17,8 @@ "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9" + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10" }, "license": "ISC" } diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index 9b6ab43bc8..c04dca1517 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-no-src-path", "private": true, "description": "tests", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -16,8 +16,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.9", - "@serverless-stack/resources": "^1.0.0-alpha.9", + "@serverless-stack/cli": "^1.0.0-alpha.10", + "@serverless-stack/resources": "^1.0.0-alpha.10", "mirrarray": "^2.0.0" }, "license": "ISC" diff --git a/packages/core/package.json b/packages/core/package.json index ef95e3777e..5dfa1a1361 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index ef85f2a6f2..57451a0b1d 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 0a795121c3..d509d3d1a8 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "1.0.0-alpha.9", + "version": "1.0.0-alpha.10", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 23698ac90ad321152a09531f77dd9b8d7a666c52 Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 9 Jan 2021 22:55:44 -0500 Subject: [PATCH 234/481] Filtering for only js and ts files in lint --- lerna.json | 4 +--- packages/cli/scripts/start.js | 8 +++++--- packages/cli/scripts/util/cdkHelpers.js | 6 ++++-- packages/cli/test/start-base/src/api/api.ts | 14 ++------------ .../test/%stack-name.PascalCased%.test.template.ts | 6 ++---- packages/resources/src/util/builder.ts | 6 +++--- 6 files changed, 17 insertions(+), 27 deletions(-) diff --git a/lerna.json b/lerna.json index e5bff9c818..429881ab70 100644 --- a/lerna.json +++ b/lerna.json @@ -1,7 +1,5 @@ { - "packages": [ - "packages/*" - ], + "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, "version": "1.0.0-alpha.10" diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 34f520a603..66359fa88a 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -583,7 +583,11 @@ async function reTranspiler(srcPath, entry, handler) { } function lint(srcPath) { - const { inputFiles } = builderState.srcPathsData[srcPath]; + let { inputFiles } = builderState.srcPathsData[srcPath]; + + inputFiles = inputFiles.filter( + (file) => file.endsWith(".ts") || file.endsWith(".js") + ); const cp = spawn( path.join(paths.appNodeModules, ".bin", "eslint"), @@ -593,8 +597,6 @@ function lint(srcPath) { "--config", path.join(paths.appBuildPath, ".eslintrc.internal.js"), path.join(paths.ownPath, "scripts", "util", ".eslintrc.internal.js"), - "--ext", - ".js,.ts", "--fix", // Handling nested ESLint projects in Yarn Workspaces // https://github.com/serverless-stack/serverless-stack/issues/11 diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index ad05db6547..6ff906696b 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -144,6 +144,10 @@ function runCdkVersionMatch(packageJson, cliInfo) { } async function lint(inputFiles) { + inputFiles = inputFiles.filter( + (file) => file.endsWith(".ts") || file.endsWith(".js") + ); + logger.info(chalk.grey("Linting source")); try { @@ -154,8 +158,6 @@ async function lint(inputFiles) { "--no-error-on-unmatched-pattern", "--config", path.join(paths.appBuildPath, ".eslintrc.internal.js"), - "--ext", - ".js,.ts", "--fix", // Handling nested ESLint projects in Yarn Workspaces // https://github.com/serverless-stack/serverless-stack/issues/11 diff --git a/packages/cli/test/start-base/src/api/api.ts b/packages/cli/test/start-base/src/api/api.ts index 8ff1b568e5..666cb4c71b 100644 --- a/packages/cli/test/start-base/src/api/api.ts +++ b/packages/cli/test/start-base/src/api/api.ts @@ -1,22 +1,12 @@ import * as AWS from "aws-sdk"; import mirrarray from "mirrarray"; -import { APIGatewayEvent } from "aws-lambda"; +import { APIGatewayProxyResult } from "aws-lambda"; import str from "./lib"; const sns = new AWS.SNS(); -interface APIResponse { - statusCode: number; - body: string; - headers: { [key: string]: string }; -} - -export async function main(event: APIGatewayEvent): Promise { - console.log( - `Logging from inside the API Lambda for route: ${event.routeKey}` - ); - +export async function main(): Promise { mirrarray(["this", "that", "another"]); await sns diff --git a/packages/create-serverless-stack/templates/typescript/test/%stack-name.PascalCased%.test.template.ts b/packages/create-serverless-stack/templates/typescript/test/%stack-name.PascalCased%.test.template.ts index ede5164c13..cec544eb0c 100644 --- a/packages/create-serverless-stack/templates/typescript/test/%stack-name.PascalCased%.test.template.ts +++ b/packages/create-serverless-stack/templates/typescript/test/%stack-name.PascalCased%.test.template.ts @@ -1,4 +1,4 @@ -import { expect, matchTemplate, MatchStyle } from "@aws-cdk/assert"; +import { expect, haveResource } from "@aws-cdk/assert"; import * as sst from "@serverless-stack/resources"; import %stack-name.PascalCased% from "../lib/%stack-name.PascalCased%"; @@ -7,7 +7,5 @@ test("Test Stack", () => { // WHEN const stack = new %stack-name.PascalCased%(app, "test-stack"); // THEN - expect(stack).to(matchTemplate({ - "Resources": {} - }, MatchStyle.EXACT)); + expect(stack).to(haveResource("AWS::Lambda::Function")); }); diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index f95379996c..b6441f0b1a 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -87,7 +87,9 @@ export function builder(builderProps: BuilderProps): BuilderOutput { function lint(inputFiles: Array) { inputFiles = inputFiles.filter( - (file: string) => file.indexOf("node_modules") === -1 + (file: string) => + file.indexOf("node_modules") === -1 && + (file.endsWith(".ts") || file.endsWith(".js")) ); console.log(chalk.grey("Linting Lambda function source")); @@ -100,8 +102,6 @@ export function builder(builderProps: BuilderProps): BuilderOutput { "--no-error-on-unmatched-pattern", "--config", path.join(appPath, buildDir, ".eslintrc.internal.js"), - "--ext", - ".js,.ts", "--fix", // Handling nested ESLint projects in Yarn Workspaces // https://github.com/serverless-stack/serverless-stack/issues/11 From 5076cae3d769c602c65b7f9c2635e87689b16a07 Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 9 Jan 2021 22:57:36 -0500 Subject: [PATCH 235/481] Including app name in debug stack name --- packages/cli/scripts/start.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 34f520a603..1fd06cca1a 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -104,7 +104,7 @@ async function deployDebugStack(argv, cliInfo, config) { return "ws://test-endpoint"; } - const stackName = `${config.stage}-debug-stack`; + const stackName = `${config.stage}-${config.name}-debug-stack`; logger.info(""); logger.info("======================="); From 425bff243baffa1e2c0548a2bb53548efacc81e1 Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 9 Jan 2021 23:08:21 -0500 Subject: [PATCH 236/481] v1.0.0-alpha.11 --- lerna.json | 6 ++++-- packages/cli/package.json | 6 +++--- packages/cli/test/add-cdk/package.json | 4 ++-- packages/cli/test/base-ts/package.json | 6 +++--- packages/cli/test/base/package.json | 6 +++--- packages/cli/test/cdk-command/package.json | 6 +++--- packages/cli/test/config-invalid/package.json | 6 +++--- packages/cli/test/config-no-name/package.json | 6 +++--- packages/cli/test/config-not-found/package.json | 6 +++--- packages/cli/test/config/package.json | 6 +++--- packages/cli/test/context/package.json | 6 +++--- packages/cli/test/eslint-ignore-rule/package.json | 6 +++--- packages/cli/test/eslint-ignore/package.json | 6 +++--- packages/cli/test/eslint-ts/package.json | 6 +++--- packages/cli/test/eslint/package.json | 6 +++--- packages/cli/test/handler-function-not-found/package.json | 6 +++--- packages/cli/test/handler-not-found/package.json | 6 +++--- packages/cli/test/jest-ts/package.json | 6 +++--- packages/cli/test/jest/package.json | 6 +++--- packages/cli/test/lambda-override-eslintrc/package.json | 6 +++--- packages/cli/test/lambda-override-tsconfig/package.json | 6 +++--- packages/cli/test/mismatched-cdk-versions/package.json | 6 +++--- packages/cli/test/stack-no-prefix/package.json | 6 +++--- packages/cli/test/stack-set-env/package.json | 6 +++--- packages/cli/test/start-base/package.json | 6 +++--- packages/cli/test/start-no-src-path/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 29 files changed, 81 insertions(+), 79 deletions(-) diff --git a/lerna.json b/lerna.json index 429881ab70..66c79b42c5 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,8 @@ { - "packages": ["packages/*"], + "packages": [ + "packages/*" + ], "npmClient": "yarn", "useWorkspaces": true, - "version": "1.0.0-alpha.10" + "version": "1.0.0-alpha.11" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 6790c1969f..38577b7b47 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -45,8 +45,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10", + "@serverless-stack/core": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index 9529fca889..accb305c35 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-add-cdk", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "add-cdk": "sst add-cdk" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11" }, "license": "ISC" } diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index b5ca3babec..8d80542304 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -14,8 +14,8 @@ "dependencies": { "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index d236f2698f..5780924d1e 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -18,8 +18,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC" } diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index e2b2af405d..4475602bc0 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-cdk-command", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "cdk": "sst cdk" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC" } diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index 8480597ee0..d1a5f6d14f 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-invalid", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC" } diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index 8647f4624d..8af7bcb18f 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-no-name", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC" } diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index 498dc5558d..d62d9a6163 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC" } diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index eba8ea9fa4..0961351b7c 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -2,15 +2,15 @@ "name": "@serverless-stack/cli-test-config-test", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC" } diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index e4f359a740..1a3a409796 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -2,15 +2,15 @@ "name": "@serverless-stack/cli-test-context", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index 2db6c371da..a74d4bd5e0 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint-ignore-rule", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index c9486a8541..b97a809995 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint-ignore", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index 5819efc656..41b55e63e0 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC" } diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index d961cab023..1cf1a42785 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC" } diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index 0eb4f1710d..d518fb7eb7 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-handler-function-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC" } diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index b2d2dd989a..0f1ada24a7 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-handler-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC" } diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index 2091e4b874..1739149c9c 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -19,8 +19,8 @@ "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/aws-sqs": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index 24890f92a6..472126275f 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "test": "sst test" @@ -15,8 +15,8 @@ "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/lambda-override-eslintrc/package.json b/packages/cli/test/lambda-override-eslintrc/package.json index 3a080496e9..e9b355dff9 100644 --- a/packages/cli/test/lambda-override-eslintrc/package.json +++ b/packages/cli/test/lambda-override-eslintrc/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-eslintrc", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -12,8 +12,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC" } diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json index 84c83e55c9..f5bd542c87 100644 --- a/packages/cli/test/lambda-override-tsconfig/package.json +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-tsconfig", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -12,8 +12,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index a05a8264ca..2567ce93b8 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-mismatched-cdk-versions", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" @@ -13,8 +13,8 @@ "@aws-cdk/aws-iam": "1.57.0", "@aws-cdk/aws-s3": "^1.57.0", "@aws-cdk/core": "1.56.0", - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC" } diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index 0c9e5e5de6..5e29cbeeb8 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -2,15 +2,15 @@ "name": "@serverless-stack/cli-test-stack-no-prefix", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC" } diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index 64cb62514e..e680b80175 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-stack-set-env", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC" } diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index 68f7e20d74..74c5acebed 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-base", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -17,8 +17,8 @@ "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10" + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11" }, "license": "ISC" } diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index c04dca1517..97796ad858 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-no-src-path", "private": true, "description": "tests", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -16,8 +16,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.10", - "@serverless-stack/resources": "^1.0.0-alpha.10", + "@serverless-stack/cli": "^1.0.0-alpha.11", + "@serverless-stack/resources": "^1.0.0-alpha.11", "mirrarray": "^2.0.0" }, "license": "ISC" diff --git a/packages/core/package.json b/packages/core/package.json index 5dfa1a1361..d7a31e665c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 57451a0b1d..927e02d0c3 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index d509d3d1a8..3ef9b0763b 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 16c099445561e45b72e9857f6dd61ff778cea071 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 11 Jan 2021 00:48:57 -0500 Subject: [PATCH 237/481] Supporting empty source path for Function construct --- packages/cli/scripts/start.js | 4 +-- packages/cli/test/start-no-src-path/.DS_Store | Bin 0 -> 6148 bytes .../cli/test/start-no-src-path/lib/index.js | 3 --- .../start-no-src-path.test.js | 24 +++++++++++++++--- packages/resources/package.json | 1 + packages/resources/src/Function.ts | 20 +++++---------- packages/resources/src/descs.d.ts | 1 + packages/resources/src/util/builder.ts | 8 ++++-- yarn.lock | 5 ++++ 9 files changed, 42 insertions(+), 24 deletions(-) create mode 100644 packages/cli/test/start-no-src-path/.DS_Store create mode 100644 packages/resources/src/descs.d.ts diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index fdf5b01b22..f6b20cc778 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -586,7 +586,7 @@ function lint(srcPath) { let { inputFiles } = builderState.srcPathsData[srcPath]; inputFiles = inputFiles.filter( - (file) => file.endsWith(".ts") || file.endsWith(".js") + file => file.indexOf("node_modules") === -1 && (file.endsWith(".ts") || file.endsWith(".js")) ); const cp = spawn( @@ -749,7 +749,7 @@ async function getAllExternalsForHandler(srcPath) { ...(packageJson.peerDependencies || {}), }); } catch (e) { - builderLogger.debug(`No package.json found in ${srcPath}`); + builderLogger.warn(`No package.json found in ${srcPath}`); externals = []; } diff --git a/packages/cli/test/start-no-src-path/.DS_Store b/packages/cli/test/start-no-src-path/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ef5454b0afbc9cfad2327d9392cb6688a0c50e17 GIT binary patch literal 6148 zcmeHK!A=4(5N!dmi!pLAkz+63h=Cw-GT9&=yqT=ggBsY)64_+kC9t?r#O!bAANd9T zjx%i`A?U%2F*1`(-*h_Drf)Z$mNCZL6Ti+_nK33n5pxzaUkHw)u1L;!5V@KoWWJY< zhh7+aE79cmiwxkmE3yOTu?Y*<^7ni9hG8&HYPAoZ%NI6^n?jUCX}fgm4C2&D++;Ft zyQ6FDox91vGxkLshYQ>FE`xsBE$^PhQQ`(sf25KFzYifdS3%^*X*-@o{#ec9=m8-t zVRg%u>9o;oR%N4Jn^ons)v8tHVdH2vv&7zh{rIeR|M)b0p1r(kW;y(XN_Gs+;SG$X zO+GlID2$^!@XvGRv4q3`F+dEg0R!gf6I*MrSK1;mKn(nh0X!chD57mJ)2NOPXz==o z;{`+%u<MGmS6;!gVU3PUYr_!F4+LrHQi*W*T)m<7#D?$E?iF3x%uI!7o)f zi2-6@nSs3Sma+bye*gYoPNE($Kn(mV26&<4blR{bQ(IRyhqYFM_CQfEF4MS3 j0YjByh{aM|0aXHii3Xr;Fw+Pg5V{B`8mJ)#ewBews-RKV literal 0 HcmV?d00001 diff --git a/packages/cli/test/start-no-src-path/lib/index.js b/packages/cli/test/start-no-src-path/lib/index.js index b80c7c4516..42c4d8885f 100644 --- a/packages/cli/test/start-no-src-path/lib/index.js +++ b/packages/cli/test/start-no-src-path/lib/index.js @@ -10,10 +10,7 @@ class MySampleStack extends sst.Stack { // Create a Lambda function new sst.Function(this, "MyLambda", { bundle: true, - srcPath: ".", entry: "lambda.js", - // srcPath: "src/api", - // handler: "handler", runtime: lambda.Runtime.NODEJS_12_X, timeout: cdk.Duration.seconds(10), }); diff --git a/packages/cli/test/start-no-src-path/start-no-src-path.test.js b/packages/cli/test/start-no-src-path/start-no-src-path.test.js index d144ad54f4..aa1749b7cc 100644 --- a/packages/cli/test/start-no-src-path/start-no-src-path.test.js +++ b/packages/cli/test/start-no-src-path/start-no-src-path.test.js @@ -1,4 +1,7 @@ +const fs = require("fs"); +const path = require("path"); const { runStartCommand, clearBuildOutput } = require("../helpers"); +const paths = require("../../scripts/util/paths"); beforeEach(async () => { await clearBuildOutput(__dirname); @@ -12,9 +15,24 @@ afterAll(async () => { * Test that the synth command ran successfully */ test("start-no-src-path", async () => { - const result = await runStartCommand(__dirname); + await runStartCommand(__dirname); - expect(result).toMatch( - /Error: Source path cannot be the project root for the MyLambda Lambda function/ + const testOutputPath = path.join( + __dirname, + paths.appBuildDir, + "test-output.json" ); + const testOutput = JSON.parse(fs.readFileSync(testOutputPath, "utf8")); + + expect(testOutput).toMatchObject({ + entryPointsData: { + "./lambda.js/handler": { + outHandler: { + entry: "lambda.js", + handler: "handler", + srcPath: ".build", + }, + }, + }, + }); }); diff --git a/packages/resources/package.json b/packages/resources/package.json index 3ef9b0763b..5b5af7d6c2 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -29,6 +29,7 @@ "@aws-cdk/aws-lambda-nodejs": "1.79.0", "@aws-cdk/core": "1.79.0", "chalk": "^4.1.0", + "cross-zip": "^4.0.0", "esbuild": "^0.8.31", "eslint": "^7.16.0", "fs-extra": "^9.0.1", diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index 969c132904..a7735aa634 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -19,8 +19,10 @@ export interface FunctionProps extends lambda.FunctionOptions { /** * The source directory where the entry point is located. The node_modules in this * directory is used to generate the bundle. + * + * @default - Defaults to the app directory. */ - readonly srcPath: string; + readonly srcPath?: string; /** * The runtime environment. Only runtimes of the Node.js family are * supported. @@ -64,18 +66,9 @@ export class Function extends lambda.Function { const handler = props.handler || "handler"; const runtime = props.runtime || lambda.Runtime.NODEJS_12_X; const bundle = props.bundle === undefined ? true : props.bundle; - const srcPath = props.srcPath; + const srcPath = props.srcPath || "."; const entry = props.entry; - // Validate source path - if (!srcPath) { - throw new Error(`No source path defined for the ${id} Lambda function`); - } else if (path.resolve(srcPath) === process.cwd()) { - throw new Error( - `Source path cannot be the project root for the ${id} Lambda function` - ); - } - // Validate entry file if (!entry) { throw new Error(`No entry point defined for the ${id} Lambda function`); @@ -116,19 +109,18 @@ export class Function extends lambda.Function { // register Lambda function in app root.registerLambdaHandler({ srcPath, entry, handler } as HandlerProps); } else { - const { outDir, outHandler } = builder({ + const { outZip, outHandler } = builder({ bundle: bundle, srcPath: srcPath, handler: handler, entry: entry, buildDir: root.buildDir, }); - super(scope, id, { ...props, runtime, handler: outHandler, - code: lambda.Code.fromAsset(outDir), + code: lambda.Code.fromAsset(outZip), }); } } diff --git a/packages/resources/src/descs.d.ts b/packages/resources/src/descs.d.ts new file mode 100644 index 0000000000..e3f79e11f2 --- /dev/null +++ b/packages/resources/src/descs.d.ts @@ -0,0 +1 @@ +declare module "cross-zip" diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index b6441f0b1a..0dc0b84de1 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -1,4 +1,5 @@ import chalk from "chalk"; +import zip from "cross-zip"; import * as path from "path"; import * as fs from "fs-extra"; import * as esbuild from "esbuild"; @@ -13,7 +14,7 @@ interface BuilderProps { } interface BuilderOutput { - readonly outDir: string; + readonly outZip: string; readonly outHandler: string; } @@ -177,8 +178,11 @@ export function builder(builderProps: BuilderProps): BuilderOutput { typeCheck(inputFiles); + const zipFile = path.join(appPath, buildDir, `${entry.replace(/[\.\/]/g, '-')}-${handler}.zip`); + zip.zipSync(srcPath, zipFile); + return { - outDir: srcPath, + outZip: zipFile, outHandler: `${buildDir}/${getHandlerString(entry, handler)}`, }; } diff --git a/yarn.lock b/yarn.lock index ee758dcb71..05c88c05b7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4386,6 +4386,11 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +cross-zip@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cross-zip/-/cross-zip-4.0.0.tgz#c29bfb2c001659a6d480ae9596f3bee83b48a230" + integrity sha512-MEzGfZo0rqE10O/B+AEcCSJLZsrWuRUvmqJTqHNqBtALhaJc3E3ixLGLJNTRzEA2K34wbmOHC4fwYs9sVsdcCA== + crypt@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" From c112ca03d9f5d50301e0d9329c658635d686e293 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 11 Jan 2021 00:51:34 -0500 Subject: [PATCH 238/481] Run lint & prettier --- lerna.json | 4 +--- packages/resources/src/descs.d.ts | 2 +- packages/resources/src/util/builder.ts | 6 +++++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lerna.json b/lerna.json index 66c79b42c5..f4512eab8d 100644 --- a/lerna.json +++ b/lerna.json @@ -1,7 +1,5 @@ { - "packages": [ - "packages/*" - ], + "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, "version": "1.0.0-alpha.11" diff --git a/packages/resources/src/descs.d.ts b/packages/resources/src/descs.d.ts index e3f79e11f2..148c1307da 100644 --- a/packages/resources/src/descs.d.ts +++ b/packages/resources/src/descs.d.ts @@ -1 +1 @@ -declare module "cross-zip" +declare module "cross-zip"; diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index 0dc0b84de1..c07af57e91 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -178,7 +178,11 @@ export function builder(builderProps: BuilderProps): BuilderOutput { typeCheck(inputFiles); - const zipFile = path.join(appPath, buildDir, `${entry.replace(/[\.\/]/g, '-')}-${handler}.zip`); + const zipFile = path.join( + appPath, + buildDir, + `${entry.replace(/[./]/g, "-")}-${handler}.zip` + ); zip.zipSync(srcPath, zipFile); return { From aacd300354096985702d9b24b81c717ee13ee770 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 11 Jan 2021 17:07:01 -0500 Subject: [PATCH 239/481] Update README.md --- README.md | 142 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 78 insertions(+), 64 deletions(-) diff --git a/README.md b/README.md index 05581c6ee2..49328f3b3d 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,12 @@ Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.com/cdk/) that: -- Allows you to use [**CDK with Serverless Framework**](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html) -- And develop your Lambdas **locally without mocking**! +- Includes a complete local development environment for Lambda + - Supports remotely invoking local functions + - Zero-config ES and TypeScript support using [esbuild](https://esbuild.github.io) +- Allows you to use [CDK with Serverless Framework](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html) -Getting help: [**Chat**](https://gitter.im/serverless-stack/Lobby) / [**Forums**](https://discourse.serverless-stack.com/) / [**Twitter**](https://twitter.com/ServerlessStack) +Getting help: [**Chat**](https://gitter.im/serverless-stack/Lobby)/ [**Twitter**](https://twitter.com/ServerlessStack) / [**Forums**](https://discourse.serverless-stack.com/) ## Quick Start @@ -31,11 +33,11 @@ $ npx sst start - [Working on your app](#working-on-your-app) - [Developing locally](#developing-locally) - [Building your app](#building-your-app) + - [Testing your app](#testing-your-app) - [Deploying your app](#deploying-your-app) - [Removing an app](#removing-an-app) - [Package scripts](#package-scripts) - - [Testing your app](#testing-your-app) - - [Linting your code](#linting-your-code) + - [Linting, type checking](#linting-type-checking) - [Example Project](#example-project) - [Migrating From CDK](#migrating-from-cdk) - [Known Issues](#known-issues) @@ -52,19 +54,39 @@ $ npx sst start ## Background -Serverless Framework is great but deploying any other AWS resources requires you to write CloudFormation templates in YAML. CloudFormation templates are incredibly verbose and even creating simple resources can take hundreds of lines of YAML. AWS CDK solves this by allowing you to generate CloudFormation templates using modern programming languages. Making it truly, _infrastructure as code_. +### Local Lambda Development + +Developing Lambdas locally is painful, you either: + +1. Locally mock all the AWS services you are using +2. Or, constantly deploy your changes to test them + +Both these approaches don't work well in practice. Locally mocking all the AWS services can be hard to do and most setups are really flaky. While, constantly deploying your Lambda functions or infrastructure can be simply too slow. + +The `sst start` command starts up a local development environment that opens a WebSocket connection to your deployed app and proxies any Lambda requests to your local machine. This allows you to: + +- Work on your Lambda functions locally +- While, interacting with your entire deployed AWS infrastructure +- Supports all Lambda triggers, so there's no need to mock API Gateway, SQS, SNS, etc. +- Supports real Lambda environment variables and Lambda IAM permissions +- So if a Lambda fails on AWS due to lack of IAM permissions, it would fail locally as well +- And it's fast. There's nothing to deploy when you make a change! + +You can read more about the [**sst start** command here](https://github.com/serverless-stack/serverless-stack/tree/master/packages/cli#start) and [try out a demo here](https://github.com/serverless-stack/sst-start-demo). ### Using Serverless Framework with CDK -However, to use AWS CDK (to define your non-Lambda resources) alongside your Serverless Framework services, requires you to follow certain conventions. +[Serverless Framework](https://github.com/serverless/serverless) is great but deploying any other AWS resources requires you to write CloudFormation templates in YAML. CloudFormation templates are incredibly verbose and even creating simple resources can take hundreds of lines of YAML. AWS CDK solves this by allowing you to generate CloudFormation templates using modern programming languages. Making it truly, _infrastructure as code_. + +However, to use AWS CDK alongside your Serverless Framework services, requires you to follow certain conventions. - **Deploying all the stacks to the same region and AWS account** - Serverless Framework apps are deployed multiple times to each environment. Where each deployment uses the same region and AWS account. This is done using the `--region` and `AWS_PROFILE=profile` options as a part of the deploy command. CDK apps on the other hand, contains CloudFormation stacks that are deployed to multiple regions and AWS accounts simultaneously. + Serverless Framework apps are deployed to multiple environments using the `--region` and `AWS_PROFILE=profile` options. CDK apps on the other hand, contain CloudFormation stacks that are deployed to multiple regions and AWS accounts simultaneously. - **Prefixing stage and resource names** - Since the same app is deployed to multiple environments, the AWS resource names might thrash if you are using the same AWS account across environments. To avoid this, Serverless Framework adopts the practice of prefixing the stack (and other resource) names with the stage name. On the other hand, to deploy a CDK app to the multiple stages, you'd need to manually ensure that the stack names and resource names don't thrash. + Since the same app is deployed to multiple environments, Serverless Framework adopts the practice of prefixing the stack names with the stage name. On the other hand, to deploy a CDK app to multiple stages, you'd need to manually ensure that the stack names and resource names don't thrash. SST provides the above out-of-the-box. So you can deploy your Serverless services using: @@ -78,27 +100,7 @@ And use CDK for the rest of your AWS infrastructure: $ AWS_PROFILE=production npx sst deploy --stage prod --region us-east-1 ``` -Making it really easy for you to start using CDK to create your AWS infrastructure. While still continuing to use Serverless Framework for your Lambda functions. You can [read more about this here](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html). - -### Developing Lambdas locally - -Developing Lambdas locally usually requires you to either: - -1. Mock all the services you are using -2. Or, constantly deploy your changes to test them - -Both these approaches don't work well in practice. Mocking all the AWS services can be really hard and mocking asynchronous workflows can be flaky. And constantly deploying your Lambda functions or infrastructure can be simply too slow. - -The `sst start` command starts up a local development environment that opens a WebSocket connection to your deployed app and proxies any Lambda requests to your local machine. This allows you to: - -- Work on your Lambda functions locally -- While, interacting with your entire deployed AWS infrastructure -- Supports all Lambda triggers, so there's no need to mock API Gateway, SQS, SNS, etc. -- Supports real Lambda environment variables and Lambda IAM permissions -- So if a Lambda fails on AWS due to lack of IAM permissions, it would fail locally as well -- And it's fast. There's nothing to deploy when you make a change! - -You can read more about the [**sst start** command here](https://github.com/serverless-stack/serverless-stack/tree/master/packages/cli#start) and [try out a demo here](https://github.com/serverless-stack/sst-start-demo). +You can [read more about this here](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html). ### And more @@ -106,9 +108,9 @@ As a bonus, SST also supports deploying your CloudFormation stacks asynchronousl SST also comes with a few other niceties: -- Supports ES6 and TypeScript out-of-the-box -- Automatically lints your CDK and Lambda code using [ESLint](https://eslint.org/) -- Runs your CDK unit tests using [Jest](https://jestjs.io/) +- Zero-config support for ES and TypeScript using [esbuild](http://esbuild.github.io) +- Automatically lints your code using [ESLint](https://eslint.org/) +- Runs your unit tests using [Jest](https://jestjs.io/) Behind the scenes, SST uses [a lightweight fork of AWS CDK](https://github.com/serverless-stack/sst-cdk) to programmatically invoke the various CDK commands. @@ -119,28 +121,28 @@ Behind the scenes, SST uses [a lightweight fork of AWS CDK](https://github.com/s Create a new project using. ```bash -$ npx create-serverless-stack resources my-sst-app +$ npx create-serverless-stack@latest my-sst-app ``` Or alternatively, with a newer version of npm or Yarn. ```bash # With npm 6+ -$ npm init serverless-stack resources my-sst-app +$ npm init serverless-stack@latest my-sst-app # Or with Yarn 0.25+ -$ yarn create serverless-stack resources my-sst-app +$ yarn create serverless-stack my-sst-app ``` -This by default creates a JavaScript/ES6 project. If you instead want to use **TypeScript**. +This by default creates a JavaScript/ES project. If you instead want to use **TypeScript**. ```bash -$ npm init serverless-stack resources my-sst-app --language typescript +$ npm init serverless-stack@latest my-sst-app --language typescript ``` By default your project is using npm as the package manager, if you'd like to use **Yarn**. ```bash -$ npm init serverless-stack resources my-sst-app --use-yarn +$ npm init serverless-stack@latest my-sst-app --use-yarn ``` You can read more about the [**create-serverless-stack** CLI here](https://github.com/serverless-stack/serverless-stack/tree/master/packages/create-serverless-stack). @@ -170,13 +172,12 @@ It includes a config file in `sst.json`. ```json { "name": "my-sst-app", - "type": "@serverless-stack/resources", "stage": "dev", "region": "us-east-1" } ``` -The **stage** and the **region** are defaults for your app and can be overridden using the `--stage` and `--region` options. The **name** is used while prefixing your stack and resource names. And the **type** just tells the CLI to know which type of SST app this is. +The **stage** and the **region** are defaults for your app and can be overridden using the `--stage` and `--region` options. The **name** is used while prefixing your stack and resource names. The `lib/index.js` file is the entry point for your app. It has a default export function to add your stacks. @@ -224,16 +225,15 @@ this.node.root.name; // "my-sst-app" And if you need to prefix certain resource names so that they don't thrash when deployed to multiple stages, you can do the following in your stacks. -```jsx +```js this.node.root.logicalPrefixedName("MyResource"); // "dev-my-sst-app-MyResource" ``` -Finally, in the `src/` directory we have a Lambda function that's being deployed as a part of this stack. +The sample stack also comes with a Lambda function and API endpoint. The Lambda function is in the `src/` directory. ```js -new sst.Function(this, "MyLambda", { - entry: "src/lambda.js", - handler: "handler", +new sst.Function(this, "Lambda", { + entry: "src/lambda.js" }); ``` @@ -243,7 +243,7 @@ You can read more about [**@serverless-stack/resources** here](https://github.co ### Developing locally -After you've defined your app in CDK and you are ready to work on your Lambda functions, start the local development environment using. +Let's start the local development environment. ```bash # With npm @@ -252,7 +252,18 @@ $ npx sst start $ yarn sst start ``` -This will first deploy your app and then start up a debugger. It'll allow you to make changes to your Lambda functions and to test them right away without having to deploy them. +The first time you run this, it'll deploy your app and a stack that sets up the debugger. This can take a couple of minutes. + +#### Making changes + +The sample stack will deploy a Lambda function with an API endpoint. You'll see something like this in the output. + +``` bash +Outputs: + ApiEndpoint: https://s8gecmmzxf.execute-api.us-east-1.amazonaws.com +``` + +If you head over to the endpoint, it'll invoke the Lambda function in `src/lambda.js`. You can try changing this file and hitting the endpoint again. You should **see your changes reflected right away**! ### Building your app @@ -265,7 +276,20 @@ $ npx sst build $ yarn sst build ``` -This will compile your ES6 (or TS) code to the `.build/` directory in your app. And the synthesized CloudFormation templates are outputted to `.build/cdk.out/`. Note that, you shouldn't commit the `.build/` directory to source control and it's ignored by default in your project's `.gitignore`. +This will compile your ES (or TS) code to the `.build/` directory in your app. And the synthesized CloudFormation templates are outputted to `.build/cdk.out/`. Note that, you shouldn't commit the `.build/` directory to source control and it's ignored by default in your project's `.gitignore`. + +### Testing your app + +You can run your tests using. + +```bash +# With npm +$ npm test +# Or with Yarn +$ yarn test +``` + +Internally, SST uses [Jest](https://jestjs.io/). You'll just need to add your tests to the `test/` directory. ### Deploying your app @@ -295,7 +319,7 @@ $ npx sst remove $ yarn sst remove ``` -Note that, this permanently removes your resources from AWS. +Note that, this permanently removes your resources from AWS. It also removes the stack that's created as a part of the debugger. ### Package scripts @@ -314,21 +338,12 @@ Just note that for `npm run`, you'll need to use an extra `--` for the options. $ npm run build -- --stage alpha ``` -### Testing your app - -You can run your tests using. - -```bash -# With npm -$ npm test -# Or with Yarn -$ yarn test -``` - -### Linting your code +### Linting, type checking Your code is automatically linted when building or deploying. If you'd like to customize the lint rules, add a `.eslintrc.json` in your project root. If you'd like to turn off linting, add `*` to an `.eslintignore` file in your project root. +If you are using TypeScript, SST also runs a separate TypeScript process to type check your code. It uses the `tsconfig.json` in your project root for this. + Note that, this applies to the Lambda functions in your app as well. ## Example Project @@ -346,7 +361,6 @@ It's fairly simple to move a CDK app to SST. There are a couple of small differe ```json { "name": "my-sst-app", - "type": "@serverless-stack/resources", "stage": "dev", "region": "us-east-1" } @@ -388,7 +402,7 @@ It's fairly simple to move a CDK app to SST. There are a couple of small differe } ``` -4. Lambdas extend `sst.Function` +4. Lambdas use `sst.Function` Use the `sst.Function` construct instead to the `cdk.lambda.NodejsFunction`. You can read more about this over on [`@serverless-stack/resources`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/resources) docs. From 37cc21258556f337379edeb429b64e38668ff8a8 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 11 Jan 2021 17:17:31 -0500 Subject: [PATCH 240/481] Update README.md --- packages/create-serverless-stack/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/create-serverless-stack/README.md b/packages/create-serverless-stack/README.md index b29db91335..52747224d9 100644 --- a/packages/create-serverless-stack/README.md +++ b/packages/create-serverless-stack/README.md @@ -9,19 +9,19 @@ There's no need install this CLI. Just use it directly to create your projects. With npx. ```bash -$ npx create-serverless-stack resources my-sst-app +$ npx create-serverless-stack@latest my-sst-app ``` Or with npm 6+ ```bash -$ npm init serverless-stack resources my-sst-app +$ npm init serverless-stack@latest my-sst-app ``` Or with Yarn 0.25+ ```bash -$ yarn create serverless-stack resources my-sst-app +$ yarn create serverless-stack my-sst-app ``` This will create an app in the `my-sst-app/` directory. @@ -35,7 +35,7 @@ Pass in the following (optional) options. The language of the project: `javascript` or `typescript`. Defaults to `javascript`. For example: ```bash -$ npm init serverless-stack resources my-sst-app --language typescript +$ npm init serverless-stack@latest my-sst-app --language typescript ``` ### `--use-yarn` @@ -43,5 +43,5 @@ $ npm init serverless-stack resources my-sst-app --language typescript Use Yarn instead of npm as the packager. Defaults to npm. For example: ```bash -$ yarn create serverless-stack resources my-sst-app --use-yarn +$ yarn create serverless-stack my-sst-app --use-yarn ``` From 5961228c3c2593340a6e13376cb5a933e8af48dc Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 11 Jan 2021 17:17:54 -0500 Subject: [PATCH 241/481] Moving lint and type check inside App.ts --- packages/resources/src/App.ts | 111 ++++++++++++++++++++++++ packages/resources/src/Function.ts | 7 +- packages/resources/src/util/builder.ts | 114 +++++-------------------- 3 files changed, 135 insertions(+), 97 deletions(-) diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index ccca279c3e..2671bd206c 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -1,6 +1,14 @@ +import chalk from "chalk"; +import * as path from "path"; +import * as fs from "fs-extra"; import * as cdk from "@aws-cdk/core"; import * as cxapi from "@aws-cdk/cx-api"; +import { execSync } from "child_process"; import { HandlerProps } from "./Function"; +import { getEsbuildMetafileName } from "./util/builder"; + +const appPath = process.cwd(); +const appNodeModules = path.join(appPath, "node_modules"); /** * Deploy props for apps. @@ -119,6 +127,9 @@ export class App extends cdk.App { } const cloudAssembly = super.synth(options); + // Run lint and type check on handler input files + this.processInputFiles(); + // Run callback after synth has finished if (this.synthCallback) { this.synthCallback(this.lambdaHandlers); @@ -130,4 +141,104 @@ export class App extends cdk.App { registerLambdaHandler(handler: HandlerProps): void { this.lambdaHandlers.push(handler); } + + processInputFiles(): void { + // Get input files + const inputFilesBySrcPath: { [key: string]: { [key: string]: boolean } } = {}; + this.lambdaHandlers.forEach(({ srcPath, entry, handler }) => { + const buildPath = path.join(srcPath, this.buildDir); + const metafile = path.join(buildPath, getEsbuildMetafileName(entry, handler)); + const files = this.getInputFilesFromEsbuildMetafile(metafile); + files.forEach(file => { + inputFilesBySrcPath[srcPath] = inputFilesBySrcPath[srcPath] || {}; + inputFilesBySrcPath[srcPath][file] = true; + }); + }); + + // Process each srcPath + Object.keys(inputFilesBySrcPath).forEach(srcPath => { + const inputFiles = Object.keys(inputFilesBySrcPath[srcPath]); + this.lint(srcPath, inputFiles); + this.typeCheck(srcPath, inputFiles); + }); + } + + getInputFilesFromEsbuildMetafile(file: string): Array { + let metaJson; + + try { + metaJson = fs.readJsonSync(file); + } catch (e) { + throw new Error("There was a problem reading the esbuild metafile."); + } + + return Object.keys(metaJson.inputs).map((input) => path.resolve(input)); + } + + lint(srcPath: string, inputFiles: Array): void { + inputFiles = inputFiles.filter( + (file: string) => + file.indexOf("node_modules") === -1 && + (file.endsWith(".ts") || file.endsWith(".js")) + ); + + console.log(chalk.grey("Linting Lambda function source")); + + try { + const stdout = execSync( + [ + path.join(appNodeModules, ".bin", "eslint"), + process.env.NO_COLOR === "true" ? "--no-color" : "--color", + "--no-error-on-unmatched-pattern", + "--config", + path.join(appPath, this.buildDir, ".eslintrc.internal.js"), + "--fix", + // Handling nested ESLint projects in Yarn Workspaces + // https://github.com/serverless-stack/serverless-stack/issues/11 + "--resolve-plugins-relative-to", + ".", + ...inputFiles, + ].join(" "), + { cwd: srcPath } + ); + const output = stdout.toString(); + if (output.trim() !== "") { + console.log(output); + } + } catch (e) { + console.log(e.stdout.toString()); + throw new Error("There was a problem linting the source."); + } + } + + typeCheck(srcPath: string, inputFiles: Array): void { + inputFiles = inputFiles.filter((file: string) => file.endsWith(".ts")); + + if (inputFiles.length === 0) { + return; + } + + console.log(chalk.grey("Type checking Lambda function source")); + + try { + const stdout = execSync( + [ + path.join(appNodeModules, ".bin", "tsc"), + "--pretty", + process.env.NO_COLOR === "true" ? "false" : "true", + "--noEmit", + ].join(" "), + { cwd: srcPath } + ); + const output = stdout.toString(); + if (output.trim() !== "") { + console.log(output); + } + } catch (e) { + console.log(e.stdout.toString()); + throw new Error("There was a problem type checking the source."); + } + } + } + diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index a7735aa634..d4dc1f8cb2 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -106,14 +106,12 @@ export class Function extends lambda.Function { SST_DEBUG_ENDPOINT: root.debugEndpoint || "", }, }); - // register Lambda function in app - root.registerLambdaHandler({ srcPath, entry, handler } as HandlerProps); } else { const { outZip, outHandler } = builder({ + entry: entry, bundle: bundle, srcPath: srcPath, handler: handler, - entry: entry, buildDir: root.buildDir, }); super(scope, id, { @@ -123,5 +121,8 @@ export class Function extends lambda.Function { code: lambda.Code.fromAsset(outZip), }); } + + // register Lambda function in app + root.registerLambdaHandler({ srcPath, entry, handler } as HandlerProps); } } diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index c07af57e91..c300325d08 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -1,9 +1,8 @@ import chalk from "chalk"; -import zip from "cross-zip"; +import crossZip from "cross-zip"; import * as path from "path"; import * as fs from "fs-extra"; import * as esbuild from "esbuild"; -import { execSync } from "child_process"; interface BuilderProps { readonly entry: string; @@ -23,19 +22,7 @@ function getHandlerString(entry: string, handler: string): string { return parts[parts.length - 1].replace(/\.[\w\d]+$/, `.${handler}`); } -function getInputFilesFromEsbuildMetafile(file: string): Array { - let metaJson; - - try { - metaJson = fs.readJsonSync(file); - } catch (e) { - throw new Error("There was a problem reading the esbuild metafile."); - } - - return Object.keys(metaJson.inputs).map((input) => path.resolve(input)); -} - -function getEsbuildMetafileName(entry: string, handler: string): string { +export function getEsbuildMetafileName(entry: string, handler: string): string { const key = `${entry}/${handler}`.replace(/[/.]/g, "-"); return `.esbuild.${key}.json`; @@ -76,8 +63,6 @@ export function builder(builderProps: BuilderProps): BuilderOutput { const external = getAllExternalsForHandler(srcPath, bundle); - const appNodeModules = path.join(appPath, "node_modules"); - const tsconfig = path.join(srcPath, "tsconfig.json"); const hasTsconfig = fs.existsSync(tsconfig); @@ -86,72 +71,7 @@ export function builder(builderProps: BuilderProps): BuilderOutput { const entryPath = path.join(srcPath, entry); - function lint(inputFiles: Array) { - inputFiles = inputFiles.filter( - (file: string) => - file.indexOf("node_modules") === -1 && - (file.endsWith(".ts") || file.endsWith(".js")) - ); - - console.log(chalk.grey("Linting Lambda function source")); - - try { - const stdout = execSync( - [ - path.join(appNodeModules, ".bin", "eslint"), - process.env.NO_COLOR === "true" ? "--no-color" : "--color", - "--no-error-on-unmatched-pattern", - "--config", - path.join(appPath, buildDir, ".eslintrc.internal.js"), - "--fix", - // Handling nested ESLint projects in Yarn Workspaces - // https://github.com/serverless-stack/serverless-stack/issues/11 - "--resolve-plugins-relative-to", - ".", - ...inputFiles, - ].join(" "), - { cwd: srcPath } - ); - const output = stdout.toString(); - if (output.trim() !== "") { - console.log(output); - } - } catch (e) { - console.log(e.stdout.toString()); - throw new Error("There was a problem linting the source."); - } - } - - function typeCheck(inputFiles: Array) { - inputFiles = inputFiles.filter((file: string) => file.endsWith(".ts")); - - if (inputFiles.length === 0) { - return; - } - - console.log(chalk.grey("Type checking Lambda function source")); - - try { - const stdout = execSync( - [ - path.join(appNodeModules, ".bin", "tsc"), - "--pretty", - process.env.NO_COLOR === "true" ? "false" : "true", - "--noEmit", - ].join(" "), - { cwd: srcPath } - ); - const output = stdout.toString(); - if (output.trim() !== "") { - console.log(output); - } - } catch (e) { - console.log(e.stdout.toString()); - throw new Error("There was a problem type checking the source."); - } - } - - function transpile(entryPath: string): Array { + function transpile(entryPath: string) { if (!fs.existsSync(entryPath)) { throw new Error(`Cannot find a handler file at ${entryPath}".`); } @@ -168,22 +88,28 @@ export function builder(builderProps: BuilderProps): BuilderOutput { color: process.env.NO_COLOR !== "true", tsconfig: hasTsconfig ? tsconfig : undefined, }); - - return getInputFilesFromEsbuildMetafile(metafile); } - const inputFiles = transpile(entryPath); + function zip() { + const zipFile = path.join( + appPath, + buildDir, + `${entry.replace(/[./]/g, "-")}-${handler}.zip` + ); - lint(inputFiles); + try { + crossZip.zipSync(srcPath, zipFile); + } catch(e) { + console.log(e); + throw new Error("There was a problem generating Lambda package."); + } - typeCheck(inputFiles); + return zipFile; + } - const zipFile = path.join( - appPath, - buildDir, - `${entry.replace(/[./]/g, "-")}-${handler}.zip` - ); - zip.zipSync(srcPath, zipFile); + transpile(entryPath); + + const zipFile = zip(); return { outZip: zipFile, From 570013eee5aa03f738f85162aa97529e29e82f6d Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 11 Jan 2021 17:21:25 -0500 Subject: [PATCH 242/481] Update README.md --- packages/cli/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/README.md b/packages/cli/README.md index bcc3195991..4b757ce179 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -42,7 +42,7 @@ This means that for any new requests, the local version of your Lambdas will be Note that all this is deployed to your AWS account. There are no 3rd party services involved and your data never leaves your account. And since the WebSocket API is completely serverless, it's basically free for most use cases. -`sst start` also starts up a watcher to transpile, lint, and type check your Lambda functions. So you can use ES or TypeScript directly. +`sst start` also starts up a watcher to transpile (using [esbuild](https://esbuild.github.io)), lint (with [ESLint](http://eslint.org)), and type check (using [TypeScript](https://www.typescriptlang.org)) your Lambda functions. So you can use ES or TypeScript directly. ### `build` From 356d44a3c831b96839882c4043b7f8a56631ac7f Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 11 Jan 2021 17:23:44 -0500 Subject: [PATCH 243/481] Template: removed srcPath from the templates --- .../templates/javascript/{src => }/lambda.js | 0 .../javascript/lib/%stack-name.PascalCased%.template.js | 1 - .../templates/typescript/{src => }/lambda.ts | 0 .../typescript/lib/%stack-name.PascalCased%.template.ts | 1 - 4 files changed, 2 deletions(-) rename packages/create-serverless-stack/templates/javascript/{src => }/lambda.js (100%) rename packages/create-serverless-stack/templates/typescript/{src => }/lambda.ts (100%) diff --git a/packages/create-serverless-stack/templates/javascript/src/lambda.js b/packages/create-serverless-stack/templates/javascript/lambda.js similarity index 100% rename from packages/create-serverless-stack/templates/javascript/src/lambda.js rename to packages/create-serverless-stack/templates/javascript/lambda.js diff --git a/packages/create-serverless-stack/templates/javascript/lib/%stack-name.PascalCased%.template.js b/packages/create-serverless-stack/templates/javascript/lib/%stack-name.PascalCased%.template.js index b3a684289b..2e05d329e1 100644 --- a/packages/create-serverless-stack/templates/javascript/lib/%stack-name.PascalCased%.template.js +++ b/packages/create-serverless-stack/templates/javascript/lib/%stack-name.PascalCased%.template.js @@ -11,7 +11,6 @@ export default class %stack-name.PascalCased% extends sst.Stack { // Create a Lambda function triggered by an HTTP API const lambda = new sst.Function(this, "Lambda", { entry: "lambda.js", - srcPath: "src", }); // Create the HTTP API diff --git a/packages/create-serverless-stack/templates/typescript/src/lambda.ts b/packages/create-serverless-stack/templates/typescript/lambda.ts similarity index 100% rename from packages/create-serverless-stack/templates/typescript/src/lambda.ts rename to packages/create-serverless-stack/templates/typescript/lambda.ts diff --git a/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts b/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts index 8a1ea3557c..5d875b18fb 100644 --- a/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts +++ b/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts @@ -11,7 +11,6 @@ export default class %stack-name.PascalCased% extends sst.Stack { // Create a Lambda function triggered by an HTTP API const lambda = new sst.Function(this, "Lambda", { entry: "lambda.ts", - srcPath: "src", }); // Create the HTTP API From 720f939310f724b4f9fef3db563adb5fb65c53d8 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 11 Jan 2021 17:25:45 -0500 Subject: [PATCH 244/481] Update README.md --- packages/resources/README.md | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/resources/README.md b/packages/resources/README.md index d79a6c80ea..3e5f0b26d7 100644 --- a/packages/resources/README.md +++ b/packages/resources/README.md @@ -2,7 +2,7 @@ Part of the **[Serverless Stack Toolkit](https://github.com/serverless-stack/serverless-stack)**. Provides a couple of simple AWS CDK Constructs: -- `sst.App` +- `sst.App` (used internally) - `sst.Stack` - `sst.Function` @@ -106,24 +106,26 @@ Takes props (`sst.FunctionProps`) that extends [`cdk.lambda.FunctionOptions`](ht Relative path to the entry point of the function. Either based of the project root or the `srcPath`. A `.js` or `.ts` file. -### `srcPath` - -The source directory where the entry point file is located. The `node_modules` in this directory is used to generate the bundle. The `tsconfig.json` is expected to be here as well. Cannot be set to the project root. - ### `handler` The exported function in the entry file. Defaults to `"handler"`. -### `runtime` +### `bundle` -The runtime environment. Only runtimes of the Node.js family are supported. +Bundles your Lambda functions with [esbuild](https://esbuild.github.io). Turn this off if you have NPM packages that cannot be bundled. -Defaults to `lambda.NODEJS_12_X`. +Defaults to `true`. -### `bundle` +### `srcPath` -Bundles your Lambda functions with [esbuild](https://esbuild.github.io). +The source directory where the entry point file is located. If the `bundle` option is turned off, SST zips up the entire `srcPath` directory and uses it as the Lambda function package. -Defaults to `true`. +Defaults to `""`, the project root. + +### `runtime` + +The runtime environment. Only runtimes of the Node.js family are supported. + +Defaults to `lambda.NODEJS_12_X`. From 52113efddf607eb6c9abf1c4159a8b0d9d09ee26 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 11 Jan 2021 17:27:31 -0500 Subject: [PATCH 245/481] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 49328f3b3d..842c0f5f5b 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.com/cdk/) that: -- Includes a complete local development environment for Lambda +- Includes a complete [local development environment for Lambda](#local-lambda-development) - Supports remotely invoking local functions - Zero-config ES and TypeScript support using [esbuild](https://esbuild.github.io) - Allows you to use [CDK with Serverless Framework](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html) From e8a3540a5657386bc024b92da7b993cd47598e30 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 11 Jan 2021 18:28:55 -0500 Subject: [PATCH 246/481] Moving lint and type check inside App.ts --- packages/resources/src/App.ts | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 2671bd206c..4560692f37 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -128,7 +128,11 @@ export class App extends cdk.App { const cloudAssembly = super.synth(options); // Run lint and type check on handler input files - this.processInputFiles(); + // Note: do not need to run while debugging because the Lambda functions are replaced by + // stubs and have not been transpiled. + if (!this.local) { + this.processInputFiles(); + } // Run callback after synth has finished if (this.synthCallback) { @@ -144,19 +148,24 @@ export class App extends cdk.App { processInputFiles(): void { // Get input files - const inputFilesBySrcPath: { [key: string]: { [key: string]: boolean } } = {}; + const inputFilesBySrcPath: { + [key: string]: { [key: string]: boolean }; + } = {}; this.lambdaHandlers.forEach(({ srcPath, entry, handler }) => { const buildPath = path.join(srcPath, this.buildDir); - const metafile = path.join(buildPath, getEsbuildMetafileName(entry, handler)); + const metafile = path.join( + buildPath, + getEsbuildMetafileName(entry, handler) + ); const files = this.getInputFilesFromEsbuildMetafile(metafile); - files.forEach(file => { + files.forEach((file) => { inputFilesBySrcPath[srcPath] = inputFilesBySrcPath[srcPath] || {}; inputFilesBySrcPath[srcPath][file] = true; }); }); // Process each srcPath - Object.keys(inputFilesBySrcPath).forEach(srcPath => { + Object.keys(inputFilesBySrcPath).forEach((srcPath) => { const inputFiles = Object.keys(inputFilesBySrcPath[srcPath]); this.lint(srcPath, inputFiles); this.typeCheck(srcPath, inputFiles); @@ -239,6 +248,4 @@ export class App extends cdk.App { throw new Error("There was a problem type checking the source."); } } - } - From 0189c92d24e0fa6949afa87889e15c93f16a2863 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 11 Jan 2021 19:54:01 -0500 Subject: [PATCH 247/481] Adding slack link --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 842c0f5f5b..e450611cd1 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.c - Zero-config ES and TypeScript support using [esbuild](https://esbuild.github.io) - Allows you to use [CDK with Serverless Framework](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html) -Getting help: [**Chat**](https://gitter.im/serverless-stack/Lobby)/ [**Twitter**](https://twitter.com/ServerlessStack) / [**Forums**](https://discourse.serverless-stack.com/) +Getting help: [**Slack**][slack] / [**Twitter**](https://twitter.com/ServerlessStack) / [**Forums**](https://discourse.serverless-stack.com/) ## Quick Start @@ -475,7 +475,7 @@ $ yarn test ## Community -[Follow us on Twitter](https://twitter.com/ServerlessStack), [join our chatroom](https://gitter.im/serverless-stack/Lobby), [post on our forums](https://discourse.serverless-stack.com), and [subscribe to our newsletter](https://emailoctopus.com/lists/1c11b9a8-1500-11e8-a3c9-06b79b628af2/forms/subscribe). +[Follow us on Twitter](https://twitter.com/ServerlessStack), [join us on Slack][slack], [post on our forums](https://discourse.serverless-stack.com), and [subscribe to our newsletter](https://emailoctopus.com/lists/1c11b9a8-1500-11e8-a3c9-06b79b628af2/forms/subscribe). ## Thanks @@ -484,3 +484,5 @@ This project extends [AWS CDK](https://github.com/aws/aws-cdk) and is based on t --- Brought to you by [Anomaly Innovations](https://anoma.ly/); makers of [Seed](https://seed.run/) and the [Serverless Stack Guide](https://serverless-stack.com/). + +[slack]: https://join.slack.com/t/serverless-stack/shared_invite/zt-kqna615x-AFoTXvrglivZqJZcnTzKZA From 24ceeb2f845ee222ebee6308d95652abb0585f5e Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 11 Jan 2021 20:13:34 -0500 Subject: [PATCH 248/481] Add roadmap link --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e450611cd1..c68e38725c 100644 --- a/README.md +++ b/README.md @@ -444,10 +444,12 @@ You can learn more about these issues [here](https://github.com/aws/aws-cdk/issu ## Future Roadmap -Check out [the public SST roadmap here](https://github.com/serverless-stack/serverless-stack/projects/1). +Check out [**the public SST roadmap here**][roadmap]. ## Contributing +Check out our [roadmap][roadmap] and [join our Slack][slack] to get started. + - Open [a new issue](https://github.com/serverless-stack/serverless-stack/issues/new) if you've found a bug or have some suggestions. - Or submit a pull request! @@ -486,3 +488,4 @@ This project extends [AWS CDK](https://github.com/aws/aws-cdk) and is based on t Brought to you by [Anomaly Innovations](https://anoma.ly/); makers of [Seed](https://seed.run/) and the [Serverless Stack Guide](https://serverless-stack.com/). [slack]: https://join.slack.com/t/serverless-stack/shared_invite/zt-kqna615x-AFoTXvrglivZqJZcnTzKZA +[roadmap]: https://github.com/serverless-stack/serverless-stack/milestones?direction=asc&sort=due_date&state=open From 227a2979da787069479c8d7ba0be9b500a1fbed0 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 11 Jan 2021 20:37:05 -0500 Subject: [PATCH 249/481] Switch to use zip-local for zipping lambda functions --- packages/cli/scripts/start.js | 17 ++++++++---- packages/cli/test/start-base/.DS_Store | Bin 0 -> 6148 bytes packages/resources/package.json | 4 +-- packages/resources/src/descs.d.ts | 2 +- packages/resources/src/util/builder.ts | 25 ++++++++++------- yarn.lock | 36 ++++++++++++++++++++----- 6 files changed, 60 insertions(+), 24 deletions(-) create mode 100644 packages/cli/test/start-base/.DS_Store diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index f6b20cc778..ad93dddb12 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -156,9 +156,17 @@ async function deployApp(argv, cliInfo, config) { const { inputFiles } = await prepareCdk(argv, cliInfo, config); // When testing, we will do a build call to generate the lambda-handler.json - IS_TEST - ? await sstBuild(argv, config, cliInfo) - : await sstDeploy(argv, config, cliInfo); + if (IS_TEST) { + await sstBuild(argv, config, cliInfo) + } + else { + const stacks = await sstDeploy(argv, config, cliInfo); + + // Check all stacks deployed successfully + if (stacks.some(stack => stack.status === 'failed')) { + throw new Error(`Failed to deploy the app`); + } + } return inputFiles; } @@ -200,7 +208,6 @@ async function startBuilder(cdkInputFiles) { transpile(srcPath, entry, handler) ) ); - esbuildService.stop(); const hasError = results.some((result) => result.status === "rejected"); if (hasError) { @@ -540,7 +547,7 @@ async function transpile(srcPath, entry, handler) { builderLogger.debug(`Transpiling ${handler}...`); - const esbuilder = await esbuild.build(esbuildOptions); + const esbuilder = await esbuildService.build(esbuildOptions); return onTranspileSucceeded(srcPath, entry, handler, { tsconfig, diff --git a/packages/cli/test/start-base/.DS_Store b/packages/cli/test/start-base/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..35a3539a99e626c55281260c13ae54871fe26c5d GIT binary patch literal 6148 zcmeHK!Ab)$5KY=zvlX!iLA~YTtw?LNdJ&dd58i|oJ*c$1Y_SXLZfUm`t(E-_{Ud+C z-*F~M3rqFjMWoEYxaQGsa8LEE?-zFt_o2SrS;OC(~HMW;wGbE z(;eJk@4`)bp0O|EIGo$AcNKKU?egYn93^fLbq6Xr@VgLldmTi6JZ{FL$RDbC96ca} zC9HONXEJH*A6I0pQ9qnk z`iSENL=>>`ErBQv+6GgNFapALDxgl~=83^|I{2lDvkj&ibvol}WthjT%*_jhtJT3T zRXF3eMrw%xVj#;vUU$n_|IdDY|7Vk^M+^`HOT_>$w47EGwq$DS!sf8nO3)4{3dW@x l=P6*QQVg+Jinl?PfM22kXd6s5f(L{y0*VG|h=D(4;0qeoQW*dM literal 0 HcmV?d00001 diff --git a/packages/resources/package.json b/packages/resources/package.json index 5b5af7d6c2..3d72a64471 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -29,11 +29,11 @@ "@aws-cdk/aws-lambda-nodejs": "1.79.0", "@aws-cdk/core": "1.79.0", "chalk": "^4.1.0", - "cross-zip": "^4.0.0", "esbuild": "^0.8.31", "eslint": "^7.16.0", "fs-extra": "^9.0.1", - "typescript": "^3.9.7" + "typescript": "^3.9.7", + "zip-local": "^0.3.4" }, "devDependencies": { "@types/fs-extra": "^9.0.6", diff --git a/packages/resources/src/descs.d.ts b/packages/resources/src/descs.d.ts index 148c1307da..df77fbff1f 100644 --- a/packages/resources/src/descs.d.ts +++ b/packages/resources/src/descs.d.ts @@ -1 +1 @@ -declare module "cross-zip"; +declare module "zip-local"; diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index c300325d08..52a9044e8a 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -1,5 +1,6 @@ import chalk from "chalk"; -import crossZip from "cross-zip"; +//import crossZip from "cross-zip"; +import zipLocal from "zip-local"; import * as path from "path"; import * as fs from "fs-extra"; import * as esbuild from "esbuild"; @@ -90,7 +91,7 @@ export function builder(builderProps: BuilderProps): BuilderOutput { }); } - function zip() { + function zip(dir: string) { const zipFile = path.join( appPath, buildDir, @@ -98,8 +99,9 @@ export function builder(builderProps: BuilderProps): BuilderOutput { ); try { - crossZip.zipSync(srcPath, zipFile); - } catch(e) { + zipLocal.sync.zip(dir).compress().save(zipFile); + //crossZip.zipSync(dir, zipFile); + } catch (e) { console.log(e); throw new Error("There was a problem generating Lambda package."); } @@ -109,10 +111,15 @@ export function builder(builderProps: BuilderProps): BuilderOutput { transpile(entryPath); - const zipFile = zip(); + let outZip, outHandler; + if (bundle) { + outZip = zip(path.join(srcPath, buildDir)); + outHandler = getHandlerString(entry, handler); + } + else { + outZip = zip(srcPath); + outHandler = `${buildDir}/${getHandlerString(entry, handler)}`; + } - return { - outZip: zipFile, - outHandler: `${buildDir}/${getHandlerString(entry, handler)}`, - }; + return { outZip, outHandler }; } diff --git a/yarn.lock b/yarn.lock index 05c88c05b7..e9a36f1462 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3376,6 +3376,11 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +async@^1.4.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + async@^3.1.0, async@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" @@ -4386,11 +4391,6 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -cross-zip@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cross-zip/-/cross-zip-4.0.0.tgz#c29bfb2c001659a6d480ae9596f3bee83b48a230" - integrity sha512-MEzGfZo0rqE10O/B+AEcCSJLZsrWuRUvmqJTqHNqBtALhaJc3E3ixLGLJNTRzEA2K34wbmOHC4fwYs9sVsdcCA== - crypt@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" @@ -5621,7 +5621,7 @@ globby@^9.2.0: pify "^4.0.1" slash "^2.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== @@ -6943,6 +6943,13 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +jszip@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-2.6.1.tgz#b88f3a7b2e67a2a048152982c7a3756d9c4828f0" + integrity sha1-uI86ey5noqBIFSmCx6N1bZxIKPA= + dependencies: + pako "~1.0.2" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -8238,6 +8245,11 @@ pac-resolver@^4.1.0: ip "^1.1.5" netmask "^1.0.6" +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== + parallel-transform@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" @@ -8626,7 +8638,7 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -q@^1.5.1: +q@^1.4.1, q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= @@ -10697,6 +10709,16 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +zip-local@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/zip-local/-/zip-local-0.3.4.tgz#e2931907257a946479ea5bd0d0e20adfeb2b5a07" + integrity sha1-4pMZByV6lGR56lvQ0OIK3+srWgc= + dependencies: + async "^1.4.2" + graceful-fs "^4.1.3" + jszip "^2.5.0" + q "^1.4.1" + zip-stream@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.0.4.tgz#3a8f100b73afaa7d1ae9338d910b321dec77ff3a" From d5b7a19cd603763f929aca0e320f7c7f1d3bb690 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 11 Jan 2021 20:39:41 -0500 Subject: [PATCH 250/481] Ran prettier --- README.md | 6 +++--- packages/resources/src/util/builder.ts | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index c68e38725c..76710ac3f7 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.c - Zero-config ES and TypeScript support using [esbuild](https://esbuild.github.io) - Allows you to use [CDK with Serverless Framework](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html) -Getting help: [**Slack**][slack] / [**Twitter**](https://twitter.com/ServerlessStack) / [**Forums**](https://discourse.serverless-stack.com/) +Getting help: [**Slack**][slack] / [**Twitter**](https://twitter.com/ServerlessStack) / [**Forums**](https://discourse.serverless-stack.com/) ## Quick Start @@ -233,7 +233,7 @@ The sample stack also comes with a Lambda function and API endpoint. The Lambda ```js new sst.Function(this, "Lambda", { - entry: "src/lambda.js" + entry: "src/lambda.js", }); ``` @@ -258,7 +258,7 @@ The first time you run this, it'll deploy your app and a stack that sets up the The sample stack will deploy a Lambda function with an API endpoint. You'll see something like this in the output. -``` bash +```bash Outputs: ApiEndpoint: https://s8gecmmzxf.execute-api.us-east-1.amazonaws.com ``` diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index 52a9044e8a..21d521f71e 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -115,8 +115,7 @@ export function builder(builderProps: BuilderProps): BuilderOutput { if (bundle) { outZip = zip(path.join(srcPath, buildDir)); outHandler = getHandlerString(entry, handler); - } - else { + } else { outZip = zip(srcPath); outHandler = `${buildDir}/${getHandlerString(entry, handler)}`; } From 0fab8ab33d6a8c56bae34a6b1feb86655371e928 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 11 Jan 2021 20:41:25 -0500 Subject: [PATCH 251/481] v1.0.0-alpha.12 --- lerna.json | 6 ++++-- packages/cli/package.json | 6 +++--- packages/cli/test/add-cdk/package.json | 4 ++-- packages/cli/test/base-ts/package.json | 6 +++--- packages/cli/test/base/package.json | 6 +++--- packages/cli/test/cdk-command/package.json | 6 +++--- packages/cli/test/config-invalid/package.json | 6 +++--- packages/cli/test/config-no-name/package.json | 6 +++--- packages/cli/test/config-not-found/package.json | 6 +++--- packages/cli/test/config/package.json | 6 +++--- packages/cli/test/context/package.json | 6 +++--- packages/cli/test/eslint-ignore-rule/package.json | 6 +++--- packages/cli/test/eslint-ignore/package.json | 6 +++--- packages/cli/test/eslint-ts/package.json | 6 +++--- packages/cli/test/eslint/package.json | 6 +++--- packages/cli/test/handler-function-not-found/package.json | 6 +++--- packages/cli/test/handler-not-found/package.json | 6 +++--- packages/cli/test/jest-ts/package.json | 6 +++--- packages/cli/test/jest/package.json | 6 +++--- packages/cli/test/lambda-override-eslintrc/package.json | 6 +++--- packages/cli/test/lambda-override-tsconfig/package.json | 6 +++--- packages/cli/test/mismatched-cdk-versions/package.json | 6 +++--- packages/cli/test/stack-no-prefix/package.json | 6 +++--- packages/cli/test/stack-set-env/package.json | 6 +++--- packages/cli/test/start-base/package.json | 6 +++--- packages/cli/test/start-no-src-path/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 29 files changed, 81 insertions(+), 79 deletions(-) diff --git a/lerna.json b/lerna.json index f4512eab8d..0eca008844 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,8 @@ { - "packages": ["packages/*"], + "packages": [ + "packages/*" + ], "npmClient": "yarn", "useWorkspaces": true, - "version": "1.0.0-alpha.11" + "version": "1.0.0-alpha.12" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 38577b7b47..556198d994 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -45,8 +45,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11", + "@serverless-stack/core": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index accb305c35..3f24465ebd 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-add-cdk", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "add-cdk": "sst add-cdk" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12" }, "license": "ISC" } diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index 8d80542304..02dfb4aa75 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -14,8 +14,8 @@ "dependencies": { "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index 5780924d1e..bdc0c4fc8d 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -18,8 +18,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC" } diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index 4475602bc0..ec5b388bed 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-cdk-command", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "cdk": "sst cdk" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC" } diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index d1a5f6d14f..e5a0824644 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-invalid", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC" } diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index 8af7bcb18f..6adbec4e31 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-no-name", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC" } diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index d62d9a6163..f51bb4a878 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC" } diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index 0961351b7c..000b99d402 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -2,15 +2,15 @@ "name": "@serverless-stack/cli-test-config-test", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC" } diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index 1a3a409796..6852909d3c 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -2,15 +2,15 @@ "name": "@serverless-stack/cli-test-context", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index a74d4bd5e0..dfc8ee4abd 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint-ignore-rule", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index b97a809995..fd0081f7b3 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint-ignore", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index 41b55e63e0..69bc8f7b62 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC" } diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index 1cf1a42785..4b72d3adb7 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC" } diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index d518fb7eb7..b364f4455b 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-handler-function-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC" } diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index 0f1ada24a7..2ff8443323 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-handler-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC" } diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index 1739149c9c..16c5bd7f21 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -19,8 +19,8 @@ "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/aws-sqs": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index 472126275f..8fd0940a13 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "test": "sst test" @@ -15,8 +15,8 @@ "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/lambda-override-eslintrc/package.json b/packages/cli/test/lambda-override-eslintrc/package.json index e9b355dff9..6ef4e1c69a 100644 --- a/packages/cli/test/lambda-override-eslintrc/package.json +++ b/packages/cli/test/lambda-override-eslintrc/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-eslintrc", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -12,8 +12,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC" } diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json index f5bd542c87..9f4448ae3d 100644 --- a/packages/cli/test/lambda-override-tsconfig/package.json +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-tsconfig", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -12,8 +12,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index 2567ce93b8..f4bd912dfd 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-mismatched-cdk-versions", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" @@ -13,8 +13,8 @@ "@aws-cdk/aws-iam": "1.57.0", "@aws-cdk/aws-s3": "^1.57.0", "@aws-cdk/core": "1.56.0", - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC" } diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index 5e29cbeeb8..4e5964698b 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -2,15 +2,15 @@ "name": "@serverless-stack/cli-test-stack-no-prefix", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC" } diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index e680b80175..3a314b30d5 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-stack-set-env", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC" } diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index 74c5acebed..4edee53fae 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-base", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -17,8 +17,8 @@ "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11" + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" }, "license": "ISC" } diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index 97796ad858..54b4b75e64 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-no-src-path", "private": true, "description": "tests", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -16,8 +16,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.11", - "@serverless-stack/resources": "^1.0.0-alpha.11", + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12", "mirrarray": "^2.0.0" }, "license": "ISC" diff --git a/packages/core/package.json b/packages/core/package.json index d7a31e665c..954882b2c8 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 927e02d0c3..dc215c3ad3 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 3d72a64471..5c86d8e406 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "1.0.0-alpha.11", + "version": "1.0.0-alpha.12", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 20d90483a50ece20387b36e2c9eb16b209cfb693 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 11 Jan 2021 21:02:01 -0500 Subject: [PATCH 252/481] Published v1.0.0-alpha.12 --- packages/cli/package.json | 2 +- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index 556198d994..88dd4f2f3d 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -71,5 +71,5 @@ "devDependencies": { "replace-in-file": "^6.1.0" }, - "gitHead": "0a586f786aca7e7d498a80c4dda680159831f959" + "gitHead": "0fab8ab33d6a8c56bae34a6b1feb86655371e928" } diff --git a/packages/core/package.json b/packages/core/package.json index 954882b2c8..7ad96a5767 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -23,5 +23,5 @@ "sst-cdk": "1.79.0-rc.1", "winston": "^3.3.3" }, - "gitHead": "0a586f786aca7e7d498a80c4dda680159831f959" + "gitHead": "0fab8ab33d6a8c56bae34a6b1feb86655371e928" } diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index dc215c3ad3..15b24b05a1 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -28,5 +28,5 @@ "cross-spawn": "^7.0.3", "yargs": "^15.4.1" }, - "gitHead": "0a586f786aca7e7d498a80c4dda680159831f959" + "gitHead": "0fab8ab33d6a8c56bae34a6b1feb86655371e928" } diff --git a/packages/resources/package.json b/packages/resources/package.json index 5c86d8e406..302b4b9aee 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -39,5 +39,5 @@ "@types/fs-extra": "^9.0.6", "@types/node": "^14.0.27" }, - "gitHead": "0a586f786aca7e7d498a80c4dda680159831f959" + "gitHead": "0fab8ab33d6a8c56bae34a6b1feb86655371e928" } From b6dee7f8197a3612c6aefa27c6e33ad6faf6a3fb Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 11 Jan 2021 21:04:50 -0500 Subject: [PATCH 253/481] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 76710ac3f7..d96045e85c 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Getting help: [**Slack**][slack] / [**Twitter**](https://twitter.com/ServerlessS Create your first SST app. ```bash -$ npx create-serverless-stack resources my-sst-app +$ npx create-serverless-stack@latest my-sst-app $ cd my-sst-app $ npx sst start ``` From 8d4466549b7904f5eef284afdf983d03770f8a97 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 11 Jan 2021 21:52:48 -0500 Subject: [PATCH 254/481] Stop esbuild service when testing --- lerna.json | 4 +--- packages/cli/scripts/start.js | 6 ++++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lerna.json b/lerna.json index 0eca008844..5408f89b17 100644 --- a/lerna.json +++ b/lerna.json @@ -1,7 +1,5 @@ { - "packages": [ - "packages/*" - ], + "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, "version": "1.0.0-alpha.12" diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index ad93dddb12..5079955af3 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -251,11 +251,17 @@ async function startBuilder(cdkInputFiles) { }); } function stopBuilder() { + // Stop esbuild rebuild processes Object.keys(builderState.entryPointsData).forEach((key) => { if (builderState.entryPointsData[key].esbuilder !== null) { builderState.entryPointsData[key].esbuilder.rebuild.dispose(); } }); + + // Stop esbuild service + if (esbuildService) { + esbuildService.stop(); + } } async function updateBuilder() { builderLogger.silly(serializeState()); From 3629334968b249e6682106ebed806269abeb9c07 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 11 Jan 2021 22:09:45 -0500 Subject: [PATCH 255/481] Fixing versions --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/cli/test/add-cdk/package.json | 4 ++-- packages/cli/test/base-ts/package.json | 6 +++--- packages/cli/test/base/package.json | 6 +++--- packages/cli/test/cdk-command/package.json | 6 +++--- packages/cli/test/config-invalid/package.json | 6 +++--- packages/cli/test/config-no-name/package.json | 6 +++--- packages/cli/test/config-not-found/package.json | 6 +++--- packages/cli/test/config/package.json | 6 +++--- packages/cli/test/context/package.json | 6 +++--- packages/cli/test/eslint-ignore-rule/package.json | 6 +++--- packages/cli/test/eslint-ignore/package.json | 6 +++--- packages/cli/test/eslint-ts/package.json | 6 +++--- packages/cli/test/eslint/package.json | 6 +++--- packages/cli/test/handler-function-not-found/package.json | 6 +++--- packages/cli/test/handler-not-found/package.json | 6 +++--- packages/cli/test/jest-ts/package.json | 6 +++--- packages/cli/test/jest/package.json | 6 +++--- packages/cli/test/lambda-override-eslintrc/package.json | 6 +++--- packages/cli/test/mismatched-cdk-versions/package.json | 6 +++--- packages/cli/test/stack-no-prefix/package.json | 6 +++--- packages/cli/test/stack-set-env/package.json | 6 +++--- packages/cli/test/start-base/package.json | 6 +++--- packages/cli/test/start-no-src-path/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 28 files changed, 75 insertions(+), 75 deletions(-) diff --git a/lerna.json b/lerna.json index 5408f89b17..ba22d9f846 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "1.0.0-alpha.12" + "version": "0.4.5" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 88dd4f2f3d..667f64cf9c 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -45,8 +45,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12", + "@serverless-stack/core": "^0.4.5", + "@serverless-stack/resources": "^0.4.5", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index 3f24465ebd..9b3d39d2fc 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-add-cdk", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "add-cdk": "sst add-cdk" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5" }, "license": "ISC" } diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index 02dfb4aa75..038daf6158 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -14,8 +14,8 @@ "dependencies": { "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index bdc0c4fc8d..36d050fa63 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -18,8 +18,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC" } diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index ec5b388bed..f8c917d982 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-cdk-command", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "cdk": "sst cdk" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC" } diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index e5a0824644..ef66b9f053 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-invalid", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC" } diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index 6adbec4e31..6d0d16473b 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-no-name", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC" } diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index f51bb4a878..4392b8a03b 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC" } diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index 000b99d402..a05356b0e7 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -2,15 +2,15 @@ "name": "@serverless-stack/cli-test-config-test", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC" } diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index 6852909d3c..3179c56223 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -2,15 +2,15 @@ "name": "@serverless-stack/cli-test-context", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index dfc8ee4abd..b51717061e 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint-ignore-rule", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index fd0081f7b3..c9f6a031bc 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint-ignore", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index 69bc8f7b62..3fc340d4cc 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC" } diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index 4b72d3adb7..302c30cfcf 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC" } diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index b364f4455b..a26681c19f 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-handler-function-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC" } diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index 2ff8443323..b0258d9cc1 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-handler-not-found", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC" } diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index 16c5bd7f21..5aea4fbc90 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest-ts", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -19,8 +19,8 @@ "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/aws-sqs": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index 8fd0940a13..9c26a72371 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "test": "sst test" @@ -15,8 +15,8 @@ "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/lambda-override-eslintrc/package.json b/packages/cli/test/lambda-override-eslintrc/package.json index 6ef4e1c69a..eee532c05a 100644 --- a/packages/cli/test/lambda-override-eslintrc/package.json +++ b/packages/cli/test/lambda-override-eslintrc/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-eslintrc", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -12,8 +12,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC" } diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index f4bd912dfd..4863e36b3a 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-mismatched-cdk-versions", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" @@ -13,8 +13,8 @@ "@aws-cdk/aws-iam": "1.57.0", "@aws-cdk/aws-s3": "^1.57.0", "@aws-cdk/core": "1.56.0", - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC" } diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index 4e5964698b..0088c9543f 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -2,15 +2,15 @@ "name": "@serverless-stack/cli-test-stack-no-prefix", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC" } diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index 3a314b30d5..bc89bbb930 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-stack-set-env", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC" } diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index 4edee53fae..011e069bf9 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-base", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -17,8 +17,8 @@ "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5" }, "license": "ISC" } diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index 54b4b75e64..dec01e10e4 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-no-src-path", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -16,8 +16,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12", + "@serverless-stack/cli": "^0.4.5", + "@serverless-stack/resources": "^0.4.5", "mirrarray": "^2.0.0" }, "license": "ISC" diff --git a/packages/core/package.json b/packages/core/package.json index 7ad96a5767..a8be7db4ae 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 15b24b05a1..8b5afc2cce 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 302b4b9aee..3e9e4102b4 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "1.0.0-alpha.12", + "version": "0.4.5", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 1c4cbe032c3d921772eff8dacf12c53019660652 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 11 Jan 2021 22:10:43 -0500 Subject: [PATCH 256/481] v0.5.0 --- lerna.json | 6 ++++-- packages/cli/package.json | 6 +++--- packages/cli/test/add-cdk/package.json | 4 ++-- packages/cli/test/base-ts/package.json | 6 +++--- packages/cli/test/base/package.json | 6 +++--- packages/cli/test/cdk-command/package.json | 6 +++--- packages/cli/test/config-invalid/package.json | 6 +++--- packages/cli/test/config-no-name/package.json | 6 +++--- packages/cli/test/config-not-found/package.json | 6 +++--- packages/cli/test/config/package.json | 6 +++--- packages/cli/test/context/package.json | 6 +++--- packages/cli/test/eslint-ignore-rule/package.json | 6 +++--- packages/cli/test/eslint-ignore/package.json | 6 +++--- packages/cli/test/eslint-ts/package.json | 6 +++--- packages/cli/test/eslint/package.json | 6 +++--- packages/cli/test/handler-function-not-found/package.json | 6 +++--- packages/cli/test/handler-not-found/package.json | 6 +++--- packages/cli/test/jest-ts/package.json | 6 +++--- packages/cli/test/jest/package.json | 6 +++--- packages/cli/test/lambda-override-eslintrc/package.json | 6 +++--- packages/cli/test/lambda-override-tsconfig/package.json | 2 +- packages/cli/test/mismatched-cdk-versions/package.json | 6 +++--- packages/cli/test/stack-no-prefix/package.json | 6 +++--- packages/cli/test/stack-set-env/package.json | 6 +++--- packages/cli/test/start-base/package.json | 6 +++--- packages/cli/test/start-no-src-path/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 29 files changed, 79 insertions(+), 77 deletions(-) diff --git a/lerna.json b/lerna.json index ba22d9f846..bf09eb32c5 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,8 @@ { - "packages": ["packages/*"], + "packages": [ + "packages/*" + ], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.4.5" + "version": "0.5.0" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 667f64cf9c..6aa870e6ec 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.4.5", + "version": "0.5.0", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -45,8 +45,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^0.4.5", - "@serverless-stack/resources": "^0.4.5", + "@serverless-stack/core": "^0.5.0", + "@serverless-stack/resources": "^0.5.0", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index 9b3d39d2fc..39003bb57b 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-add-cdk", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "add-cdk": "sst add-cdk" }, "dependencies": { - "@serverless-stack/cli": "^0.4.5" + "@serverless-stack/cli": "^0.5.0" }, "license": "ISC" } diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index 038daf6158..be590c628a 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base-ts", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -14,8 +14,8 @@ "dependencies": { "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index 36d050fa63..09576c85ba 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -18,8 +18,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index f8c917d982..de0291ffac 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-cdk-command", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "cdk": "sst cdk" }, "dependencies": { - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index ef66b9f053..7e471e7057 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-invalid", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index 6d0d16473b..31bc460d13 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-no-name", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index 4392b8a03b..5f0d5d1eef 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-not-found", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index a05356b0e7..44593a651c 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -2,15 +2,15 @@ "name": "@serverless-stack/cli-test-config-test", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index 3179c56223..b195d60d93 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -2,15 +2,15 @@ "name": "@serverless-stack/cli-test-context", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index b51717061e..ae801da7ca 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint-ignore-rule", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index c9f6a031bc..af199a8ba0 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint-ignore", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index 3fc340d4cc..f6fceb44bb 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint-ts", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index 302c30cfcf..b6719e5619 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-eslint", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index a26681c19f..28ea101f55 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-handler-function-not-found", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index b0258d9cc1..a19417527f 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-handler-not-found", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index 5aea4fbc90..bc7e3bb831 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest-ts", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -19,8 +19,8 @@ "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/aws-sqs": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index 9c26a72371..3c83e8b4ac 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "test": "sst test" @@ -15,8 +15,8 @@ "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/lambda-override-eslintrc/package.json b/packages/cli/test/lambda-override-eslintrc/package.json index eee532c05a..d0ca914bef 100644 --- a/packages/cli/test/lambda-override-eslintrc/package.json +++ b/packages/cli/test/lambda-override-eslintrc/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-eslintrc", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", @@ -12,8 +12,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json index 9f4448ae3d..c1c29b344b 100644 --- a/packages/cli/test/lambda-override-tsconfig/package.json +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-tsconfig", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index 4863e36b3a..394c40b0cb 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-mismatched-cdk-versions", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" @@ -13,8 +13,8 @@ "@aws-cdk/aws-iam": "1.57.0", "@aws-cdk/aws-s3": "^1.57.0", "@aws-cdk/core": "1.56.0", - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index 0088c9543f..55a2f3d4c9 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -2,15 +2,15 @@ "name": "@serverless-stack/cli-test-stack-no-prefix", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index bc89bbb930..d9a141554e 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-stack-set-env", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index 011e069bf9..8ea2fd7843 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-base", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -17,8 +17,8 @@ "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index dec01e10e4..a210516940 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-no-src-path", "private": true, "description": "tests", - "version": "0.4.5", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", @@ -16,8 +16,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.4.5", - "@serverless-stack/resources": "^0.4.5", + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0", "mirrarray": "^2.0.0" }, "license": "ISC" diff --git a/packages/core/package.json b/packages/core/package.json index a8be7db4ae..5f45ab4432 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.4.5", + "version": "0.5.0", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 8b5afc2cce..ffd5da8a2b 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.4.5", + "version": "0.5.0", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 3e9e4102b4..ff81571040 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.4.5", + "version": "0.5.0", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 7c5729bf1461b2a287bd1614e137caa27ae4f4c3 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 12 Jan 2021 00:16:12 -0500 Subject: [PATCH 257/481] Adding slack badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d96045e85c..d248fbb64c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Serverless Stack Toolkit (SST) [![npm](https://img.shields.io/npm/v/@serverless-stack/cli.svg)](https://www.npmjs.com/package/@serverless-stack/cli) [![Build Status](https://github.com/serverless-stack/serverless-stack/workflows/CI/badge.svg)](https://github.com/serverless-stack/serverless-stack/actions) +# Serverless Stack Toolkit (SST) [![Slack](https://img.shields.io/badge/Slack-chat-blue.svg)][slack] [![npm](https://img.shields.io/npm/v/@serverless-stack/cli.svg)](https://www.npmjs.com/package/@serverless-stack/cli) [![Build Status](https://github.com/serverless-stack/serverless-stack/workflows/CI/badge.svg)](https://github.com/serverless-stack/serverless-stack/actions) Logo From 6e445442575e263a25dc4d9781039ed6fce2b169 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 13 Jan 2021 21:29:05 -0500 Subject: [PATCH 258/481] Adding start-guide test case to test migrating the guide to use SST --- packages/cli/test/start-guide/lib/ApiStack.js | 60 +++++++++ .../test/start-guide/lib/CognitoAuthRole.js | 50 +++++++ .../cli/test/start-guide/lib/CognitoStack.js | 77 +++++++++++ .../cli/test/start-guide/lib/DynamoDBStack.js | 17 +++ packages/cli/test/start-guide/lib/S3Stack.js | 29 ++++ packages/cli/test/start-guide/lib/index.js | 47 +++++++ packages/cli/test/start-guide/package.json | 27 ++++ .../start-guide/services/notes/billing.js | 21 +++ .../test/start-guide/services/notes/create.js | 22 +++ .../test/start-guide/services/notes/delete.js | 17 +++ .../test/start-guide/services/notes/get.js | 21 +++ .../services/notes/libs/billing-lib.js | 5 + .../services/notes/libs/debug-lib.js | 30 +++++ .../services/notes/libs/dynamodb-lib.js | 11 ++ .../services/notes/libs/handler-lib.js | 32 +++++ .../test/start-guide/services/notes/list.js | 22 +++ .../services/notes/mocks/billing-event.json | 8 ++ .../services/notes/mocks/create-event.json | 8 ++ .../services/notes/mocks/delete-event.json | 10 ++ .../services/notes/mocks/get-event.json | 10 ++ .../services/notes/mocks/list-event.json | 7 + .../services/notes/mocks/update-event.json | 11 ++ .../start-guide/services/notes/package.json | 22 +++ .../services/notes/tests/billing.test.js | 28 ++++ .../test/start-guide/services/notes/update.js | 29 ++++ .../test/start-guide/services/notes/yarn.lock | 126 ++++++++++++++++++ packages/cli/test/start-guide/sst.json | 5 + 27 files changed, 752 insertions(+) create mode 100644 packages/cli/test/start-guide/lib/ApiStack.js create mode 100644 packages/cli/test/start-guide/lib/CognitoAuthRole.js create mode 100644 packages/cli/test/start-guide/lib/CognitoStack.js create mode 100644 packages/cli/test/start-guide/lib/DynamoDBStack.js create mode 100644 packages/cli/test/start-guide/lib/S3Stack.js create mode 100644 packages/cli/test/start-guide/lib/index.js create mode 100644 packages/cli/test/start-guide/package.json create mode 100644 packages/cli/test/start-guide/services/notes/billing.js create mode 100644 packages/cli/test/start-guide/services/notes/create.js create mode 100644 packages/cli/test/start-guide/services/notes/delete.js create mode 100644 packages/cli/test/start-guide/services/notes/get.js create mode 100644 packages/cli/test/start-guide/services/notes/libs/billing-lib.js create mode 100644 packages/cli/test/start-guide/services/notes/libs/debug-lib.js create mode 100644 packages/cli/test/start-guide/services/notes/libs/dynamodb-lib.js create mode 100644 packages/cli/test/start-guide/services/notes/libs/handler-lib.js create mode 100644 packages/cli/test/start-guide/services/notes/list.js create mode 100644 packages/cli/test/start-guide/services/notes/mocks/billing-event.json create mode 100644 packages/cli/test/start-guide/services/notes/mocks/create-event.json create mode 100644 packages/cli/test/start-guide/services/notes/mocks/delete-event.json create mode 100644 packages/cli/test/start-guide/services/notes/mocks/get-event.json create mode 100644 packages/cli/test/start-guide/services/notes/mocks/list-event.json create mode 100644 packages/cli/test/start-guide/services/notes/mocks/update-event.json create mode 100644 packages/cli/test/start-guide/services/notes/package.json create mode 100644 packages/cli/test/start-guide/services/notes/tests/billing.test.js create mode 100644 packages/cli/test/start-guide/services/notes/update.js create mode 100644 packages/cli/test/start-guide/services/notes/yarn.lock create mode 100644 packages/cli/test/start-guide/sst.json diff --git a/packages/cli/test/start-guide/lib/ApiStack.js b/packages/cli/test/start-guide/lib/ApiStack.js new file mode 100644 index 0000000000..d66e51b98b --- /dev/null +++ b/packages/cli/test/start-guide/lib/ApiStack.js @@ -0,0 +1,60 @@ +import * as cdk from "@aws-cdk/core"; +import { PolicyStatement } from "@aws-cdk/aws-iam"; +import { HttpApi, HttpRoute, HttpRouteKey } from "@aws-cdk/aws-apigatewayv2"; +import { LambdaProxyIntegration } from "@aws-cdk/aws-apigatewayv2-integrations"; + +import { Stack, Function } from "@serverless-stack/resources"; + +export default class ApiStack extends Stack { + constructor(scope, id, props) { + super(scope, id, props); + + const { routes = [], cors, environment, policyStatements = [] } = props; + + // Create API + let corsPreflight; + if (cors) { + corsPreflight = { + allowHeaders: ['*'], + allowMethods: ['*'], + allowOrigins: ['*'], + }; + } + const api = new HttpApi(this, "Api", { + corsPreflight, + // defaultDomainMapping: { + // domainName: domain, + // }, + }); + + // Create routes + const initialPolicy = policyStatements.map(statement => new PolicyStatement(statement)); + routes.forEach(([ path, method, srcPath, entry, handler, auth ]) => { + const lambda = new Function(this, `Lambda_${method}_${path}`, { + srcPath, + entry, + handler, + environment, + initialPolicy, + }); + const route = new HttpRoute(this, `Route_${method}_${path}`, { + httpApi: api, + routeKey: HttpRouteKey.with(path, method), + integration: new LambdaProxyIntegration({ + handler: lambda, + }), + }); + + if (auth === 'aws_iam') { + route.node.defaultChild.authorizationType = 'AWS_IAM'; + } + }); + + this.api = api; + + // Show API endpoint in output + new cdk.CfnOutput(this, "ApiEndpoint", { + value: api.apiEndpoint, + }); + } +} diff --git a/packages/cli/test/start-guide/lib/CognitoAuthRole.js b/packages/cli/test/start-guide/lib/CognitoAuthRole.js new file mode 100644 index 0000000000..974e372ce0 --- /dev/null +++ b/packages/cli/test/start-guide/lib/CognitoAuthRole.js @@ -0,0 +1,50 @@ +import * as cdk from "@aws-cdk/core"; +import * as iam from "@aws-cdk/aws-iam"; +import * as cognito from "@aws-cdk/aws-cognito"; + +export default class CognitoAuthRole extends cdk.Construct { + // Public reference to the IAM role + role; + + constructor(scope, id, props) { + super(scope, id); + + const { identityPool } = props; + + // IAM role used for authenticated users + this.role = new iam.Role(this, "CognitoDefaultAuthenticatedRole", { + assumedBy: new iam.FederatedPrincipal( + "cognito-identity.amazonaws.com", + { + StringEquals: { + "cognito-identity.amazonaws.com:aud": identityPool.ref, + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "authenticated", + }, + }, + "sts:AssumeRoleWithWebIdentity" + ), + }); + this.role.addToPolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: [ + "mobileanalytics:PutEvents", + "cognito-sync:*", + "cognito-identity:*", + ], + resources: ["*"], + }) + ); + + new cognito.CfnIdentityPoolRoleAttachment( + this, + "IdentityPoolRoleAttachment", + { + identityPoolId: identityPool.ref, + roles: { authenticated: this.role.roleArn }, + } + ); + } +} diff --git a/packages/cli/test/start-guide/lib/CognitoStack.js b/packages/cli/test/start-guide/lib/CognitoStack.js new file mode 100644 index 0000000000..45e4e5b666 --- /dev/null +++ b/packages/cli/test/start-guide/lib/CognitoStack.js @@ -0,0 +1,77 @@ +import { CfnOutput } from "@aws-cdk/core"; +import * as iam from "@aws-cdk/aws-iam"; +import * as cognito from "@aws-cdk/aws-cognito"; +import * as sst from "@serverless-stack/resources"; +import CognitoAuthRole from "./CognitoAuthRole"; + +export default class CognitoStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + const { apiId, bucketArn } = props; + + const app = this.node.root; + const { account, region } = sst.Stack.of(this); + + const userPool = new cognito.UserPool(this, "UserPool", { + selfSignUpEnabled: true, // Allow users to sign up + autoVerify: { email: true }, // Verify email addresses by sending a verification code + signInAliases: { email: true }, // Set email as an alias + }); + + const userPoolClient = new cognito.UserPoolClient(this, "UserPoolClient", { + userPool, + generateSecret: false, // Don't need to generate secret for web app running on browsers + }); + + const identityPool = new cognito.CfnIdentityPool(this, "IdentityPool", { + allowUnauthenticatedIdentities: false, // Don't allow unathenticated users + cognitoIdentityProviders: [ + { + clientId: userPoolClient.userPoolClientId, + providerName: userPool.userPoolProviderName, + }, + ], + }); + + const authenticatedRole = new CognitoAuthRole(this, "CognitoAuthRole", { + identityPool, + }); + + authenticatedRole.role.addToPolicy( + // IAM policy granting users permission to a specific folder in the S3 bucket + new iam.PolicyStatement({ + actions: ["s3:*"], + effect: iam.Effect.ALLOW, + resources: [ + bucketArn + "/private/${cognito-identity.amazonaws.com:sub}/*", + ], + }) + ); + authenticatedRole.role.addToPolicy( + // IAM policy granting users permission to invoke the API + new iam.PolicyStatement({ + actions: ["execute-api:Invoke"], + effect: iam.Effect.ALLOW, + resources: [ + `arn:aws:execute-api:${region}:${account}:${apiId}/*`, + ], + }) + ); + + // Export values + new CfnOutput(this, "UserPoolId", { + value: userPool.userPoolId, + }); + new CfnOutput(this, "UserPoolClientId", { + value: userPoolClient.userPoolClientId, + }); + new CfnOutput(this, "IdentityPoolId", { + value: identityPool.ref, + }); + new CfnOutput(this, "AuthenticatedRoleName", { + value: authenticatedRole.role.roleName, + exportName: app.logicalPrefixedName("CognitoAuthRole"), + }); + } +} diff --git a/packages/cli/test/start-guide/lib/DynamoDBStack.js b/packages/cli/test/start-guide/lib/DynamoDBStack.js new file mode 100644 index 0000000000..407d634014 --- /dev/null +++ b/packages/cli/test/start-guide/lib/DynamoDBStack.js @@ -0,0 +1,17 @@ +import * as dynamodb from "@aws-cdk/aws-dynamodb"; +import * as sst from "@serverless-stack/resources"; + +export default class DynamoDBStack extends sst.Stack { + // Public reference to the DB table + table; + + constructor(scope, id, props) { + super(scope, id, props); + + this.table = new dynamodb.Table(this, "Table", { + billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, // Use on-demand billing mode + sortKey: { name: "noteId", type: dynamodb.AttributeType.STRING }, + partitionKey: { name: "userId", type: dynamodb.AttributeType.STRING }, + }); + } +} diff --git a/packages/cli/test/start-guide/lib/S3Stack.js b/packages/cli/test/start-guide/lib/S3Stack.js new file mode 100644 index 0000000000..69d379502d --- /dev/null +++ b/packages/cli/test/start-guide/lib/S3Stack.js @@ -0,0 +1,29 @@ +import * as cdk from "@aws-cdk/core"; +import * as s3 from "@aws-cdk/aws-s3"; +import * as sst from "@serverless-stack/resources"; + +export default class S3Stack extends sst.Stack { + // Public reference to the S3 bucket + bucket; + + constructor(scope, id, props) { + super(scope, id, props); + + this.bucket = new s3.Bucket(this, "Uploads", { + // Allow client side access to the bucket from a different domain + cors: [ + { + maxAge: 3000, + allowedOrigins: ["*"], + allowedHeaders: ["*"], + allowedMethods: ["GET", "PUT", "POST", "DELETE", "HEAD"], + }, + ], + }); + + // Export values + new cdk.CfnOutput(this, "AttachmentsBucketName", { + value: this.bucket.bucketName, + }); + } +} diff --git a/packages/cli/test/start-guide/lib/index.js b/packages/cli/test/start-guide/lib/index.js new file mode 100644 index 0000000000..dcf442980b --- /dev/null +++ b/packages/cli/test/start-guide/lib/index.js @@ -0,0 +1,47 @@ +import S3Stack from "./S3Stack"; +import CognitoStack from "./CognitoStack"; +import DynamoDBStack from "./DynamoDBStack"; +import ApiStack from "./ApiStack"; +import * as iam from "@aws-cdk/aws-iam"; + +// Add stacks +export default function main(app) { + const dbStack = new DynamoDBStack(app, "dynamodb"); + + const s3Stack = new S3Stack(app, "s3"); + + const apiStack = new ApiStack(app, "api", { + routes: [ + // PATH , METHOD , srcPath , entry , handler, AUTH ], + [ "/notes" , "GET" , "services/notes", "list.js" , "main" , "aws_iam" ], + [ "/notes" , "POST" , "services/notes", "create.js" , "main" , "aws_iam" ], + [ "/notes/{id}" , "GET" , "services/notes", "get.js" , "main" , "aws_iam" ], + [ "/notes/{id}" , "PUT" , "services/notes", "update.js" , "main" , "aws_iam" ], + [ "/notes/{id}" , "DELETE" , "services/notes", "delete.js" , "main" , "aws_iam" ], + ], + cors: true, + //memory: 1024, + //timeout: 20, + environment: { + tableName: dbStack.table.tableName, + }, + policyStatements: [{ + actions: [ + "dynamodb:Scan", + "dynamodb:Query", + "dynamodb:GetItem", + "dynamodb:PutItem", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem", + "dynamodb:DescribeTable", + ], + effect: iam.Effect.ALLOW, + resources: [ dbStack.table.tableArn ], + }], + }); + + new CognitoStack(app, "cognito", { + apiId: apiStack.api.httpApiId, + bucketArn: s3Stack.bucket.bucketArn, + }); +} diff --git a/packages/cli/test/start-guide/package.json b/packages/cli/test/start-guide/package.json new file mode 100644 index 0000000000..71a6a57a95 --- /dev/null +++ b/packages/cli/test/start-guide/package.json @@ -0,0 +1,27 @@ +{ + "name": "@serverless-stack/cli-test-start-guide", + "private": true, + "description": "tests", + "version": "1.0.0-alpha.12", + "scripts": { + "postinstall": "node ../helpers/copy-symlinks.js", + "add-package": "sst add-package", + "start": "sst start", + "build": "sst build", + "deploy": "sst deploy", + "remove": "sst remove", + "cdk": "sst cdk" + }, + "dependencies": { + "@aws-cdk/aws-apigatewayv2": "1.79.0", + "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", + "@aws-cdk/aws-cognito": "1.79.0", + "@aws-cdk/aws-dynamodb": "1.79.0", + "@aws-cdk/aws-iam": "1.79.0", + "@aws-cdk/aws-s3": "1.79.0", + "@aws-cdk/core": "1.79.0", + "@serverless-stack/cli": "^1.0.0-alpha.12", + "@serverless-stack/resources": "^1.0.0-alpha.12" + }, + "license": "ISC" +} diff --git a/packages/cli/test/start-guide/services/notes/billing.js b/packages/cli/test/start-guide/services/notes/billing.js new file mode 100644 index 0000000000..05c05a1567 --- /dev/null +++ b/packages/cli/test/start-guide/services/notes/billing.js @@ -0,0 +1,21 @@ +import stripePackage from "stripe"; +import handler from "./libs/handler-lib"; +import { calculateCost } from "./libs/billing-lib"; + +export const main = handler(async (event) => { + const { storage, source } = JSON.parse(event.body); + const amount = calculateCost(storage); + const description = "Scratch charge"; + + // Load our secret key from the environment variables + const stripe = stripePackage(process.env.stripeSecretKey); + + await stripe.charges.create({ + source, + amount, + description, + currency: "usd", + }); + + return { status: true }; +}); diff --git a/packages/cli/test/start-guide/services/notes/create.js b/packages/cli/test/start-guide/services/notes/create.js new file mode 100644 index 0000000000..9ef33133ff --- /dev/null +++ b/packages/cli/test/start-guide/services/notes/create.js @@ -0,0 +1,22 @@ +import * as uuid from "uuid"; +import handler from "./libs/handler-lib"; +import dynamoDb from "./libs/dynamodb-lib"; + +export const main = handler(async (event) => { + const data = JSON.parse(event.body); + const params = { + TableName: process.env.tableName, + Item: { + // The attributes of the item to be created + userId: event.requestContext.authorizer.iam.cognitoIdentity.identityId, // The id of the author + noteId: uuid.v1(), // A unique uuid + content: data.content, // Parsed from request body + attachment: data.attachment, // Parsed from request body + createdAt: Date.now(), // Current Unix timestamp + }, + }; + + await dynamoDb.put(params); + + return params.Item; +}); diff --git a/packages/cli/test/start-guide/services/notes/delete.js b/packages/cli/test/start-guide/services/notes/delete.js new file mode 100644 index 0000000000..995b4e7711 --- /dev/null +++ b/packages/cli/test/start-guide/services/notes/delete.js @@ -0,0 +1,17 @@ +import handler from "./libs/handler-lib"; +import dynamoDb from "./libs/dynamodb-lib"; + +export const main = handler(async (event) => { + const params = { + TableName: process.env.tableName, + // 'Key' defines the partition key and sort key of the item to be removed + Key: { + userId: event.requestContext.authorizer.iam.cognitoIdentity.identityId, // The id of the author + noteId: event.pathParameters.id, // The id of the note from the path + }, + }; + + await dynamoDb.delete(params); + + return { status: true }; +}); diff --git a/packages/cli/test/start-guide/services/notes/get.js b/packages/cli/test/start-guide/services/notes/get.js new file mode 100644 index 0000000000..f16589bac6 --- /dev/null +++ b/packages/cli/test/start-guide/services/notes/get.js @@ -0,0 +1,21 @@ +import handler from "./libs/handler-lib"; +import dynamoDb from "./libs/dynamodb-lib"; + +export const main = handler(async (event) => { + const params = { + TableName: process.env.tableName, + // 'Key' defines the partition key and sort key of the item to be retrieved + Key: { + userId: event.requestContext.authorizer.iam.cognitoIdentity.identityId, // The id of the author + noteId: event.pathParameters.id, // The id of the note from the path + }, + }; + + const result = await dynamoDb.get(params); + if (!result.Item) { + throw new Error("Item not found."); + } + + // Return the retrieved item + return result.Item; +}); diff --git a/packages/cli/test/start-guide/services/notes/libs/billing-lib.js b/packages/cli/test/start-guide/services/notes/libs/billing-lib.js new file mode 100644 index 0000000000..5d957aa6ab --- /dev/null +++ b/packages/cli/test/start-guide/services/notes/libs/billing-lib.js @@ -0,0 +1,5 @@ +export function calculateCost(storage) { + const rate = storage <= 10 ? 4 : storage <= 100 ? 2 : 1; + + return rate * storage * 100; +} diff --git a/packages/cli/test/start-guide/services/notes/libs/debug-lib.js b/packages/cli/test/start-guide/services/notes/libs/debug-lib.js new file mode 100644 index 0000000000..56bdd9e91e --- /dev/null +++ b/packages/cli/test/start-guide/services/notes/libs/debug-lib.js @@ -0,0 +1,30 @@ +import util from "util"; +import AWS from "aws-sdk"; + +let logs; + +// Log AWS SDK calls +AWS.config.logger = { log: debug }; + +export default function debug() { + logs.push({ + date: new Date(), + string: util.format.apply(null, arguments), + }); +} + +export function init(event) { + logs = []; + + // Log API event + debug("API event", { + body: event.body, + pathParameters: event.pathParameters, + queryStringParameters: event.queryStringParameters, + }); +} + +export function flush(e) { + logs.forEach(({ date, string }) => console.debug(date, string)); + console.error(e); +} diff --git a/packages/cli/test/start-guide/services/notes/libs/dynamodb-lib.js b/packages/cli/test/start-guide/services/notes/libs/dynamodb-lib.js new file mode 100644 index 0000000000..6e2dec41b7 --- /dev/null +++ b/packages/cli/test/start-guide/services/notes/libs/dynamodb-lib.js @@ -0,0 +1,11 @@ +import AWS from "aws-sdk"; + +const client = new AWS.DynamoDB.DocumentClient(); + +export default { + get: (params) => client.get(params).promise(), + put: (params) => client.put(params).promise(), + query: (params) => client.query(params).promise(), + update: (params) => client.update(params).promise(), + delete: (params) => client.delete(params).promise(), +}; diff --git a/packages/cli/test/start-guide/services/notes/libs/handler-lib.js b/packages/cli/test/start-guide/services/notes/libs/handler-lib.js new file mode 100644 index 0000000000..6f64b92906 --- /dev/null +++ b/packages/cli/test/start-guide/services/notes/libs/handler-lib.js @@ -0,0 +1,32 @@ +import * as debug from "./debug-lib"; + +export default function handler(lambda) { + return async function (event, context) { + let body, statusCode; + + // Start debugger + debug.init(event, context); + + try { + // Run the Lambda + body = await lambda(event, context); + statusCode = 200; + } catch (e) { + // Print debug messages + debug.flush(e); + + body = { error: e.message }; + statusCode = 500; + } + + // Return HTTP response + return { + statusCode, + body: JSON.stringify(body), + headers: { + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Credentials": true, + }, + }; + }; +} diff --git a/packages/cli/test/start-guide/services/notes/list.js b/packages/cli/test/start-guide/services/notes/list.js new file mode 100644 index 0000000000..9be3d2be50 --- /dev/null +++ b/packages/cli/test/start-guide/services/notes/list.js @@ -0,0 +1,22 @@ +import handler from "./libs/handler-lib"; +import dynamoDb from "./libs/dynamodb-lib"; + +export const main = handler(async (event) => { + const params = { + TableName: process.env.tableName, + // 'KeyConditionExpression' defines the condition for the query + // - 'userId = :userId': only return items with matching 'userId' + // partition key + KeyConditionExpression: "userId = :userId", + // 'ExpressionAttributeValues' defines the value in the condition + // - ':userId': defines 'userId' to be the id of the author + ExpressionAttributeValues: { + ":userId": event.requestContext.authorizer.iam.cognitoIdentity.identityId, + }, + }; + + const result = await dynamoDb.query(params); + + // Return the matching list of items in response body + return result.Items; +}); diff --git a/packages/cli/test/start-guide/services/notes/mocks/billing-event.json b/packages/cli/test/start-guide/services/notes/mocks/billing-event.json new file mode 100644 index 0000000000..c454418be5 --- /dev/null +++ b/packages/cli/test/start-guide/services/notes/mocks/billing-event.json @@ -0,0 +1,8 @@ +{ + "body": "{\"source\":\"tok_visa\",\"storage\":21}", + "requestContext": { + "identity": { + "cognitoIdentityId": "USER-SUB-1234" + } + } +} diff --git a/packages/cli/test/start-guide/services/notes/mocks/create-event.json b/packages/cli/test/start-guide/services/notes/mocks/create-event.json new file mode 100644 index 0000000000..e2527992ca --- /dev/null +++ b/packages/cli/test/start-guide/services/notes/mocks/create-event.json @@ -0,0 +1,8 @@ +{ + "body": "{\"content\":\"hello world\",\"attachment\":\"hello.jpg\"}", + "requestContext": { + "identity": { + "cognitoIdentityId": "USER-SUB-1234" + } + } +} diff --git a/packages/cli/test/start-guide/services/notes/mocks/delete-event.json b/packages/cli/test/start-guide/services/notes/mocks/delete-event.json new file mode 100644 index 0000000000..d58a5e9cea --- /dev/null +++ b/packages/cli/test/start-guide/services/notes/mocks/delete-event.json @@ -0,0 +1,10 @@ +{ + "pathParameters": { + "id": "2b82e2c0-793f-11ea-9602-6d514f529482" + }, + "requestContext": { + "identity": { + "cognitoIdentityId": "USER-SUB-1234" + } + } +} diff --git a/packages/cli/test/start-guide/services/notes/mocks/get-event.json b/packages/cli/test/start-guide/services/notes/mocks/get-event.json new file mode 100644 index 0000000000..d58a5e9cea --- /dev/null +++ b/packages/cli/test/start-guide/services/notes/mocks/get-event.json @@ -0,0 +1,10 @@ +{ + "pathParameters": { + "id": "2b82e2c0-793f-11ea-9602-6d514f529482" + }, + "requestContext": { + "identity": { + "cognitoIdentityId": "USER-SUB-1234" + } + } +} diff --git a/packages/cli/test/start-guide/services/notes/mocks/list-event.json b/packages/cli/test/start-guide/services/notes/mocks/list-event.json new file mode 100644 index 0000000000..21c71e41ff --- /dev/null +++ b/packages/cli/test/start-guide/services/notes/mocks/list-event.json @@ -0,0 +1,7 @@ +{ + "requestContext": { + "identity": { + "cognitoIdentityId": "USER-SUB-1234" + } + } +} diff --git a/packages/cli/test/start-guide/services/notes/mocks/update-event.json b/packages/cli/test/start-guide/services/notes/mocks/update-event.json new file mode 100644 index 0000000000..a507ff90ac --- /dev/null +++ b/packages/cli/test/start-guide/services/notes/mocks/update-event.json @@ -0,0 +1,11 @@ +{ + "body": "{\"content\":\"new world\",\"attachment\":\"new.jpg\"}", + "pathParameters": { + "id": "2b82e2c0-793f-11ea-9602-6d514f529482" + }, + "requestContext": { + "identity": { + "cognitoIdentityId": "USER-SUB-1234" + } + } +} diff --git a/packages/cli/test/start-guide/services/notes/package.json b/packages/cli/test/start-guide/services/notes/package.json new file mode 100644 index 0000000000..fdf45bdf4b --- /dev/null +++ b/packages/cli/test/start-guide/services/notes/package.json @@ -0,0 +1,22 @@ +{ + "name": "notes-api", + "version": "2.2.0", + "description": "A Node.js starter for Serverless Framework with ES6 and TypeScript support", + "main": "handler.js", + "scripts": { + "test": "serverless-bundle test" + }, + "author": "", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/AnomalyInnovations/serverless-nodejs-starter.git" + }, + "devDependencies": { + "aws-sdk": "^2.773.0" + }, + "dependencies": { + "stripe": "^8.119.0", + "uuid": "^7.0.3" + } +} diff --git a/packages/cli/test/start-guide/services/notes/tests/billing.test.js b/packages/cli/test/start-guide/services/notes/tests/billing.test.js new file mode 100644 index 0000000000..26d9740c88 --- /dev/null +++ b/packages/cli/test/start-guide/services/notes/tests/billing.test.js @@ -0,0 +1,28 @@ +import { calculateCost } from "../libs/billing-lib"; + +test("Lowest tier", () => { + const storage = 10; + + const cost = 4000; + const expectedCost = calculateCost(storage); + + expect(cost).toEqual(expectedCost); +}); + +test("Middle tier", () => { + const storage = 100; + + const cost = 20000; + const expectedCost = calculateCost(storage); + + expect(cost).toEqual(expectedCost); +}); + +test("Highest tier", () => { + const storage = 101; + + const cost = 10100; + const expectedCost = calculateCost(storage); + + expect(cost).toEqual(expectedCost); +}); diff --git a/packages/cli/test/start-guide/services/notes/update.js b/packages/cli/test/start-guide/services/notes/update.js new file mode 100644 index 0000000000..7aa63bac10 --- /dev/null +++ b/packages/cli/test/start-guide/services/notes/update.js @@ -0,0 +1,29 @@ +import handler from "./libs/handler-lib"; +import dynamoDb from "./libs/dynamodb-lib"; + +export const main = handler(async (event) => { + const data = JSON.parse(event.body); + const params = { + TableName: process.env.tableName, + // 'Key' defines the partition key and sort key of the item to be updated + Key: { + userId: event.requestContext.authorizer.iam.cognitoIdentity.identityId, // The id of the author + noteId: event.pathParameters.id, // The id of the note from the path + }, + // 'UpdateExpression' defines the attributes to be updated + // 'ExpressionAttributeValues' defines the value in the update expression + UpdateExpression: "SET content = :content, attachment = :attachment", + ExpressionAttributeValues: { + ":attachment": data.attachment || null, + ":content": data.content || null, + }, + // 'ReturnValues' specifies if and how to return the item's attributes, + // where ALL_NEW returns all attributes of the item after the update; you + // can inspect 'result' below to see how it works with different settings + ReturnValues: "ALL_NEW", + }; + + await dynamoDb.update(params); + + return { status: true }; +}); diff --git a/packages/cli/test/start-guide/services/notes/yarn.lock b/packages/cli/test/start-guide/services/notes/yarn.lock new file mode 100644 index 0000000000..eccd0ec8ef --- /dev/null +++ b/packages/cli/test/start-guide/services/notes/yarn.lock @@ -0,0 +1,126 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/node@>=8.1.0": + version "14.14.20" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.20.tgz#f7974863edd21d1f8a494a73e8e2b3658615c340" + integrity sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A== + +aws-sdk@^2.773.0: + version "2.827.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.827.0.tgz#372e37cabf0e8351de6d8f07a8f519bfaaeeae2a" + integrity sha512-71PWS1dqJ65/SeNgDQWEgbJ6oKCuB+Ypq30TM3EyzbAHaxl69WjQRK71oJ2bjhdIHfGQJtOV0G9wg4zpge4Erg== + dependencies: + buffer "4.9.2" + events "1.1.1" + ieee754 "1.1.13" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "3.3.2" + xml2js "0.4.19" + +base64-js@^1.0.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +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" + +events@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= + +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.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +isarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +jmespath@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" + integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc= + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +qs@^6.6.0: + version "6.9.5" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.5.tgz#45859f731392198fbd3f91ea4290e7c4e25232fa" + integrity sha512-T0SnbxGiMcB09qd3bFcPt8rufxPs7T7TjePk33r1WsJNt12/rWsK/ofKqRHQ0rY/iMGE0mVdkc6Yg9CuL/ty0Q== + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +sax@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + integrity sha1-e45lYZCyKOgaZq6nSEgNgozS03o= + +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== + +stripe@^8.119.0: + version "8.130.0" + resolved "https://registry.yarnpkg.com/stripe/-/stripe-8.130.0.tgz#e52a5ee6538a70ce76379364bd3839ca7ea925ab" + integrity sha512-9e283EFhxDz7SUcgNiUFRdTZ/kS2IkoT0KBMOJHdf3vY+mvURq355s2E0Zyy9rtNmt+CEZ0nCMiZ3PqIqpp6Pg== + dependencies: + "@types/node" ">=8.1.0" + qs "^6.6.0" + +url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + integrity sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +uuid@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" + integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== + +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 sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= diff --git a/packages/cli/test/start-guide/sst.json b/packages/cli/test/start-guide/sst.json new file mode 100644 index 0000000000..da94a811ef --- /dev/null +++ b/packages/cli/test/start-guide/sst.json @@ -0,0 +1,5 @@ +{ + "name": "start-guide", + "stage": "dev", + "region": "us-east-1" +} From 7801d934c03fa03eb024f6b3b5b5ff6a2aa35606 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 13 Jan 2021 21:44:47 -0500 Subject: [PATCH 259/481] Adding babel to root eslint --- .eslintrc.json | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 92f5243f29..6a18aa32cf 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -10,10 +10,24 @@ "Atomics": "readonly", "SharedArrayBuffer": "readonly" }, + "parser": "@babel/eslint-parser", "parserOptions": { - "ecmaVersion": 2018, - "sourceType": "module" + "requireConfigFile": false, + "babelOptions": { + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "node": "10" + } + } + ] + ], + "plugins": ["@babel/plugin-proposal-class-properties"] + } }, + "plugins": ["@babel"], "extends": "eslint:recommended", "rules": {}, "overrides": [ From c197a21cceb0c5c846582c231c47aa08ce49127f Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 13 Jan 2021 21:53:34 -0500 Subject: [PATCH 260/481] Removing test from billing test --- .../services/notes/tests/billing.test.js | 28 --------- yarn.lock | 63 +++++++++++++++++++ 2 files changed, 63 insertions(+), 28 deletions(-) delete mode 100644 packages/cli/test/start-guide/services/notes/tests/billing.test.js diff --git a/packages/cli/test/start-guide/services/notes/tests/billing.test.js b/packages/cli/test/start-guide/services/notes/tests/billing.test.js deleted file mode 100644 index 26d9740c88..0000000000 --- a/packages/cli/test/start-guide/services/notes/tests/billing.test.js +++ /dev/null @@ -1,28 +0,0 @@ -import { calculateCost } from "../libs/billing-lib"; - -test("Lowest tier", () => { - const storage = 10; - - const cost = 4000; - const expectedCost = calculateCost(storage); - - expect(cost).toEqual(expectedCost); -}); - -test("Middle tier", () => { - const storage = 100; - - const cost = 20000; - const expectedCost = calculateCost(storage); - - expect(cost).toEqual(expectedCost); -}); - -test("Highest tier", () => { - const storage = 101; - - const cost = 10100; - const expectedCost = calculateCost(storage); - - expect(cost).toEqual(expectedCost); -}); diff --git a/yarn.lock b/yarn.lock index e9a36f1462..b489679cbf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2810,6 +2810,69 @@ "@octokit/openapi-types" "^2.2.0" "@types/node" ">= 8" +"@serverless-stack/cli@^1.0.0-alpha.12": + version "1.0.0-alpha.12" + resolved "https://registry.yarnpkg.com/@serverless-stack/cli/-/cli-1.0.0-alpha.12.tgz#ab45369f9cb10a90f100e3354cb57894bddca223" + integrity sha512-6L9ELJHWHlVJDSnBqkeCfYqtQbU8aHMr6GqER05EHQABaW3UeoyMH5oEaK1nb1o9KFiaE+YqZ+0og2CsA7+g2g== + dependencies: + "@aws-cdk/aws-apigatewayv2" "1.79.0" + "@aws-cdk/aws-dynamodb" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@babel/core" "^7.10.5" + "@babel/eslint-parser" "^7.11.3" + "@babel/eslint-plugin" "^7.11.3" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/preset-env" "^7.10.4" + "@serverless-stack/core" "^1.0.0-alpha.12" + "@serverless-stack/resources" "^1.0.0-alpha.12" + "@types/jest" "^26.0.7" + "@types/node" "^14.0.27" + "@typescript-eslint/eslint-plugin" "^3.9.1" + "@typescript-eslint/parser" "^3.9.1" + aws-cdk "1.79.0" + chalk "^4.1.0" + chokidar "^3.4.3" + core-js "^3.6.5" + cross-spawn "^7.0.3" + esbuild "^0.8.31" + eslint "^7.16.0" + fast-safe-stringify "^2.0.6" + fs-extra "^9.0.1" + jest "^26.1.0" + promise.allsettled "^1.0.2" + source-map-support "^0.5.19" + ts-jest "^26.1.4" + typescript "^3.9.7" + ws "^7.4.0" + yargs "^15.4.1" + +"@serverless-stack/core@^1.0.0-alpha.12": + version "1.0.0-alpha.12" + resolved "https://registry.yarnpkg.com/@serverless-stack/core/-/core-1.0.0-alpha.12.tgz#b7c0103a6c975d87fc65f9ad9616d9ab3b919bf7" + integrity sha512-AZrN3cPU0JBapmLrJwR7g4kv4Bwcbo8qZAjMUfNjLLJVRBR6WI17GdNQli4n7qQ02j82WHd03qWl2THoPW6QeA== + dependencies: + aws-sdk "^2.761.0" + chalk "^4.1.0" + sst-cdk "1.79.0-rc.1" + winston "^3.3.3" + +"@serverless-stack/resources@^1.0.0-alpha.12": + version "1.0.0-alpha.12" + resolved "https://registry.yarnpkg.com/@serverless-stack/resources/-/resources-1.0.0-alpha.12.tgz#368fb101242c3e61a7f2ed7a0e7b87055cdbe377" + integrity sha512-PfxvbMDNnkv6SGxhWBqjNfy2bL2nftlpJq5xeNpgw3gKD0r6H+UOFJ7DnQ86rLljclNSg0BnJ5g5yKoYzGOfag== + dependencies: + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-lambda-nodejs" "1.79.0" + "@aws-cdk/core" "1.79.0" + chalk "^4.1.0" + esbuild "^0.8.31" + eslint "^7.16.0" + fs-extra "^9.0.1" + typescript "^3.9.7" + zip-local "^0.3.4" + "@sinonjs/commons@^1.7.0": version "1.8.1" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" From dd94472bab028b8d191ed3dadb4bc6dd0df53aae Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 15 Jan 2021 00:22:38 -0500 Subject: [PATCH 261/481] Implementing sst.Api construct --- packages/cli/test/start-guide/lib/ApiStack.js | 122 ++++++---- packages/cli/test/start-guide/lib/index.js | 28 +-- packages/resources/package.json | 1 + packages/resources/src/Api.ts | 215 ++++++++++++++++++ packages/resources/src/Function.ts | 12 + 5 files changed, 307 insertions(+), 71 deletions(-) create mode 100644 packages/resources/src/Api.ts diff --git a/packages/cli/test/start-guide/lib/ApiStack.js b/packages/cli/test/start-guide/lib/ApiStack.js index d66e51b98b..f4892a472e 100644 --- a/packages/cli/test/start-guide/lib/ApiStack.js +++ b/packages/cli/test/start-guide/lib/ApiStack.js @@ -1,60 +1,94 @@ import * as cdk from "@aws-cdk/core"; -import { PolicyStatement } from "@aws-cdk/aws-iam"; -import { HttpApi, HttpRoute, HttpRouteKey } from "@aws-cdk/aws-apigatewayv2"; -import { LambdaProxyIntegration } from "@aws-cdk/aws-apigatewayv2-integrations"; +import * as iam from "@aws-cdk/aws-iam"; -import { Stack, Function } from "@serverless-stack/resources"; +import { Stack, Api } from "@serverless-stack/resources"; export default class ApiStack extends Stack { constructor(scope, id, props) { super(scope, id, props); - const { routes = [], cors, environment, policyStatements = [] } = props; + const { tableName } = props; // Create API - let corsPreflight; - if (cors) { - corsPreflight = { - allowHeaders: ['*'], - allowMethods: ['*'], - allowOrigins: ['*'], - }; - } - const api = new HttpApi(this, "Api", { - corsPreflight, - // defaultDomainMapping: { - // domainName: domain, - // }, - }); - - // Create routes - const initialPolicy = policyStatements.map(statement => new PolicyStatement(statement)); - routes.forEach(([ path, method, srcPath, entry, handler, auth ]) => { - const lambda = new Function(this, `Lambda_${method}_${path}`, { - srcPath, - entry, - handler, - environment, - initialPolicy, - }); - const route = new HttpRoute(this, `Route_${method}_${path}`, { - httpApi: api, - routeKey: HttpRouteKey.with(path, method), - integration: new LambdaProxyIntegration({ - handler: lambda, - }), - }); + const srcPath = 'services/notes'; + const handler = 'main'; + const environment = { tableName }; + const initialPolicy = [ new iam.PolicyStatement({ + actions: [ + "dynamodb:Scan", + "dynamodb:Query", + "dynamodb:GetItem", + "dynamodb:PutItem", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem", + "dynamodb:DescribeTable", + ], + effect: iam.Effect.ALLOW, + resources: [ dbStack.table.tableArn ], + }) ]; - if (auth === 'aws_iam') { - route.node.defaultChild.authorizationType = 'AWS_IAM'; - } + const api = new Api(this, "Api", { + routes: { + "GET /notes": "path/to/file.main", + }, }); - this.api = api; + const api = new Api(this, "Api", { + defaultLambdaProps: { + srcPath: 'services/notes', + environment: { tableName }, + initialPolicy: [ new iam.PolicyStatement({ + actions: [ + "dynamodb:Scan", + "dynamodb:Query", + "dynamodb:GetItem", + "dynamodb:PutItem", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem", + "dynamodb:DescribeTable", + ], + effect: iam.Effect.ALLOW, + resources: [ dbStack.table.tableArn ], + }) ]; + }, + defaultAuthorizationType: 'AWS_IAM', + routes: { + "GET /": "path/to/list.main", + "GET /notes": "path/to/get.main", + }, + }); - // Show API endpoint in output - new cdk.CfnOutput(this, "ApiEndpoint", { - value: api.apiEndpoint, + const api = new Api(this, "Api", { + routes: { + "GET /notes": { + authorizationType: "AWS_IAM", + lambdaProps: { srcPath, handler: "path/to/list.main", environment, initialPolicy }, + }, + { + path: "/notes", + method: "POST", + authorizationType: "AWS_IAM", + lambdaProps: { srcPath, entry: "create.js", handler, environment, initialPolicy }, + }, + { + path: "/notes/{id}", + method: "GET", + authorizationType: "AWS_IAM", + lambdaProps: { srcPath, entry: "get.js", handler, environment, initialPolicy }, + }, + { + path: "/notes/{id}", + method: "PUT", + authorizationType: "AWS_IAM", + lambdaProps: { srcPath, entry: "update.js", handler, environment, initialPolicy }, + }, + { + path: "/notes/{id}", + method: "DELETE", + authorizationType: "AWS_IAM", + lambdaProps: { srcPath, entry: "delete.js", handler, environment, initialPolicy }, + }, + }, }); } } diff --git a/packages/cli/test/start-guide/lib/index.js b/packages/cli/test/start-guide/lib/index.js index dcf442980b..23be397358 100644 --- a/packages/cli/test/start-guide/lib/index.js +++ b/packages/cli/test/start-guide/lib/index.js @@ -11,33 +11,7 @@ export default function main(app) { const s3Stack = new S3Stack(app, "s3"); const apiStack = new ApiStack(app, "api", { - routes: [ - // PATH , METHOD , srcPath , entry , handler, AUTH ], - [ "/notes" , "GET" , "services/notes", "list.js" , "main" , "aws_iam" ], - [ "/notes" , "POST" , "services/notes", "create.js" , "main" , "aws_iam" ], - [ "/notes/{id}" , "GET" , "services/notes", "get.js" , "main" , "aws_iam" ], - [ "/notes/{id}" , "PUT" , "services/notes", "update.js" , "main" , "aws_iam" ], - [ "/notes/{id}" , "DELETE" , "services/notes", "delete.js" , "main" , "aws_iam" ], - ], - cors: true, - //memory: 1024, - //timeout: 20, - environment: { - tableName: dbStack.table.tableName, - }, - policyStatements: [{ - actions: [ - "dynamodb:Scan", - "dynamodb:Query", - "dynamodb:GetItem", - "dynamodb:PutItem", - "dynamodb:UpdateItem", - "dynamodb:DeleteItem", - "dynamodb:DescribeTable", - ], - effect: iam.Effect.ALLOW, - resources: [ dbStack.table.tableArn ], - }], + tableName: dbStack.table.tableName, }); new CognitoStack(app, "cognito", { diff --git a/packages/resources/package.json b/packages/resources/package.json index ff81571040..2d30185563 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -27,6 +27,7 @@ "dependencies": { "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/aws-lambda-nodejs": "1.79.0", + "@aws-cdk/aws-logs": "1.79.0", "@aws-cdk/core": "1.79.0", "chalk": "^4.1.0", "esbuild": "^0.8.31", diff --git a/packages/resources/src/Api.ts b/packages/resources/src/Api.ts new file mode 100644 index 0000000000..9441622753 --- /dev/null +++ b/packages/resources/src/Api.ts @@ -0,0 +1,215 @@ +import * as cdk from "@aws-cdk/core"; +import * as logs from "@aws-cdk/aws-logs"; +import * as apig from "@aws-cdk/aws-apigatewayv2"; +import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; + +import { Function, FunctionProps } from "./Function"; + +export interface ApiProps extends apig.HttpApiProps { + /** + * Path to the entry point of the function. A .js or .ts file. + */ + readonly routes: { [key: string]: string | RouteProps }; + + /** + * CORS configuration. + * + * @default - Defaults to true + */ + readonly cors?: boolean; + + /** + * Access log configuration. + * + * @default - Defaults to true + */ + readonly accessLog?: boolean | AccessLogProps; + + /** + * Default authorization type for routes. + * + * @default - Defaults to 'NONE' + */ + readonly defaultAuthorizationType?: string; + + /** + * Default Lambda props for routes. + */ + readonly defaultLambdaProps?: FunctionProps; +} + +/** + * Props for API route. + */ +export interface RouteProps { + /** + * Route authorization type + * + * @default - Defaults to 'NONE' + */ + readonly authorizationType?: string; + + /** + * The runtime environment. Only runtimes of the Node.js family are + * supported. + * + * @default - Defaults to {} + */ + readonly lambdaProps?: FunctionProps; +} + +/** + * Props for Access log. + */ +export interface AccessLogProps { + /** + * Access log format. + */ + readonly format: string; +} + +export class Api extends apig.HttpApi { + constructor(scope: cdk.Construct, id: string, props: ApiProps) { + + const { cors, accessLog, routes, defaultAuthorizationType, defaultLambdaProps } = props; + + //////////////////// + // Configure CORS + //////////////////// + + // note: If both cors and corsPreflight are set, cors takes precedence. + let corsPreflight = props.corsPreflight; + if (cors === undefined || cors === true) { + corsPreflight = { + allowHeaders: ['*'], + allowMethods: [ + apig.HttpMethod.DELETE, + apig.HttpMethod.GET, + apig.HttpMethod.HEAD, + apig.HttpMethod.OPTIONS, + apig.HttpMethod.PATCH, + apig.HttpMethod.POST, + apig.HttpMethod.PUT, + ], + allowOrigins: ['*'], + }; + } + + //////////////////// + // Create Api + //////////////////// + + super(scope, id, { + ...props, + corsPreflight, + }); + + // set API endpoint as stack output + new cdk.CfnOutput(this, "ApiEndpoint", { + value: this.apiEndpoint, + }); + + /////////////////////////// + // Configure access log + /////////////////////////// + + // note: Access log configuration is not supported by L2 constructs as of CDK v1.85.0. We + // need to define it at L1 construct level. + if (accessLog !== false) { + // create log group + const logGroup = new logs.LogGroup(this, 'LogGroup'); + + // get log format + const logFormat = (accessLog === undefined || accessLog === true) + ? '{ "requestId":"$context.requestId", "ip": "$context.identity.sourceIp", "caller":"$context.identity.caller", "user":"$context.identity.user","requestTime":"$context.requestTime", "httpMethod":"$context.httpMethod","resourcePath":"$context.resourcePath", "status":"$context.status","protocol":"$context.protocol", "responseLength":"$context.responseLength" }' + : accessLog.format; + + // get L1 cfnStage construct + if ( ! this.defaultStage.node.defaultChild) { + throw new Error(`Fail to define the default stage for Http API.`); + } + + // set access log settings + const cfnStage = this.defaultStage.node.defaultChild as apig.CfnStage; + cfnStage.accessLogSettings = { + format: logFormat, + destinationArn: logGroup.logGroupArn, + }; + + // set log group name as stack output + new cdk.CfnOutput(this, "AccessLogGroupName", { + value: logGroup.logGroupName, + }); + } + + + // Set defaults + const defaultLambdaProps = props.defaultLambdaProps; + const routes = props.routes; + + /////////////////////////// + // Configure routes + /////////////////////////// + + Object.keys(routes).forEach((routeName: string) => { + let routeProps = routes[routeName]; + if (typeof routeProps === 'string') { + routeProps = { handler: routeProps }; + } + + // Get path and method + const routeNameParts = routeName.split(' '); + if (routeNameParts.length !== 2) { + throw new Error(`Invalid route ${routeName}`); + } + const method = routeNameParts[0].toUpperCase(); + const path = routeNameParts[1]; + if ( ! [ apig.HttpMethod.DELETE, + apig.HttpMethod.GET, + apig.HttpMethod.HEAD, + apig.HttpMethod.OPTIONS, + apig.HttpMethod.PATCH, + apig.HttpMethod.POST, + apig.HttpMethod.PUT, + ].includes(method)) { + throw new Error(`Invalid method defined for route ${routeName}`); + } + if (path.length === 0) { + throw new Error(`Invalid path defined for route ${routeName}`); + } + + // Get authorization type + let authorizationType = routeProps.authorizationType || defaultAuthorizationType || 'NONE'; + authorizationType = authorizationType.toUpperCase(); + if ( ! [ 'NONE', 'AWS_IAM' ].includes(authorizationType)) { + throw new Error( + `sst.Api does not support ${authorizationType} authorization type. Only 'NONE' and 'AWS_IAM' types are currently supported.` + ); + } + + // Get Lambda props + const lambdaProps = { ...defaultLambdaProps, ...routeProps.lambdaProps }; + if ( ! lambdaProps.handler) { + throw new Error(`No Lambda handler defined for route ${routeName}`); + } + + // Create route + const lambda = new Function(this, `Lambda_${method}_${path}`, lambdaProps); + const route = new apig.HttpRoute(this, `Route_${method}_${path}`, { + httpApi: this, + routeKey: apig.HttpRouteKey.with(path, method), + integration: new apigIntegrations.LambdaProxyIntegration({ + handler: lambda, + }), + }); + + // Configure route authorization type + if ( ! route.node.defaultChild) { + throw new Error(`Fail to define the default route for route ${routeName}.`); + } + const cfnRoute = route.node.defaultChild as apig.CfnRoute; + cfnRoute.authorizationType = authorizationType; + + }); + } +} diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index d4dc1f8cb2..dd2508296c 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -30,6 +30,12 @@ export interface FunctionProps extends lambda.FunctionOptions { * @default - Defaults to NODEJS_12_X */ readonly runtime?: lambda.Runtime; + /** + * Enable AWS X-Ray Tracing. + * + * @default - Defaults to ACTIVE + */ + readonly tracing?: lambda.Tracing; /** * Disable bundling with esbuild. * @@ -65,6 +71,7 @@ export class Function extends lambda.Function { // Set defaults const handler = props.handler || "handler"; const runtime = props.runtime || lambda.Runtime.NODEJS_12_X; + const tracing = props.tracing || lambda.Tracing.ACTIVE; const bundle = props.bundle === undefined ? true : props.bundle; const srcPath = props.srcPath || "."; const entry = props.entry; @@ -94,6 +101,7 @@ export class Function extends lambda.Function { super(scope, id, { ...props, runtime, + tracing, code: lambda.Code.fromAsset( path.resolve(__dirname, "../dist/stub.zip") ), @@ -117,11 +125,15 @@ export class Function extends lambda.Function { super(scope, id, { ...props, runtime, + tracing, handler: outHandler, code: lambda.Code.fromAsset(outZip), }); } + // Enable reusing connections with Keep-Alive for NodeJs Lambda function + this.addEnvironment('AWS_NODEJS_CONNECTION_REUSE_ENABLED', '1', { removeInEdge: true }); + // register Lambda function in app root.registerLambdaHandler({ srcPath, entry, handler } as HandlerProps); } From c0f198c63e67b7d60622a90da458508a51ecd138 Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 15 Jan 2021 02:40:30 -0500 Subject: [PATCH 262/481] fix #38 --- packages/cli/scripts/start.js | 112 ++++++++++-------- packages/cli/test/start-base/lib/index.js | 5 +- packages/cli/test/start-base/sst.json | 2 +- .../cli/test/start-no-src-path/lib/index.js | 2 +- packages/cli/test/start-no-src-path/sst.json | 3 +- packages/resources/lambda/stub/index.js | 1 - packages/resources/src/App.ts | 4 +- packages/resources/src/Function.ts | 28 ++--- packages/resources/src/util/builder.ts | 42 ++++--- 9 files changed, 101 insertions(+), 98 deletions(-) diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 5079955af3..583171cd1f 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -54,13 +54,12 @@ const builderState = { }; const entryPointDataTemplateObject = { srcPath: null, - entry: null, handler: null, tsconfig: null, hasError: false, esbuilder: null, inputFiles: null, - outHandler: null, + outEntryPoint: null, transpilePromise: null, needsReTranspile: false, pendingRequestCallbacks: [], @@ -183,7 +182,7 @@ async function startBuilder(cdkInputFiles) { builderLogger.info(""); // Load Lambda handlers to watch - // ie. { srcPath: "src/api", entry: "api.js", handler: "handler" }, + // ie. { srcPath: "src/api", handler: "api.main" }, const lambdaHandlersPath = path.join( paths.appPath, paths.appBuildDir, @@ -202,10 +201,10 @@ async function startBuilder(cdkInputFiles) { esbuildService = await esbuild.startService(); const results = await Promise.allSettled( - entryPoints.map(({ srcPath, entry, handler }) => + entryPoints.map(({ srcPath, handler }) => // Not catching esbuild errors // Letting it handle the error messages for now - transpile(srcPath, entry, handler) + transpile(srcPath, handler) ) ); @@ -272,14 +271,13 @@ async function updateBuilder() { Object.keys(entryPointsData).forEach((key) => { let { srcPath, - entry, handler, transpilePromise, needsReTranspile, } = entryPointsData[key]; if (!transpilePromise && needsReTranspile) { - const transpilePromise = reTranspiler(srcPath, entry, handler); - onReTranspileStarted({ srcPath, entry, handler, transpilePromise }); + const transpilePromise = reTranspiler(srcPath, handler); + onReTranspileStarted({ srcPath, handler, transpilePromise }); } }); @@ -343,18 +341,17 @@ async function onFileChange(ev, file) { } function onTranspileSucceeded( srcPath, - entry, handler, - { tsconfig, esbuilder, outHandler, inputFiles } + { tsconfig, esbuilder, outEntryPoint, inputFiles } ) { - const key = buildEntryPointKey(srcPath, entry, handler); + const key = buildEntryPointKey(srcPath, handler); // Update entryPointsData builderState.entryPointsData[key] = { ...builderState.entryPointsData[key], tsconfig, esbuilder, - outHandler, inputFiles, + outEntryPoint, }; // Update srcPath index @@ -372,8 +369,8 @@ function onTranspileSucceeded( builderState.watchedFilesIndex[file].push(key); }); } -function onReTranspileStarted({ srcPath, entry, handler, transpilePromise }) { - const key = buildEntryPointKey(srcPath, entry, handler); +function onReTranspileStarted({ srcPath, handler, transpilePromise }) { + const key = buildEntryPointKey(srcPath, handler); // Print rebuilding message if (!builderState.isRebuilding) { @@ -388,8 +385,8 @@ function onReTranspileStarted({ srcPath, entry, handler, transpilePromise }) { transpilePromise, }; } -async function onReTranspileSucceeded(srcPath, entry, handler, { inputFiles }) { - const key = buildEntryPointKey(srcPath, entry, handler); +async function onReTranspileSucceeded(srcPath, handler, { inputFiles }) { + const key = buildEntryPointKey(srcPath, handler); // Note: If the handler included new files, while re-transpiling, the new files // might have been updated. And because the new files has not been added to @@ -455,8 +452,8 @@ async function onReTranspileSucceeded(srcPath, entry, handler, { inputFiles }) { await updateBuilder(); } -async function onReTranspileFailed(srcPath, entry, handler) { - const key = buildEntryPointKey(srcPath, entry, handler); +async function onReTranspileFailed(srcPath, handler) { + const key = buildEntryPointKey(srcPath, handler); // Update entryPointsData builderState.entryPointsData[key] = { @@ -470,7 +467,7 @@ async function onReTranspileFailed(srcPath, entry, handler) { builderState.entryPointsData[key].pendingRequestCallbacks.forEach( ({ reject }) => { reject( - `Failed to transpile srcPath ${srcPath} entry ${entry} handler ${handler}` + `Failed to transpile srcPath ${srcPath} handler ${handler}` ); } ); @@ -526,10 +523,10 @@ async function onTypeCheckDone(srcPath) { await updateBuilder(); } -async function transpile(srcPath, entry, handler) { - const metafile = getEsbuildMetafilePath(srcPath, entry, handler); +async function transpile(srcPath, handler) { + const metafile = getEsbuildMetafilePath(srcPath, handler); const outSrcPath = path.join(srcPath, paths.appBuildDir); - const fullPath = path.join(paths.appPath, srcPath, entry); + const fullPath = await getHandlerFilePath(srcPath, handler); const tsconfigPath = path.join(paths.appPath, srcPath, "tsconfig.json"); const isTs = await checkFileExists(tsconfigPath); @@ -555,25 +552,24 @@ async function transpile(srcPath, entry, handler) { const esbuilder = await esbuildService.build(esbuildOptions); - return onTranspileSucceeded(srcPath, entry, handler, { + const handlerParts = path.basename(handler).split("."); + const outHandler = handlerParts.pop(); + const outEntry = `${handlerParts.join(".")}.js`; + + return onTranspileSucceeded(srcPath, handler, { tsconfig, esbuilder, - outHandler: { - entry: path - .basename(entry) - .split(".") - .slice(0, -1) - .concat(["js"]) - .join("."), - handler, + outEntryPoint: { + entry: outEntry, + handler: outHandler, srcPath: outSrcPath, }, inputFiles: await getInputFilesFromEsbuildMetafile(metafile), }); } -async function reTranspiler(srcPath, entry, handler) { +async function reTranspiler(srcPath, handler) { try { - const key = buildEntryPointKey(srcPath, entry, handler); + const key = buildEntryPointKey(srcPath, handler); const { esbuilder } = builderState.entryPointsData[key]; await esbuilder.rebuild(); @@ -586,12 +582,12 @@ async function reTranspiler(srcPath, entry, handler) { builderLogger.debug(`Mock rebuild wait done`); } - const metafile = getEsbuildMetafilePath(srcPath, entry, handler); + const metafile = getEsbuildMetafilePath(srcPath, handler); const inputFiles = await getInputFilesFromEsbuildMetafile(metafile); - await onReTranspileSucceeded(srcPath, entry, handler, { inputFiles }); + await onReTranspileSucceeded(srcPath, handler, { inputFiles }); } catch (e) { builderLogger.error("reTranspiler error", e); - await onReTranspileFailed(srcPath, entry, handler); + await onReTranspileFailed(srcPath, handler); } } @@ -662,12 +658,11 @@ function typeCheck(srcPath) { function initializeBuilderState(entryPoints, cdkInputFiles) { // Initialize 'entryPointsData' state - entryPoints.forEach(({ srcPath, entry, handler }) => { - const key = buildEntryPointKey(srcPath, entry, handler); + entryPoints.forEach(({ srcPath, handler }) => { + const key = buildEntryPointKey(srcPath, handler); builderState.entryPointsData[key] = { ...entryPointDataTemplateObject, srcPath, - entry, handler, }; }); @@ -678,8 +673,8 @@ function initializeBuilderState(entryPoints, cdkInputFiles) { }); } -function buildEntryPointKey(srcPath, entry, handler) { - return `${srcPath}/${entry}/${handler}`; +function buildEntryPointKey(srcPath, handler) { + return `${srcPath}/${handler}`; } function getAllWatchedFiles() { return [ @@ -751,6 +746,25 @@ async function checkFileExists(file) { .catch(() => false); } +async function getHandlerFilePath(srcPath, handler) { + const parts = handler.split("."); + const name = parts[0]; + + const jsFile = path.join(paths.appPath, srcPath, `${name}.js`); + + if (await checkFileExists(jsFile)) { + return jsFile; + } + + const tsFile = path.join(paths.appPath, srcPath, `${name}.ts`); + + if (await checkFileExists(tsFile)) { + return tsFile; + } + + return jsFile; +} + async function getAllExternalsForHandler(srcPath) { let externals; @@ -769,8 +783,8 @@ async function getAllExternalsForHandler(srcPath) { return externals; } -async function getTranspiledHandler(srcPath, entry, handler) { - const key = buildEntryPointKey(srcPath, entry, handler); +async function getTranspiledHandler(srcPath, handler) { + const key = buildEntryPointKey(srcPath, handler); const entryPointData = builderState.entryPointsData[key]; if (entryPointData.transpilePromise || entryPointData.needsReTranspile) { builderLogger.debug(`Waiting for re-transpiler output for ${handler}...`); @@ -780,11 +794,11 @@ async function getTranspiledHandler(srcPath, entry, handler) { builderLogger.debug(`Waited for re-transpiler output for ${handler}`); } - return entryPointData.outHandler; + return entryPointData.outEntryPoint; } -function getEsbuildMetafilePath(srcPath, entry, handler) { - const key = `${srcPath}/${entry}/${handler}`.replace(/[/.]/g, "-"); +function getEsbuildMetafilePath(srcPath, handler) { + const key = `${srcPath}/${handler}`.replace(/[/.]/g, "-"); const outSrcFullPath = path.join(paths.appPath, srcPath, paths.appBuildDir); return path.join(outSrcFullPath, `.esbuild.${key}.json`); @@ -920,7 +934,6 @@ async function onClientMessage(message) { debugRequestId, debugRequestTimeoutInMs, debugSrcPath, - debugSrcEntry, debugSrcHandler, } = data; @@ -934,7 +947,7 @@ async function onClientMessage(message) { chalk.grey( `${context.awsRequestId} REQUEST ${chalk.cyan( env.AWS_LAMBDA_FUNCTION_NAME - )} [${debugSrcPath}/${debugSrcEntry}:${debugSrcHandler}]${eventSourceDesc}` + )} [${debugSrcPath}/${debugSrcHandler}]${eventSourceDesc}` ) ); clientLogger.debug(chalk.grey(JSON.stringify(event))); @@ -950,11 +963,10 @@ async function onClientMessage(message) { try { transpiledHandler = await getTranspiledHandler( debugSrcPath, - debugSrcEntry, debugSrcHandler ); } catch (e) { - clientLogger.error("Get trasnspiler handler error", e); + clientLogger.error("Get transspiler handler error", e); // TODO: Handle esbuild transpilation error return; } diff --git a/packages/cli/test/start-base/lib/index.js b/packages/cli/test/start-base/lib/index.js index 7088a3b9bf..aa24003b8f 100644 --- a/packages/cli/test/start-base/lib/index.js +++ b/packages/cli/test/start-base/lib/index.js @@ -17,7 +17,7 @@ class MySampleStack extends sst.Stack { // Create a Lambda function subscribed to the topic const snsFunc = new sst.Function(this, "MySnsLambda", { - entry: "sub-folder/sns.js", + handler: "sub-folder/sns.handler", srcPath: "src/sns", }); topic.addSubscription(new subscriptions.LambdaSubscription(snsFunc)); @@ -25,9 +25,8 @@ class MySampleStack extends sst.Stack { // Create a Lambda function triggered by an HTTP API const apiFunc = new sst.Function(this, "MyApiLambda", { bundle: true, - entry: "api.ts", + handler: "api.main", srcPath: "src/api", - handler: "main", timeout: cdk.Duration.seconds(10), environment: { TOPIC_ARN: topic.topicArn, diff --git a/packages/cli/test/start-base/sst.json b/packages/cli/test/start-base/sst.json index 9c8f7ed0ba..9f71864422 100644 --- a/packages/cli/test/start-base/sst.json +++ b/packages/cli/test/start-base/sst.json @@ -1,5 +1,5 @@ { - "name": "cdknotes", + "name": "start-base", "stage": "prod", "region": "us-east-1" } diff --git a/packages/cli/test/start-no-src-path/lib/index.js b/packages/cli/test/start-no-src-path/lib/index.js index 42c4d8885f..11662c43f3 100644 --- a/packages/cli/test/start-no-src-path/lib/index.js +++ b/packages/cli/test/start-no-src-path/lib/index.js @@ -10,7 +10,7 @@ class MySampleStack extends sst.Stack { // Create a Lambda function new sst.Function(this, "MyLambda", { bundle: true, - entry: "lambda.js", + handler: "lambda.handler", runtime: lambda.Runtime.NODEJS_12_X, timeout: cdk.Duration.seconds(10), }); diff --git a/packages/cli/test/start-no-src-path/sst.json b/packages/cli/test/start-no-src-path/sst.json index 550b59d5db..8ac87cd9e5 100644 --- a/packages/cli/test/start-no-src-path/sst.json +++ b/packages/cli/test/start-no-src-path/sst.json @@ -1,6 +1,5 @@ { - "type": "@serverless-stack/resources", - "name": "cdknotes", + "name": "start-no-src-path", "stage": "prod", "region": "us-east-1" } diff --git a/packages/resources/lambda/stub/index.js b/packages/resources/lambda/stub/index.js index a8bc05dfbf..87afec09bf 100644 --- a/packages/resources/lambda/stub/index.js +++ b/packages/resources/lambda/stub/index.js @@ -109,7 +109,6 @@ exports.main = function (event, context, callback) { debugRequestId, debugRequestTimeoutInMs: context.getRemainingTimeInMillis(), debugSrcPath: process.env.SST_DEBUG_SRC_PATH, - debugSrcEntry: process.env.SST_DEBUG_SRC_ENTRY, debugSrcHandler: process.env.SST_DEBUG_SRC_HANDLER, event, context: { diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 4560692f37..55900a986d 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -151,11 +151,11 @@ export class App extends cdk.App { const inputFilesBySrcPath: { [key: string]: { [key: string]: boolean }; } = {}; - this.lambdaHandlers.forEach(({ srcPath, entry, handler }) => { + this.lambdaHandlers.forEach(({ srcPath, handler }) => { const buildPath = path.join(srcPath, this.buildDir); const metafile = path.join( buildPath, - getEsbuildMetafileName(entry, handler) + getEsbuildMetafileName(handler) ); const files = this.getInputFilesFromEsbuildMetafile(metafile); files.forEach((file) => { diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index d4dc1f8cb2..37d54a08d5 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -7,15 +7,9 @@ import { builder } from "./util/builder"; export interface FunctionProps extends lambda.FunctionOptions { /** - * Path to the entry point of the function. A .js or .ts file. + * Path to the entry point and handler function. */ - readonly entry: string; - /** - * The exported function in the entry file. - * - * @default - Defaults to "handler" - */ - readonly handler?: string; + readonly handler: string; /** * The source directory where the entry point is located. The node_modules in this * directory is used to generate the bundle. @@ -51,11 +45,6 @@ export interface HandlerProps { * Source handler */ readonly handler: string; - - /** - * Source entry - */ - readonly entry: string; } export class Function extends lambda.Function { @@ -63,15 +52,14 @@ export class Function extends lambda.Function { const root = scope.node.root as App; // Set defaults - const handler = props.handler || "handler"; + const handler = props.handler; const runtime = props.runtime || lambda.Runtime.NODEJS_12_X; const bundle = props.bundle === undefined ? true : props.bundle; const srcPath = props.srcPath || "."; - const entry = props.entry; - // Validate entry file - if (!entry) { - throw new Error(`No entry point defined for the ${id} Lambda function`); + // Validate handler + if (!handler) { + throw new Error(`No handler defined for the ${id} Lambda function`); } // Validate NodeJS runtime @@ -101,14 +89,12 @@ export class Function extends lambda.Function { environment: { ...(props.environment || {}), SST_DEBUG_SRC_PATH: srcPath, - SST_DEBUG_SRC_ENTRY: entry, SST_DEBUG_SRC_HANDLER: handler, SST_DEBUG_ENDPOINT: root.debugEndpoint || "", }, }); } else { const { outZip, outHandler } = builder({ - entry: entry, bundle: bundle, srcPath: srcPath, handler: handler, @@ -123,6 +109,6 @@ export class Function extends lambda.Function { } // register Lambda function in app - root.registerLambdaHandler({ srcPath, entry, handler } as HandlerProps); + root.registerLambdaHandler({ srcPath, handler } as HandlerProps); } } diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index 21d521f71e..c3437a6fcc 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -6,7 +6,6 @@ import * as fs from "fs-extra"; import * as esbuild from "esbuild"; interface BuilderProps { - readonly entry: string; readonly srcPath: string; readonly handler: string; readonly bundle: boolean; @@ -18,13 +17,12 @@ interface BuilderOutput { readonly outHandler: string; } -function getHandlerString(entry: string, handler: string): string { - const parts = entry.split("/"); - return parts[parts.length - 1].replace(/\.[\w\d]+$/, `.${handler}`); +function addExtensionToHandler(handler: string, extension: string): string { + return handler.replace(/\.[\w\d]+$/, extension); } -export function getEsbuildMetafileName(entry: string, handler: string): string { - const key = `${entry}/${handler}`.replace(/[/.]/g, "-"); +export function getEsbuildMetafileName(handler: string): string { + const key = handler.replace(/[/.]/g, "-"); return `.esbuild.${key}.json`; } @@ -54,10 +52,10 @@ function getAllExternalsForHandler( } export function builder(builderProps: BuilderProps): BuilderOutput { - const { entry, srcPath, bundle, handler, buildDir } = builderProps; + const { srcPath, bundle, handler, buildDir } = builderProps; console.log( - chalk.grey(`Building Lambda function ${srcPath}/${entry}:${handler}`) + chalk.grey(`Building Lambda function ${srcPath}/${handler}`) ); const appPath = process.cwd(); @@ -68,15 +66,25 @@ export function builder(builderProps: BuilderProps): BuilderOutput { const hasTsconfig = fs.existsSync(tsconfig); const buildPath = path.join(srcPath, buildDir); - const metafile = path.join(buildPath, getEsbuildMetafileName(entry, handler)); + const metafile = path.join(buildPath, getEsbuildMetafileName(handler)); + + // Check entry path exists + let entryPath; + if (hasTsconfig) { + entryPath = path.join(srcPath, addExtensionToHandler(handler, '.ts')); + if ( ! fs.existsSync(entryPath)) { + entryPath = path.join(srcPath, addExtensionToHandler(handler, '.js')); + } + } + else { + entryPath = path.join(srcPath, addExtensionToHandler(handler, '.js')); + } - const entryPath = path.join(srcPath, entry); + if (!fs.existsSync(entryPath)) { + throw new Error(`Cannot find a handler file at ${entryPath}".`); + } function transpile(entryPath: string) { - if (!fs.existsSync(entryPath)) { - throw new Error(`Cannot find a handler file at ${entryPath}".`); - } - esbuild.buildSync({ external, metafile, @@ -95,7 +103,7 @@ export function builder(builderProps: BuilderProps): BuilderOutput { const zipFile = path.join( appPath, buildDir, - `${entry.replace(/[./]/g, "-")}-${handler}.zip` + `${handler.replace(/[./]/g, "-")}.zip` ); try { @@ -114,10 +122,10 @@ export function builder(builderProps: BuilderProps): BuilderOutput { let outZip, outHandler; if (bundle) { outZip = zip(path.join(srcPath, buildDir)); - outHandler = getHandlerString(entry, handler); + outHandler = handler; } else { outZip = zip(srcPath); - outHandler = `${buildDir}/${getHandlerString(entry, handler)}`; + outHandler = `${buildDir}/${handler}`; } return { outZip, outHandler }; From 2c0f6c28f5db892c4ff6a26f3509dbd3e56a696e Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 15 Jan 2021 02:43:37 -0500 Subject: [PATCH 263/481] Run prettier --- lerna.json | 4 +--- packages/resources/src/App.ts | 5 +---- packages/resources/src/util/builder.ts | 15 ++++++--------- 3 files changed, 8 insertions(+), 16 deletions(-) diff --git a/lerna.json b/lerna.json index bf09eb32c5..835715cf83 100644 --- a/lerna.json +++ b/lerna.json @@ -1,7 +1,5 @@ { - "packages": [ - "packages/*" - ], + "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, "version": "0.5.0" diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 55900a986d..f04944159c 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -153,10 +153,7 @@ export class App extends cdk.App { } = {}; this.lambdaHandlers.forEach(({ srcPath, handler }) => { const buildPath = path.join(srcPath, this.buildDir); - const metafile = path.join( - buildPath, - getEsbuildMetafileName(handler) - ); + const metafile = path.join(buildPath, getEsbuildMetafileName(handler)); const files = this.getInputFilesFromEsbuildMetafile(metafile); files.forEach((file) => { inputFilesBySrcPath[srcPath] = inputFilesBySrcPath[srcPath] || {}; diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index c3437a6fcc..74d77f952f 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -54,9 +54,7 @@ function getAllExternalsForHandler( export function builder(builderProps: BuilderProps): BuilderOutput { const { srcPath, bundle, handler, buildDir } = builderProps; - console.log( - chalk.grey(`Building Lambda function ${srcPath}/${handler}`) - ); + console.log(chalk.grey(`Building Lambda function ${srcPath}/${handler}`)); const appPath = process.cwd(); @@ -71,13 +69,12 @@ export function builder(builderProps: BuilderProps): BuilderOutput { // Check entry path exists let entryPath; if (hasTsconfig) { - entryPath = path.join(srcPath, addExtensionToHandler(handler, '.ts')); - if ( ! fs.existsSync(entryPath)) { - entryPath = path.join(srcPath, addExtensionToHandler(handler, '.js')); + entryPath = path.join(srcPath, addExtensionToHandler(handler, ".ts")); + if (!fs.existsSync(entryPath)) { + entryPath = path.join(srcPath, addExtensionToHandler(handler, ".js")); } - } - else { - entryPath = path.join(srcPath, addExtensionToHandler(handler, '.js')); + } else { + entryPath = path.join(srcPath, addExtensionToHandler(handler, ".js")); } if (!fs.existsSync(entryPath)) { From ae88a9382f2168393adad764df3e435d3dd1d4b9 Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 15 Jan 2021 02:58:46 -0500 Subject: [PATCH 264/481] Fixing tests --- packages/cli/test/jest/lib/mystack.js | 2 +- packages/cli/test/lambda-override-eslintrc/lib/index.js | 2 +- packages/cli/test/start-base/start-base.test.js | 8 ++++---- .../cli/test/start-no-src-path/start-no-src-path.test.js | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/cli/test/jest/lib/mystack.js b/packages/cli/test/jest/lib/mystack.js index f25bc99b79..6ba64a80d4 100644 --- a/packages/cli/test/jest/lib/mystack.js +++ b/packages/cli/test/jest/lib/mystack.js @@ -22,7 +22,7 @@ export default class MyStack extends sst.Stack { new sst.Function(this, "MyLambda", { bundle: true, srcPath: "src", - entry: "lambda.js", + handler: "lambda.handler", }); // Export values diff --git a/packages/cli/test/lambda-override-eslintrc/lib/index.js b/packages/cli/test/lambda-override-eslintrc/lib/index.js index 08c6bd56bf..1005f8450c 100644 --- a/packages/cli/test/lambda-override-eslintrc/lib/index.js +++ b/packages/cli/test/lambda-override-eslintrc/lib/index.js @@ -12,7 +12,7 @@ class ApiStack extends sst.Stack { // Create a Lambda function triggered by an HTTP API const lambda = new sst.Function(this, "Lambda", { - entry: "lambda.js", + handler: "lambda.handler", srcPath: "src", }); diff --git a/packages/cli/test/start-base/start-base.test.js b/packages/cli/test/start-base/start-base.test.js index 4e692e52a1..7cba26e83d 100644 --- a/packages/cli/test/start-base/start-base.test.js +++ b/packages/cli/test/start-base/start-base.test.js @@ -26,15 +26,15 @@ test("start-base", async () => { expect(testOutput).toMatchObject({ entryPointsData: { - "src/sns/sub-folder/sns.js/handler": { - outHandler: { + "src/sns/sub-folder/sns.handler": { + outEntryPoint: { entry: "sns.js", handler: "handler", srcPath: "src/sns/.build", }, }, - "src/api/api.ts/main": { - outHandler: { + "src/api/api.main": { + outEntryPoint: { entry: "api.js", handler: "main", srcPath: "src/api/.build", diff --git a/packages/cli/test/start-no-src-path/start-no-src-path.test.js b/packages/cli/test/start-no-src-path/start-no-src-path.test.js index aa1749b7cc..3ba9fcaa5f 100644 --- a/packages/cli/test/start-no-src-path/start-no-src-path.test.js +++ b/packages/cli/test/start-no-src-path/start-no-src-path.test.js @@ -26,8 +26,8 @@ test("start-no-src-path", async () => { expect(testOutput).toMatchObject({ entryPointsData: { - "./lambda.js/handler": { - outHandler: { + "./lambda.handler": { + outEntryPoint: { entry: "lambda.js", handler: "handler", srcPath: ".build", From e2f9bc93d771341ec823a8745e4498c3c0d836f9 Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 15 Jan 2021 17:43:32 -0500 Subject: [PATCH 265/481] Always checking for .ts handler file exists even if tsconfig is not at the srcPath --- packages/cli/scripts/start.js | 9 +-------- packages/resources/src/util/builder.ts | 10 +++------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 583171cd1f..91d8e21d9d 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -750,19 +750,12 @@ async function getHandlerFilePath(srcPath, handler) { const parts = handler.split("."); const name = parts[0]; - const jsFile = path.join(paths.appPath, srcPath, `${name}.js`); - - if (await checkFileExists(jsFile)) { - return jsFile; - } - const tsFile = path.join(paths.appPath, srcPath, `${name}.ts`); - if (await checkFileExists(tsFile)) { return tsFile; } - return jsFile; + return path.join(paths.appPath, srcPath, `${name}.js`); } async function getAllExternalsForHandler(srcPath) { diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index 74d77f952f..2042784dd6 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -60,6 +60,7 @@ export function builder(builderProps: BuilderProps): BuilderOutput { const external = getAllExternalsForHandler(srcPath, bundle); + // Check has tsconfig const tsconfig = path.join(srcPath, "tsconfig.json"); const hasTsconfig = fs.existsSync(tsconfig); @@ -67,13 +68,8 @@ export function builder(builderProps: BuilderProps): BuilderOutput { const metafile = path.join(buildPath, getEsbuildMetafileName(handler)); // Check entry path exists - let entryPath; - if (hasTsconfig) { - entryPath = path.join(srcPath, addExtensionToHandler(handler, ".ts")); - if (!fs.existsSync(entryPath)) { - entryPath = path.join(srcPath, addExtensionToHandler(handler, ".js")); - } - } else { + let entryPath = path.join(srcPath, addExtensionToHandler(handler, ".ts")); + if (!fs.existsSync(entryPath)) { entryPath = path.join(srcPath, addExtensionToHandler(handler, ".js")); } From 488c4914b5681f1f27734712f79098e4f64598b6 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 15 Jan 2021 17:56:08 -0500 Subject: [PATCH 266/481] Adding initial docs setup --- docs/.gitignore | 20 + docs/babel.config.js | 3 + docs/docs/doc1.md | 203 + docs/docs/doc2.md | 6 + docs/docs/doc3.md | 14 + docs/docs/mdx.md | 17 + docs/docusaurus.config.js | 117 + docs/package.json | 34 + docs/sidebars.js | 6 + docs/src/css/custom.css | 79 + docs/static/.nojekyll | 0 docs/static/img/favicon.ico | Bin 0 -> 15086 bytes docs/static/img/logo.svg | 3 + docs/yarn.lock | 10320 ++++++++++++++++++++++++++++++++++ 14 files changed, 10822 insertions(+) create mode 100644 docs/.gitignore create mode 100644 docs/babel.config.js create mode 100644 docs/docs/doc1.md create mode 100644 docs/docs/doc2.md create mode 100644 docs/docs/doc3.md create mode 100644 docs/docs/mdx.md create mode 100644 docs/docusaurus.config.js create mode 100644 docs/package.json create mode 100644 docs/sidebars.js create mode 100644 docs/src/css/custom.css create mode 100644 docs/static/.nojekyll create mode 100644 docs/static/img/favicon.ico create mode 100644 docs/static/img/logo.svg create mode 100644 docs/yarn.lock diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000000..b2d6de3062 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,20 @@ +# Dependencies +/node_modules + +# Production +/build + +# Generated files +.docusaurus +.cache-loader + +# Misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/docs/babel.config.js b/docs/babel.config.js new file mode 100644 index 0000000000..e00595dae7 --- /dev/null +++ b/docs/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: [require.resolve('@docusaurus/core/lib/babel/preset')], +}; diff --git a/docs/docs/doc1.md b/docs/docs/doc1.md new file mode 100644 index 0000000000..28286ecc72 --- /dev/null +++ b/docs/docs/doc1.md @@ -0,0 +1,203 @@ +--- +id: doc1 +title: Style Guide +sidebar_label: Style Guide +slug: / +--- + +You can write content using [GitHub-flavored Markdown syntax](https://github.github.com/gfm/). + +## Markdown Syntax + +To serve as an example page when styling markdown based Docusaurus sites. + +## Headers + +# H1 - Create the best documentation + +## H2 - Create the best documentation + +### H3 - Create the best documentation + +#### H4 - Create the best documentation + +##### H5 - Create the best documentation + +###### H6 - Create the best documentation + +--- + +## Emphasis + +Emphasis, aka italics, with *asterisks* or _underscores_. + +Strong emphasis, aka bold, with **asterisks** or __underscores__. + +Combined emphasis with **asterisks and _underscores_**. + +Strikethrough uses two tildes. ~~Scratch this.~~ + +--- + +## Lists + +1. First ordered list item +1. Another item + - Unordered sub-list. +1. Actual numbers don't matter, just that it's a number + 1. Ordered sub-list +1. And another item. + +* Unordered list can use asterisks + +- Or minuses + ++ Or pluses + +--- + +## Links + +[I'm an inline-style link](https://www.google.com/) + +[I'm an inline-style link with title](https://www.google.com/ "Google's Homepage") + +[I'm a reference-style link][arbitrary case-insensitive reference text] + +[You can use numbers for reference-style link definitions][1] + +Or leave it empty and use the [link text itself]. + +URLs and URLs in angle brackets will automatically get turned into links. http://www.example.com/ or and sometimes example.com (but not on GitHub, for example). + +Some text to show that the reference links can follow later. + +[arbitrary case-insensitive reference text]: https://www.mozilla.org/ +[1]: http://slashdot.org/ +[link text itself]: http://www.reddit.com/ + +--- + +## Images + +Here's our logo (hover to see the title text): + +Inline-style: ![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png 'Logo Title Text 1') + +Reference-style: ![alt text][logo] + +[logo]: https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png 'Logo Title Text 2' + +Images from any folder can be used by providing path to file. Path should be relative to markdown file. + +![img](../static/img/logo.svg) + +--- + +## Code + +```javascript +var s = 'JavaScript syntax highlighting'; +alert(s); +``` + +```python +s = "Python syntax highlighting" +print(s) +``` + +``` +No language indicated, so no syntax highlighting. +But let's throw in a tag. +``` + +```js {2} +function highlightMe() { + console.log('This line can be highlighted!'); +} +``` + +--- + +## Tables + +Colons can be used to align columns. + +| Tables | Are | Cool | +| ------------- | :-----------: | -----: | +| col 3 is | right-aligned | \$1600 | +| col 2 is | centered | \$12 | +| zebra stripes | are neat | \$1 | + +There must be at least 3 dashes separating each header cell. The outer pipes (|) are optional, and you don't need to make the raw Markdown line up prettily. You can also use inline Markdown. + +| Markdown | Less | Pretty | +| -------- | --------- | ---------- | +| _Still_ | `renders` | **nicely** | +| 1 | 2 | 3 | + +--- + +## Blockquotes + +> Blockquotes are very handy in email to emulate reply text. This line is part of the same quote. + +Quote break. + +> This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can _put_ **Markdown** into a blockquote. + +--- + +## Inline HTML + +
+
Definition list
+
Is something people use sometimes.
+ +
Markdown in HTML
+
Does *not* work **very** well. Use HTML tags.
+
+ +--- + +## Line Breaks + +Here's a line for us to start with. + +This line is separated from the one above by two newlines, so it will be a _separate paragraph_. + +This line is also a separate paragraph, but... This line is only separated by a single newline, so it's a separate line in the _same paragraph_. + +--- + +## Admonitions + +:::note + +This is a note + +::: + +:::tip + +This is a tip + +::: + +:::important + +This is important + +::: + +:::caution + +This is a caution + +::: + +:::warning + +This is a warning + +::: diff --git a/docs/docs/doc2.md b/docs/docs/doc2.md new file mode 100644 index 0000000000..16cfce4082 --- /dev/null +++ b/docs/docs/doc2.md @@ -0,0 +1,6 @@ +--- +id: doc2 +title: Document Number 2 +--- + +This is a link to [another document.](doc3.md) This is a link to an [external page.](http://www.example.com/) diff --git a/docs/docs/doc3.md b/docs/docs/doc3.md new file mode 100644 index 0000000000..2c40cc680f --- /dev/null +++ b/docs/docs/doc3.md @@ -0,0 +1,14 @@ +--- +id: doc3 +title: This is Document Number 3 +--- + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ac euismod odio, eu consequat dui. Nullam molestie consectetur risus id imperdiet. Proin sodales ornare turpis, non mollis massa ultricies id. Nam at nibh scelerisque, feugiat ante non, dapibus tortor. Vivamus volutpat diam quis tellus elementum bibendum. Praesent semper gravida velit quis aliquam. Etiam in cursus neque. Nam lectus ligula, malesuada et mauris a, bibendum faucibus mi. Phasellus ut interdum felis. Phasellus in odio pulvinar, porttitor urna eget, fringilla lectus. Aliquam sollicitudin est eros. Mauris consectetur quam vitae mauris interdum hendrerit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + +Duis et egestas libero, imperdiet faucibus ipsum. Sed posuere eget urna vel feugiat. Vivamus a arcu sagittis, fermentum urna dapibus, congue lectus. Fusce vulputate porttitor nisl, ac cursus elit volutpat vitae. Nullam vitae ipsum egestas, convallis quam non, porta nibh. Morbi gravida erat nec neque bibendum, eu pellentesque velit posuere. Fusce aliquam erat eu massa eleifend tristique. + +Sed consequat sollicitudin ipsum eget tempus. Integer a aliquet velit. In justo nibh, pellentesque non suscipit eget, gravida vel lacus. Donec odio ante, malesuada in massa quis, pharetra tristique ligula. Donec eros est, tristique eget finibus quis, semper non nisl. Vivamus et elit nec enim ornare placerat. Sed posuere odio a elit cursus sagittis. + +Phasellus feugiat purus eu tortor ultrices finibus. Ut libero nibh, lobortis et libero nec, dapibus posuere eros. Sed sagittis euismod justo at consectetur. Nulla finibus libero placerat, cursus sapien at, eleifend ligula. Vivamus elit nisl, hendrerit ac nibh eu, ultrices tempus dui. Nam tellus neque, commodo non rhoncus eu, gravida in risus. Nullam id iaculis tortor. + +Nullam at odio in sem varius tempor sit amet vel lorem. Etiam eu hendrerit nisl. Fusce nibh mauris, vulputate sit amet ex vitae, congue rhoncus nisl. Sed eget tellus purus. Nullam tempus commodo erat ut tristique. Cras accumsan massa sit amet justo consequat eleifend. Integer scelerisque vitae tellus id consectetur. diff --git a/docs/docs/mdx.md b/docs/docs/mdx.md new file mode 100644 index 0000000000..f0210fb70d --- /dev/null +++ b/docs/docs/mdx.md @@ -0,0 +1,17 @@ +--- +id: mdx +title: Powered by MDX +--- + +You can write JSX and use React components within your Markdown thanks to [MDX](https://mdxjs.com/). + +export const Highlight = ({children, color}) => ( {children} ); + +Docusaurus green and Facebook blue are my favorite colors. + +I can write **Markdown** alongside my _JSX_! diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js new file mode 100644 index 0000000000..312e25d087 --- /dev/null +++ b/docs/docusaurus.config.js @@ -0,0 +1,117 @@ +module.exports = { + title: 'My Site', + tagline: 'The tagline of my site', + url: 'https://docs.serverless-stack.com', + baseUrl: '/', + onBrokenLinks: 'throw', + onBrokenMarkdownLinks: 'warn', + favicon: 'img/favicon.ico', + organizationName: 'serverless-stack', // Usually your GitHub org/user name. + projectName: 'serverless-stack', // Usually your repo name. + stylesheets: [ + "https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@400;700&family=Source+Code+Pro:wght@400;700&family=Source+Sans+Pro:wght@300;400;700&display=swap", + ], + themeConfig: { + navbar: { + title: 'SST', + logo: { + alt: 'SST Logo', + src: 'img/logo.svg', + }, + items: [ + /** + { + to: 'docs/', + activeBasePath: 'docs', + label: 'Docs', + position: 'left', + }, + {to: 'blog', label: 'Blog', position: 'left'}, + **/ + { + href: 'https://github.com/serverless-stack/serverless-stack', + label: 'GitHub', + position: 'right', + }, + ], + }, + footer: { + style: 'dark', + links: [ + { + title: 'Docs', + items: [ + { + label: 'Style Guide', + to: 'docs/', + }, + { + label: 'Second Doc', + to: 'docs/doc2/', + }, + ], + }, + { + title: 'Community', + items: [ + { + label: 'Stack Overflow', + href: 'https://stackoverflow.com/questions/tagged/sst', + }, + { + label: 'Newsletter', + href: 'https://emailoctopus.com/lists/1c11b9a8-1500-11e8-a3c9-06b79b628af2/forms/subscribe', + }, + { + label: 'Twitter', + href: 'https://twitter.com/ServerlessStack', + }, + { + label: 'Slack', + href: 'https://join.slack.com/t/serverless-stack/shared_invite/zt-kqna615x-AFoTXvrglivZqJZcnTzKZA', + }, + ], + }, + { + title: 'More', + items: [ + { + label: 'Brand Guide', + href: 'https://github.com/serverless-stack/identity', + }, + { + label: 'About Us', + href: 'https://anoma.ly/', + }, + { + label: 'GitHub', + href: 'https://github.com/serverless-stack/serverless-stack', + }, + { + label: 'Guide', + to: 'https://serverless-stack.com', + }, + ], + }, + ], + copyright: `Copyright © ${new Date().getFullYear()} Anomaly Innovations, Inc`, + }, + }, + presets: [ + [ + '@docusaurus/preset-classic', + { + docs: { + routeBasePath: '/', + sidebarPath: require.resolve('./sidebars.js'), + // Please change this to your repo. + editUrl: + 'https://github.com/serverless-stack/serverless-stack/edit/master/docs/', + }, + theme: { + customCss: require.resolve('./src/css/custom.css'), + }, + }, + ], + ], +}; diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 0000000000..feb8ea29c4 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,34 @@ +{ + "name": "my-website", + "version": "0.0.0", + "private": true, + "scripts": { + "docusaurus": "docusaurus", + "start": "docusaurus start", + "build": "docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "serve": "docusaurus serve", + "clear": "docusaurus clear" + }, + "dependencies": { + "@docusaurus/core": "2.0.0-alpha.70", + "@docusaurus/preset-classic": "2.0.0-alpha.70", + "@mdx-js/react": "^1.6.21", + "clsx": "^1.1.1", + "react": "^16.8.4", + "react-dom": "^16.8.4" + }, + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} \ No newline at end of file diff --git a/docs/sidebars.js b/docs/sidebars.js new file mode 100644 index 0000000000..8765a2edf3 --- /dev/null +++ b/docs/sidebars.js @@ -0,0 +1,6 @@ +module.exports = { + someSidebar: { + Docusaurus: ['doc1', 'doc2', 'doc3'], + Features: ['mdx'], + }, +}; diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css new file mode 100644 index 0000000000..597be72dd6 --- /dev/null +++ b/docs/src/css/custom.css @@ -0,0 +1,79 @@ +/* stylelint-disable docusaurus/copyright-header */ +/** + * Any CSS included here will be global. The classic template + * bundles Infima by default. Infima is a CSS framework designed to + * work well for content-centric websites. + */ + +/* You can override the default Infima variables here. */ +:root { + --ifm-font-family-base: "Source Sans Pro", sans-serif; + --ifm-heading-font-family: "Roboto Slab", serif; + + --ifm-font-color-base: #383736; + --ifm-heading-color: #383736; + + --ifm-footer-background-color: #395C6B; + + --ifm-color-primary: #e27152; + --ifm-color-primary-dark: #de5b38; + --ifm-color-primary-darker: #db512a; + --ifm-color-primary-darkest: #b9401f; + --ifm-color-primary-light: #e6876c; + --ifm-color-primary-lighter: #e9917a; + --ifm-color-primary-lightest: #efb2a1; + + --ifm-color-secondary: #f4ece8; + --ifm-color-secondary-dark: #e5d1c8; + --ifm-color-secondary-darker: #ddc4b8; + --ifm-color-secondary-darkest: #c69c87; + --ifm-color-secondary-light: #ffffff; + --ifm-color-secondary-lighter: #ffffff; + --ifm-color-secondary-lightest: #ffffff; + + --ifm-color-success: #52e271; + --ifm-color-success-dark: #38de5b; + --ifm-color-success-darker: #2adb51; + --ifm-color-success-darkest: #1fb940; + --ifm-color-success-light: #6ce687; + --ifm-color-success-lighter: #7ae991; + --ifm-color-success-lightest: #a1efb2; + + --ifm-color-info: #52c3e2; + --ifm-color-info-dark: #38bade; + --ifm-color-info-darker: #2ab5db; + --ifm-color-info-darkest: #1f98b9; + --ifm-color-info-light: #6ccce6; + --ifm-color-info-lighter: #7ad1e9; + --ifm-color-info-lightest: #a1deef; + + --ifm-color-danger: #db4d26; + --ifm-color-danger-dark: #c64521; + --ifm-color-danger-darker: #bb411f; + --ifm-color-danger-darkest: #9a351a; + --ifm-color-danger-light: #df5f3c; + --ifm-color-danger-lighter: #e06847; + --ifm-color-danger-lightest: #e68368; + + --ifm-code-font-size: 95%; +} + +html[data-theme='dark'] { + --ifm-font-color-base: #FFFFFF; + --ifm-heading-color: #FFFFFF; +} + +.docusaurus-highlight-code-line { + background-color: rgb(72, 77, 91); + display: block; + margin: 0 calc(-1 * var(--ifm-pre-padding)); + padding: 0 var(--ifm-pre-padding); +} + +h1 { + font-family: var(--ifm-heading-font-family); +} + +.footer--dark { + background-color: #395C6B; +} diff --git a/docs/static/.nojekyll b/docs/static/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/static/img/favicon.ico b/docs/static/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..cc32e95d05dc88ce9ec32a05a408bcdb51582d1d GIT binary patch literal 15086 zcmeI2e{fXQ6~}J~7zGq4GN3>csZc<0&|0FE64ZY>R&A3~wX_b-pb`N!TMLw8O*A76 zj)<+Ot+g_3rwWQXI-|Bzae{UlMe!%2t+f(Jn^;Sg7=fgOJU`#vd)JrE+ugUD-OV^n zWc8}={J*4EPCXj!MR@JX;HY0Qvtvh*Z|>De~LMcN&{NxAu1-C&L10wq^1w9qRiLtG5q% zJ1i~$ny(|E_{&H6uo~X6d6n&e%V2&AzQePH@EWA+Yrda1;)9E&Y^@Lb`J+1xmcfb~ zu$(sTf)Bv;`RRamrFR3k^;GM!)0f;0!M`s^K2eyF4das z_h0GlFdEWQ6)|E`85dE$K99h$~}|N0da@88qLD7AsqIaq6+ z^xl9I65B3B9=rbW@?;rY~6)KJ0u>R}3qN~XGANirM1=L^7 z5tHH%3zWcS*8a;y>X$qw!Q-Y1?_)Q?cwk1W=HMT;X2QGH zhgF$0$=#0bAT$p8&3_xmYJAXs~FO`Xif_}em*_mb)7s~np(pmlX8^g4f~ zvWtEtd;+cyualm~J>5{wlSe^Go*9C@N$_{;!`e*FvD7&l9jpoZkD$PLIwWFxW_*@|pOHY3}R?Zz|}A=`|pGqq7UqAS*? z5fpFlFh;VSvJ$Bwi;0>joPKCn+~4=>algWv7)LR(93Ko;%rH5zBj}o`>B! zFV<$A*ML!D8mQJvnPfY%3E76+kL2 z@b~$M0PEvqm=Blc2%SaCp(I@d&^Z>K0qr+;!JB|Du2k0z43v{;D_}U8^BYxf?um0=I^cd)F z5a$=P<;Gw#)^(v`SLe-J0#No7!JdSpt0=gs_(kn zQlH)V;cn7Bz7KM7q+DmOaiB3gJ|xnOfX=$VfD^&h)w4T6adq}}uC8`Ab0KMOC~O6d zp&s9fkk@yJiRY*m%FfM&ZPy0vodJq-eO1lg_-|6k2iaFFG#2N>DKOnK4JoF=mwikj zEi_jPy*ql39FuJNQDiGj^ZAv`zI@Qw&|IlHx@*xp@Gtl$G+Wdshvq5K1iO7`oQXEj z_?r^azHF|7WuUsUyAUpdZ)Jh%&48fz`^TXAF4oCUq{jWPKtAMpT)6lL*}uXUC;6?| zJ^?xV&YQNJ{ls@b{a@tl+c+$ztR3e2%lne{**`$q#oft7`^TfR9d?4|?BO}!7TQqk z9|C9B$sYD?49-JOV_)yV3(%Mbr=zttQTHXvK7ws$e?FFH=cdr^35X&s}MJ{z+_y=Ni+GgY0XZRm0giU=D5k2{fmk zo@m#fx3;uz&{)vAt^I@MzP_TiG!EwY?IospUIbI23cd?EGvtb|(^kg6Pfql4AfMX^ z#O@V7`_FwtNf%cY-L+g()Ov@#3a_)S)axj%<9f#P=D=L;RPN_K<$gT*VsVAnElM`Q zZg|z}Drquit=C=K=y{@|+4DAu{m~{qv!#^oDReDS2Jw4}!DRCE#~9Q+t}*^K%UQ@E z^!zmFamP-6By5GBg60U#>p@&i`FgkpddxfI7r~NrT}0Wf{l0G~8`2Gy*n)`mhMDuqdtZuoztWNz%*V2&jJa zJ^?un=D|5W=8|3wn|)<7NsoqY@D!xGKT-VG!EAs3$bSPAzk5LOUz3D-%AbH9>oECZ zm=0%$K=0Ive*1k%$L>Cj`RFirpht{3)XlYMi!l`knXq6i`BE4Un-0ZjDAs*xj86gE C!MH&H literal 0 HcmV?d00001 diff --git a/docs/static/img/logo.svg b/docs/static/img/logo.svg new file mode 100644 index 0000000000..8f19dff659 --- /dev/null +++ b/docs/static/img/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/yarn.lock b/docs/yarn.lock new file mode 100644 index 0000000000..3a650848aa --- /dev/null +++ b/docs/yarn.lock @@ -0,0 +1,10320 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@algolia/autocomplete-core@^1.0.0-alpha.35": + version "1.0.0-alpha.38" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.0.0-alpha.38.tgz#c9f0b2b8bb8970e349469e11db3ffcdd8e8cc673" + integrity sha512-mN/cMSNqMvkodkUZ8yMZUof8RquKCjNMGJwt+sejpLuvq4/kTzZZmsJQW7pplWxp+E/axXkdfMwkh/OdRTa8vA== + dependencies: + "@algolia/autocomplete-shared" "1.0.0-alpha.38" + +"@algolia/autocomplete-preset-algolia@^1.0.0-alpha.35": + version "1.0.0-alpha.38" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.38.tgz#38626c05bba8a12d7c527c31dcb9c8bb4838984d" + integrity sha512-wwdU1kjUWkOa0XrGi9Smp2eS6R3hfOze1O0AUnAFQ+kGLOpo02DmydU1yXRFfXnYgW3mW97CvsMpMe73BWKkDA== + dependencies: + "@algolia/autocomplete-shared" "1.0.0-alpha.38" + +"@algolia/autocomplete-shared@1.0.0-alpha.38": + version "1.0.0-alpha.38" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.0.0-alpha.38.tgz#37a2b927fa718105cbabdc5cdb8ac0d2efbc10b4" + integrity sha512-4GPHme9Wm8JN2ZTQWZaOgfJk28Z3WdC9XUaAhdd0Vii0GZkBMXSwlpeLPvKyrpuaocnkrMPafKJOMRHU0baMGQ== + +"@algolia/cache-browser-local-storage@4.8.3": + version "4.8.3" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.8.3.tgz#79cc502892c83f378b8f1a87f78020268806f5c3" + integrity sha512-Cwc03hikHSUI+xvgUdN+H+f6jFyoDsC9fegzXzJ2nPn1YSN9EXzDMBnbrgl0sbl9iLGXe0EIGMYqR2giCv1wMQ== + dependencies: + "@algolia/cache-common" "4.8.3" + +"@algolia/cache-common@4.8.3": + version "4.8.3" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.8.3.tgz#7aca2644159ec791921dc8b296817e5b532b3464" + integrity sha512-Cf7zZ2i6H+tLSBTkFePHhYvlgc9fnMPKsF9qTmiU38kFIGORy/TN2Fx5n1GBuRLIzaSXvcf+oHv1HvU0u1gE1g== + +"@algolia/cache-in-memory@4.8.3": + version "4.8.3" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.8.3.tgz#3d2692b895e9b8da47249b2b8dc638f53d6328ee" + integrity sha512-+N7tkvmijXiDy2E7u1mM73AGEgGPWFmEmPeJS96oT46I98KXAwVPNYbcAqBE79YlixdXpkYJk41cFcORzNh+Iw== + dependencies: + "@algolia/cache-common" "4.8.3" + +"@algolia/client-account@4.8.3": + version "4.8.3" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.8.3.tgz#4abc270dbd136644e69cc6b1ca1d0d14c9822aaf" + integrity sha512-Uku8LqnXBwfDCtsTCDYTUOz2/2oqcAQCKgaO0uGdIR8DTQENBXFQvzziambHdn9KuFuY+6Et9k1+cjpTPBDTBg== + dependencies: + "@algolia/client-common" "4.8.3" + "@algolia/client-search" "4.8.3" + "@algolia/transporter" "4.8.3" + +"@algolia/client-analytics@4.8.3": + version "4.8.3" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.8.3.tgz#578b6e6fa33818a0417298438066642e584e1de9" + integrity sha512-9ensIWmjYJprZ+YjAVSZdWUG05xEnbytENXp508X59tf34IMIX8BR2xl0RjAQODtxBdAteGxuKt5THX6U9tQLA== + dependencies: + "@algolia/client-common" "4.8.3" + "@algolia/client-search" "4.8.3" + "@algolia/requester-common" "4.8.3" + "@algolia/transporter" "4.8.3" + +"@algolia/client-common@4.8.3": + version "4.8.3" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.8.3.tgz#d8ea3368a5b98ce907e4be0eed804c3301cd91de" + integrity sha512-TU3623AEFAWUQlDTznkgAMSYo8lfS9pNs5QYDQzkvzWdqK0GBDWthwdRfo9iIsfxiR9qdCMHqwEu+AlZMVhNSA== + dependencies: + "@algolia/requester-common" "4.8.3" + "@algolia/transporter" "4.8.3" + +"@algolia/client-recommendation@4.8.3": + version "4.8.3" + resolved "https://registry.yarnpkg.com/@algolia/client-recommendation/-/client-recommendation-4.8.3.tgz#fc15688bf9d0fc0111a6c56d247e33dc3fcf8190" + integrity sha512-qysGbmkcc6Agt29E38KWJq9JuxjGsyEYoKuX9K+P5HyQh08yR/BlRYrA8mB7vT/OIUHRGFToGO6Vq/rcg0NIOQ== + dependencies: + "@algolia/client-common" "4.8.3" + "@algolia/requester-common" "4.8.3" + "@algolia/transporter" "4.8.3" + +"@algolia/client-search@4.8.3": + version "4.8.3" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.8.3.tgz#c70e09935e2cf25da356d59794e6a5a95f9a4cc8" + integrity sha512-rAnvoy3GAhbzOQVniFcKVn1eM2NX77LearzYNCbtFrFYavG+hJI187bNVmajToiuGZ10FfJvK99X2OB1AzzezQ== + dependencies: + "@algolia/client-common" "4.8.3" + "@algolia/requester-common" "4.8.3" + "@algolia/transporter" "4.8.3" + +"@algolia/logger-common@4.8.3": + version "4.8.3" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.8.3.tgz#449e8767863466528de7d18017417b319e4782d3" + integrity sha512-03wksHRbhl2DouEKnqWuUb64s1lV6kDAAabMCQ2Du1fb8X/WhDmxHC4UXMzypeOGlH5BZBsgVwSB7vsZLP3MZg== + +"@algolia/logger-console@4.8.3": + version "4.8.3" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.8.3.tgz#e4bcda8ac6477ecf143a1d536be2b747b84b7047" + integrity sha512-Npt+hI4UF8t3TLMluL5utr9Gc11BjL5kDnGZOhDOAz5jYiSO2nrHMFmnpLT4Cy/u7a5t7EB5dlypuC4/AGStkA== + dependencies: + "@algolia/logger-common" "4.8.3" + +"@algolia/requester-browser-xhr@4.8.3": + version "4.8.3" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.8.3.tgz#f2fe880d261e33bce1c6d613be074fd87af9f7e6" + integrity sha512-/LTTIpgEmEwkyhn8yXxDdBWqXqzlgw5w2PtTpIwkSlP2/jDwdR/9w1TkFzhNbJ81ki6LAEQM5mSwoTTnbIIecg== + dependencies: + "@algolia/requester-common" "4.8.3" + +"@algolia/requester-common@4.8.3": + version "4.8.3" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.8.3.tgz#633b6782ae3fcf1743507c0ef207db5c62737443" + integrity sha512-+Yo9vBkofoKR1SCqqtMnmnfq9yt/BiaDewY/6bYSMNxSYCnu2Fw1JKSIaf/4zos09PMSsxGpLohZwGas3+0GDQ== + +"@algolia/requester-node-http@4.8.3": + version "4.8.3" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.8.3.tgz#81c8e5d02f16a57cebfa2309a931fad6de84eb6d" + integrity sha512-k2fiKIeMIFqgC01FnzII6kqC2GQBAfbNaUX4k7QCPa6P8t4sp2xE6fImOUiztLnnL3C9X9ZX6Fw3L+cudi7jvQ== + dependencies: + "@algolia/requester-common" "4.8.3" + +"@algolia/transporter@4.8.3": + version "4.8.3" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.8.3.tgz#6ad10b4be16653d667bb4727df27478931631fe8" + integrity sha512-nU7fy2iU8snxATlsks0MjMyv97QJWQmOVwTjDc+KZ4+nue8CLcgm4LA4dsTBqvxeCQIoEtt3n72GwXcaqiJSjQ== + dependencies: + "@algolia/cache-common" "4.8.3" + "@algolia/logger-common" "4.8.3" + "@algolia/requester-common" "4.8.3" + +"@babel/code-frame@7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== + dependencies: + "@babel/highlight" "^7.8.3" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.12.5", "@babel/compat-data@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" + integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== + +"@babel/core@7.12.9": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" + integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.7" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.9" + "@babel/types" "^7.12.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.12.3": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" + integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.10" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.10" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.12.10", "@babel/generator@^7.12.11", "@babel/generator@^7.12.5": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" + integrity sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA== + dependencies: + "@babel/types" "^7.12.11" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz#54ab9b000e60a93644ce17b3f37d313aaf1d115d" + integrity sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ== + dependencies: + "@babel/types" "^7.12.10" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-compilation-targets@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz#cb470c76198db6a24e9dbc8987275631e5d29831" + integrity sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw== + dependencies: + "@babel/compat-data" "^7.12.5" + "@babel/helper-validator-option" "^7.12.1" + browserslist "^4.14.5" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" + integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.12.1": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz#2084172e95443fa0a09214ba1bb328f9aea1278f" + integrity sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + regexpu-core "^4.7.1" + +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633" + integrity sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-function-name@^7.10.4", "@babel/helper-function-name@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz#1fd7738aee5dcf53c3ecff24f1da9c511ec47b42" + integrity sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA== + dependencies: + "@babel/helper-get-function-arity" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/types" "^7.12.11" + +"@babel/helper-get-function-arity@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" + integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== + dependencies: + "@babel/types" "^7.12.10" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.12.1", "@babel/helper-member-expression-to-functions@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" + integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== + dependencies: + "@babel/types" "^7.12.7" + +"@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" + integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== + dependencies: + "@babel/types" "^7.12.5" + +"@babel/helper-module-transforms@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4", "@babel/helper-optimise-call-expression@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d" + integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== + dependencies: + "@babel/types" "^7.12.10" + +"@babel/helper-plugin-utils@7.10.4", "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-remap-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd" + integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/types" "^7.12.1" + +"@babel/helper-replace-supers@^7.12.1": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz#ea511658fc66c7908f923106dd88e08d1997d60d" + integrity sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.12.7" + "@babel/helper-optimise-call-expression" "^7.12.10" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.11" + +"@babel/helper-simple-access@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0", "@babel/helper-split-export-declaration@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz#1b4cc424458643c47d37022223da33d76ea4603a" + integrity sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g== + dependencies: + "@babel/types" "^7.12.11" + +"@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + +"@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f" + integrity sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw== + +"@babel/helper-wrap-function@^7.10.4": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9" + integrity sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helpers@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" + integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.5", "@babel/parser@^7.12.7": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" + integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== + +"@babel/plugin-proposal-async-generator-functions@^7.12.1": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz#04b8f24fd4532008ab4e79f788468fd5a8476566" + integrity sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" + integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-dynamic-import@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" + integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-export-namespace-from@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz#8b9b8f376b2d88f5dd774e4d24a5cc2e3679b6d4" + integrity sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" + integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-logical-assignment-operators@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751" + integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" + integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz#8bf253de8139099fea193b297d23a9d406ef056b" + integrity sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.12.1" + +"@babel/plugin-proposal-optional-catch-binding@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" + integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.12.1", "@babel/plugin-proposal-optional-chaining@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz#e02f0ea1b5dc59d401ec16fb824679f683d3303c" + integrity sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz#86814f6e7a21374c980c10d38b4493e703f4a389" + integrity sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072" + integrity sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" + integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@7.12.1", "@babel/plugin-syntax-jsx@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" + integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" + integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-typescript@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz#460ba9d77077653803c3dd2e673f76d66b4029e5" + integrity sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-arrow-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3" + integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" + integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + +"@babel/plugin-transform-block-scoped-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" + integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-block-scoping@^7.12.11": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz#d93a567a152c22aea3b1929bb118d1d0a175cdca" + integrity sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-classes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" + integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" + integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-destructuring@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" + integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975" + integrity sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-duplicate-keys@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" + integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-exponentiation-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" + integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-for-of@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" + integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-function-name@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" + integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" + integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" + integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-modules-amd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" + integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" + integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.12.1" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086" + integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-identifier" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" + integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" + integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + +"@babel/plugin-transform-new-target@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" + integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-object-super@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e" + integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + +"@babel/plugin-transform-parameters@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" + integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-property-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" + integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-constant-elements@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.12.1.tgz#4471f0851feec3231cc9aaa0dccde39947c1ac1e" + integrity sha512-KOHd0tIRLoER+J+8f9DblZDa1fLGPwaaN1DI1TVHuQFOpjHV22C3CUB3obeC4fexHY9nx+fH0hQNvLFFfA1mxA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-display-name@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz#1cbcd0c3b1d6648c55374a22fc9b6b7e5341c00d" + integrity sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-jsx-development@^7.12.7": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.12.tgz#bccca33108fe99d95d7f9e82046bfe762e71f4e7" + integrity sha512-i1AxnKxHeMxUaWVXQOSIco4tvVvvCxMSfeBMnMM06mpaJt3g+MpxYQQrDfojUQldP1xxraPSJYSMEljoWM/dCg== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.12.12" + +"@babel/plugin-transform-react-jsx@^7.12.10", "@babel/plugin-transform-react-jsx@^7.12.12": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.12.tgz#b0da51ffe5f34b9a900e9f1f5fb814f9e512d25e" + integrity sha512-JDWGuzGNWscYcq8oJVCtSE61a5+XAOos+V0HrxnDieUus4UMnBEosDnY1VJqU5iZ4pA04QY7l0+JvHL1hZEfsw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.10" + "@babel/helper-module-imports" "^7.12.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.12.1" + "@babel/types" "^7.12.12" + +"@babel/plugin-transform-react-pure-annotations@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz#05d46f0ab4d1339ac59adf20a1462c91b37a1a42" + integrity sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753" + integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" + integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-runtime@^7.12.1": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.10.tgz#af0fded4e846c4b37078e8e5d06deac6cd848562" + integrity sha512-xOrUfzPxw7+WDm9igMgQCbO3cJKymX7dFdsgRr1eu9n3KjjyU4pptIXbXPseQDquw+W+RuJEJMHKHNsPNNm3CA== + dependencies: + "@babel/helper-module-imports" "^7.12.5" + "@babel/helper-plugin-utils" "^7.10.4" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3" + integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" + integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + +"@babel/plugin-transform-sticky-regex@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz#560224613ab23987453948ed21d0b0b193fa7fad" + integrity sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" + integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b" + integrity sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typescript@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz#d92cc0af504d510e26a754a7dbc2e5c8cd9c7ab4" + integrity sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-typescript" "^7.12.1" + +"@babel/plugin-transform-unicode-escapes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz#5232b9f81ccb07070b7c3c36c67a1b78f1845709" + integrity sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" + integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/preset-env@^7.12.1": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.11.tgz#55d5f7981487365c93dbbc84507b1c7215e857f9" + integrity sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw== + dependencies: + "@babel/compat-data" "^7.12.7" + "@babel/helper-compilation-targets" "^7.12.5" + "@babel/helper-module-imports" "^7.12.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.11" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-dynamic-import" "^7.12.1" + "@babel/plugin-proposal-export-namespace-from" "^7.12.1" + "@babel/plugin-proposal-json-strings" "^7.12.1" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-numeric-separator" "^7.12.7" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.7" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.12.1" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.11" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-computed-properties" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-dotall-regex" "^7.12.1" + "@babel/plugin-transform-duplicate-keys" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-function-name" "^7.12.1" + "@babel/plugin-transform-literals" "^7.12.1" + "@babel/plugin-transform-member-expression-literals" "^7.12.1" + "@babel/plugin-transform-modules-amd" "^7.12.1" + "@babel/plugin-transform-modules-commonjs" "^7.12.1" + "@babel/plugin-transform-modules-systemjs" "^7.12.1" + "@babel/plugin-transform-modules-umd" "^7.12.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" + "@babel/plugin-transform-new-target" "^7.12.1" + "@babel/plugin-transform-object-super" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-property-literals" "^7.12.1" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/plugin-transform-reserved-words" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-sticky-regex" "^7.12.7" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.10" + "@babel/plugin-transform-unicode-escapes" "^7.12.1" + "@babel/plugin-transform-unicode-regex" "^7.12.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.11" + core-js-compat "^3.8.0" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@^7.12.5": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.10.tgz#4fed65f296cbb0f5fb09de6be8cddc85cc909be9" + integrity sha512-vtQNjaHRl4DUpp+t+g4wvTHsLQuye+n0H/wsXIZRn69oz/fvNC7gQ4IK73zGJBaxvHoxElDvnYCthMcT7uzFoQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-react-display-name" "^7.12.1" + "@babel/plugin-transform-react-jsx" "^7.12.10" + "@babel/plugin-transform-react-jsx-development" "^7.12.7" + "@babel/plugin-transform-react-pure-annotations" "^7.12.1" + +"@babel/preset-typescript@^7.12.1": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.7.tgz#fc7df8199d6aae747896f1e6c61fc872056632a3" + integrity sha512-nOoIqIqBmHBSEgBXWR4Dv/XBehtIFcw9PqZw6rFYuKrzsZmOQm3PR5siLBnKZFEsDb03IegG8nSjU/iXXXYRmw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.1" + "@babel/plugin-transform-typescript" "^7.12.1" + +"@babel/runtime-corejs3@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.12.5.tgz#ffee91da0eb4c6dae080774e94ba606368e414f4" + integrity sha512-roGr54CsTmNPPzZoCP1AmDXuBoNao7tnSA83TXTwt+UK5QVyh1DIJnrgYRPWKCF2flqZQXwa7Yr8v7VmLzF0YQ== + dependencies: + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" + integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.10.4", "@babel/template@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" + integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" + +"@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.12.tgz#d0cd87892704edd8da002d674bc811ce64743376" + integrity sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w== + dependencies: + "@babel/code-frame" "^7.12.11" + "@babel/generator" "^7.12.11" + "@babel/helper-function-name" "^7.12.11" + "@babel/helper-split-export-declaration" "^7.12.11" + "@babel/parser" "^7.12.11" + "@babel/types" "^7.12.12" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.12.5", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.4.4": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299" + integrity sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@csstools/convert-colors@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" + integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== + +"@docsearch/css@3.0.0-alpha.32": + version "3.0.0-alpha.32" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.0.0-alpha.32.tgz#3d89c8db4035531d201f74ef2115f72094a24036" + integrity sha512-wafLX/jT1NPAwifPhzMJX394PjKdqf5TA4cz/JgvBYR1/+MiErLk/pyCmocXkawWGR17/6u2qw3wYvXu/Qe/DQ== + +"@docsearch/react@^3.0.0-alpha.31": + version "3.0.0-alpha.32" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.0.0-alpha.32.tgz#ae3fa82e9c88683d9415bc439c4af7e2c0cfa5b7" + integrity sha512-2jqzPJu4y0mWiwwm+Kfgf/97Q8XaGxj1+jJfGJpJLkJyD8S2tK4OikyIRWI9gI9k3m48HxFm0+P8uAYYtIyjqA== + dependencies: + "@algolia/autocomplete-core" "^1.0.0-alpha.35" + "@algolia/autocomplete-preset-algolia" "^1.0.0-alpha.35" + "@docsearch/css" "3.0.0-alpha.32" + algoliasearch "^4.0.0" + +"@docusaurus/core@2.0.0-alpha.70": + version "2.0.0-alpha.70" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-alpha.70.tgz#81bff8b093421a0c740fac02903dd23938806077" + integrity sha512-ccDcr5eb5T3C6k7VoqTclBFwjVkIHK1zISdhqzRNVl8AZTql1bYMvGUJP+2WbF6RSdmsGTNWreaUlrJc00dQqw== + dependencies: + "@babel/core" "^7.12.3" + "@babel/generator" "^7.12.5" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-transform-runtime" "^7.12.1" + "@babel/preset-env" "^7.12.1" + "@babel/preset-react" "^7.12.5" + "@babel/preset-typescript" "^7.12.1" + "@babel/runtime" "^7.12.5" + "@babel/runtime-corejs3" "^7.12.5" + "@babel/traverse" "^7.12.5" + "@docusaurus/cssnano-preset" "2.0.0-alpha.70" + "@docusaurus/types" "2.0.0-alpha.70" + "@docusaurus/utils" "2.0.0-alpha.70" + "@docusaurus/utils-validation" "2.0.0-alpha.70" + "@endiliey/static-site-generator-webpack-plugin" "^4.0.0" + "@svgr/webpack" "^5.4.0" + babel-loader "^8.2.1" + babel-plugin-dynamic-import-node "2.3.0" + boxen "^4.2.0" + cache-loader "^4.1.0" + chalk "^3.0.0" + chokidar "^3.4.3" + clean-css "^4.2.3" + commander "^4.0.1" + copy-webpack-plugin "^6.3.0" + core-js "^2.6.5" + css-loader "^3.4.2" + del "^5.1.0" + detect-port "^1.3.0" + eta "^1.11.0" + express "^4.17.1" + file-loader "^6.2.0" + fs-extra "^9.0.1" + globby "^10.0.1" + html-minifier-terser "^5.1.1" + html-tags "^3.1.0" + html-webpack-plugin "^4.5.0" + import-fresh "^3.2.2" + inquirer "^7.2.0" + is-root "^2.1.0" + joi "^17.2.1" + leven "^3.1.0" + lodash "^4.17.20" + lodash.flatmap "^4.5.0" + lodash.has "^4.5.2" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + mini-css-extract-plugin "^0.8.0" + nprogress "^0.2.0" + null-loader "^3.0.0" + optimize-css-assets-webpack-plugin "^5.0.4" + pnp-webpack-plugin "^1.6.4" + postcss-loader "^3.0.0" + postcss-preset-env "^6.7.0" + react-dev-utils "^10.2.1" + react-helmet "^6.1.0" + react-loadable "^5.5.0" + react-loadable-ssr-addon "^0.3.0" + react-router "^5.2.0" + react-router-config "^5.1.1" + react-router-dom "^5.2.0" + resolve-pathname "^3.0.0" + semver "^6.3.0" + serve-handler "^6.1.3" + shelljs "^0.8.4" + std-env "^2.2.1" + terser-webpack-plugin "^4.1.0" + update-notifier "^4.1.0" + url-loader "^4.1.1" + wait-on "^5.2.0" + webpack "^4.44.1" + webpack-bundle-analyzer "^3.6.1" + webpack-dev-server "^3.11.0" + webpack-merge "^4.2.2" + webpackbar "^4.0.0" + +"@docusaurus/cssnano-preset@2.0.0-alpha.70": + version "2.0.0-alpha.70" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-alpha.70.tgz#75dc56a71dc365a450729fd109b86fab72a6f560" + integrity sha512-Zwk3SrlE5r/z5j/tjDcs4XoyeoyymCtEovoxLWLV7wb+iR1qb+Jdso4TRShAepbW/ff6SzjCZ8hRy8ahXPD9TA== + dependencies: + cssnano-preset-advanced "^4.0.7" + postcss "^7.0.2" + postcss-combine-duplicated-selectors "^9.1.0" + postcss-sort-media-queries "^1.7.26" + +"@docusaurus/mdx-loader@2.0.0-alpha.70": + version "2.0.0-alpha.70" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-alpha.70.tgz#4cc3c92a5a89ffdc8313da998d4646564940b3e7" + integrity sha512-CDR4O4z7wO5/S8O3TAggCynnuBIGIlUT9q9uhhkDe8h5XDhF8n8d6bwqir0O+fUMN3EnyrMq6z1g4IDRB5G2vw== + dependencies: + "@babel/parser" "^7.12.5" + "@babel/traverse" "^7.12.5" + "@docusaurus/core" "2.0.0-alpha.70" + "@docusaurus/utils" "2.0.0-alpha.70" + "@mdx-js/mdx" "^1.6.21" + "@mdx-js/react" "^1.6.21" + escape-html "^1.0.3" + file-loader "^6.2.0" + fs-extra "^9.0.1" + github-slugger "^1.3.0" + gray-matter "^4.0.2" + loader-utils "^2.0.0" + mdast-util-to-string "^1.1.0" + remark-emoji "^2.1.0" + stringify-object "^3.3.0" + unist-util-visit "^2.0.2" + url-loader "^4.1.1" + webpack "^4.44.1" + +"@docusaurus/plugin-content-blog@2.0.0-alpha.70": + version "2.0.0-alpha.70" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-alpha.70.tgz#795a5ddf181dfb314873a5dc33010d1a5bd94d28" + integrity sha512-qWXlSDovkhCZLJR0Wz4e3YcNjlelpuSNkS1rJ8sI1ehs/n32lj7A/nVoRfS/LnOMfIciY48vVPr64VLb6dfEeg== + dependencies: + "@docusaurus/core" "2.0.0-alpha.70" + "@docusaurus/mdx-loader" "2.0.0-alpha.70" + "@docusaurus/types" "2.0.0-alpha.70" + "@docusaurus/utils" "2.0.0-alpha.70" + "@docusaurus/utils-validation" "2.0.0-alpha.70" + chalk "^3.0.0" + feed "^4.2.1" + fs-extra "^9.0.1" + globby "^10.0.1" + joi "^17.2.1" + loader-utils "^1.2.3" + lodash "^4.17.20" + reading-time "^1.2.0" + remark-admonitions "^1.2.1" + webpack "^4.44.1" + +"@docusaurus/plugin-content-docs@2.0.0-alpha.70": + version "2.0.0-alpha.70" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-alpha.70.tgz#42dfa40786e819b42974dd167048b190b37bbee5" + integrity sha512-LZre12Q0sxLgi2XgjQbNQMV+jFG7v0+8hRzgBL+iCRiLCa4NlV7+M6mEHJGJJXSKqbfH7CelaUOESqEgPpVQXQ== + dependencies: + "@docusaurus/core" "2.0.0-alpha.70" + "@docusaurus/mdx-loader" "2.0.0-alpha.70" + "@docusaurus/types" "2.0.0-alpha.70" + "@docusaurus/utils" "2.0.0-alpha.70" + "@docusaurus/utils-validation" "2.0.0-alpha.70" + chalk "^3.0.0" + execa "^3.4.0" + fs-extra "^9.0.1" + globby "^10.0.1" + import-fresh "^3.2.2" + joi "^17.2.1" + loader-utils "^1.2.3" + lodash "^4.17.19" + lodash.flatmap "^4.5.0" + lodash.groupby "^4.6.0" + lodash.pick "^4.4.0" + lodash.pickby "^4.6.0" + lodash.sortby "^4.6.0" + remark-admonitions "^1.2.1" + shelljs "^0.8.4" + utility-types "^3.10.0" + webpack "^4.44.1" + +"@docusaurus/plugin-content-pages@2.0.0-alpha.70": + version "2.0.0-alpha.70" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-alpha.70.tgz#6cb937c9601d92bb616c7d95974d780d1a708ef7" + integrity sha512-HiFa5l1RDs155ATyYKkPtyIs/d6WJgSAyVfY5ji0Bsixp/K/Kh9YUZYMeTfeMIdhGYe3AAJz+PSZHYRpwTo1wA== + dependencies: + "@docusaurus/core" "2.0.0-alpha.70" + "@docusaurus/mdx-loader" "2.0.0-alpha.70" + "@docusaurus/types" "2.0.0-alpha.70" + "@docusaurus/utils" "2.0.0-alpha.70" + "@docusaurus/utils-validation" "2.0.0-alpha.70" + globby "^10.0.1" + joi "^17.2.1" + loader-utils "^1.2.3" + lodash "^4.17.19" + minimatch "^3.0.4" + remark-admonitions "^1.2.1" + slash "^3.0.0" + webpack "^4.44.1" + +"@docusaurus/plugin-debug@2.0.0-alpha.70": + version "2.0.0-alpha.70" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-alpha.70.tgz#7a41d24151a92195311c85ab827656cf705a0c68" + integrity sha512-h/x5KtS/YJerhY6C6sJOaP9gMaSVnjj1qZ6r9E/IFujQJ7bSKnk1unqBQpVXADkQhP081ENPL01ubc0/JbE1Mw== + dependencies: + "@docusaurus/core" "2.0.0-alpha.70" + "@docusaurus/types" "2.0.0-alpha.70" + "@docusaurus/utils" "2.0.0-alpha.70" + react-json-view "^1.19.1" + +"@docusaurus/plugin-google-analytics@2.0.0-alpha.70": + version "2.0.0-alpha.70" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-alpha.70.tgz#9476314353d585716cbdd408319ff30bdbda4f87" + integrity sha512-Ah9W83ZnA0VvmflKNuGq5f/CaEjWJxhjkISQn09/ykEvXfWV33000Bhck4RoCr5YxD+GBEBT5suG5LKH7Qkigw== + dependencies: + "@docusaurus/core" "2.0.0-alpha.70" + +"@docusaurus/plugin-google-gtag@2.0.0-alpha.70": + version "2.0.0-alpha.70" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-alpha.70.tgz#a90e54830a6f95a83cf51b82e7e6adcf6a699dc1" + integrity sha512-K3s894PqMPQnGXEZs0bSs2bRE3bVXFYSb/RN+K9sNd7zxGuOX4UytuvpXP+1r0Hj/YTwQIjj7AKsND0ZpDJHyw== + dependencies: + "@docusaurus/core" "2.0.0-alpha.70" + +"@docusaurus/plugin-sitemap@2.0.0-alpha.70": + version "2.0.0-alpha.70" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-alpha.70.tgz#1eb02e4a4ecf5fb2bdf641a6f962ae421ff86916" + integrity sha512-ev9yNLPoeHP03jTz67daGd7yA7YhUwHeoWz14SyiKuU7OYtwL/8SJTn/V5kMDRl7o8FRQt9T//mRkpa270hmXw== + dependencies: + "@docusaurus/core" "2.0.0-alpha.70" + "@docusaurus/types" "2.0.0-alpha.70" + fs-extra "^9.0.1" + joi "^17.2.1" + sitemap "^3.2.2" + +"@docusaurus/preset-classic@2.0.0-alpha.70": + version "2.0.0-alpha.70" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-alpha.70.tgz#7857f606eecdbaa34f8df83d62812908be02126f" + integrity sha512-Zx98KryJjHiqzGisWKR0glXl0HXuf/YbcK9yUl6ySyS+6cIMAuGMS0HGLgbvvEmYjywz7nMLpijzGderEOihjQ== + dependencies: + "@docusaurus/core" "2.0.0-alpha.70" + "@docusaurus/plugin-content-blog" "2.0.0-alpha.70" + "@docusaurus/plugin-content-docs" "2.0.0-alpha.70" + "@docusaurus/plugin-content-pages" "2.0.0-alpha.70" + "@docusaurus/plugin-debug" "2.0.0-alpha.70" + "@docusaurus/plugin-google-analytics" "2.0.0-alpha.70" + "@docusaurus/plugin-google-gtag" "2.0.0-alpha.70" + "@docusaurus/plugin-sitemap" "2.0.0-alpha.70" + "@docusaurus/theme-classic" "2.0.0-alpha.70" + "@docusaurus/theme-search-algolia" "2.0.0-alpha.70" + +"@docusaurus/theme-classic@2.0.0-alpha.70": + version "2.0.0-alpha.70" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0-alpha.70.tgz#58e2dceee1076980700865df460e771e8d78cb68" + integrity sha512-lKU+fgSd08fo3LNYTw31Wty7RgAdFm8bEOwBNkKZcCFnatTSG4qyDbrDZclCQT/SpXSv9XIEKUc0irg2IH6Qrg== + dependencies: + "@docusaurus/core" "2.0.0-alpha.70" + "@docusaurus/plugin-content-blog" "2.0.0-alpha.70" + "@docusaurus/plugin-content-docs" "2.0.0-alpha.70" + "@docusaurus/plugin-content-pages" "2.0.0-alpha.70" + "@docusaurus/theme-common" "2.0.0-alpha.70" + "@docusaurus/types" "2.0.0-alpha.70" + "@docusaurus/utils" "2.0.0-alpha.70" + "@docusaurus/utils-validation" "2.0.0-alpha.70" + "@mdx-js/mdx" "^1.6.21" + "@mdx-js/react" "^1.6.21" + "@types/react-toggle" "^4.0.2" + clsx "^1.1.1" + copy-text-to-clipboard "^2.2.0" + infima "0.2.0-alpha.18" + joi "^17.2.1" + lodash "^4.17.19" + parse-numeric-range "^1.2.0" + prism-react-renderer "^1.1.1" + prismjs "^1.22.0" + prop-types "^15.7.2" + react-router-dom "^5.2.0" + react-toggle "^4.1.1" + +"@docusaurus/theme-common@2.0.0-alpha.70": + version "2.0.0-alpha.70" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.0.0-alpha.70.tgz#fa42aef2ec1b535d37f72fc978a3138c49667a37" + integrity sha512-Ge/dLGPCJhtyvumSMg0BlWcF00d1Qd2KnHf8kL/0nTxe257yNTHIOK95LKhIPAdcVgxG+ge9N0XcBm4KaubASQ== + dependencies: + "@docusaurus/core" "2.0.0-alpha.70" + "@docusaurus/plugin-content-blog" "2.0.0-alpha.70" + "@docusaurus/plugin-content-docs" "2.0.0-alpha.70" + "@docusaurus/plugin-content-pages" "2.0.0-alpha.70" + "@docusaurus/types" "2.0.0-alpha.70" + +"@docusaurus/theme-search-algolia@2.0.0-alpha.70": + version "2.0.0-alpha.70" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-alpha.70.tgz#7f41241e0d22e89438817a3d4a27d880116c06c1" + integrity sha512-xuoWZ+HUKzn1A5vPlNZM8mtyRL5uo15o34OX/i7HkTRmBVymWO1bBE0lECfDVJU2JUYGmwjpDXhZzNLDZmZRWg== + dependencies: + "@docsearch/react" "^3.0.0-alpha.31" + "@docusaurus/core" "2.0.0-alpha.70" + "@docusaurus/theme-common" "2.0.0-alpha.70" + "@docusaurus/utils" "2.0.0-alpha.70" + algoliasearch "^4.0.0" + algoliasearch-helper "^3.1.1" + clsx "^1.1.1" + eta "^1.11.0" + joi "^17.2.1" + lodash "^4.17.19" + +"@docusaurus/types@2.0.0-alpha.70": + version "2.0.0-alpha.70" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.0-alpha.70.tgz#44b98290919cca2505aea334daecf762c7537d10" + integrity sha512-QoHmMiJhRDq5P/4o3eUIiJebdwRjShFlal01DST5B8MZo4k0ogl57FNHqJvIHc93NgonZzFlvC/auLlBnc/d4Q== + dependencies: + "@types/webpack" "^4.41.0" + commander "^4.0.1" + querystring "0.2.0" + webpack-merge "^4.2.2" + +"@docusaurus/utils-validation@2.0.0-alpha.70": + version "2.0.0-alpha.70" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.70.tgz#04f24a7b3a4568ca164a8c1a4cf0caa8ba5caa6e" + integrity sha512-GJonaRjiJtlCk1+RfKA9f0YwRsSRGFMVbl6DrFidTgs4FmRb0hQsN4fnllsBvBJtbDZYwPTQ3T7c4cKJ/Ll7bQ== + dependencies: + "@docusaurus/utils" "2.0.0-alpha.70" + chalk "^3.0.0" + joi "^17.2.1" + +"@docusaurus/utils@2.0.0-alpha.70": + version "2.0.0-alpha.70" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-alpha.70.tgz#01779efcb4ff3bf39f9e74b3ef06fc2c8a43633a" + integrity sha512-xNSUcE7fGcneH00CPCEY0SP5V7H6pLEcu620UiU/m1367tCMsmv+MZcnII2ACcjAtvhjS22v/KLippM3VeTXqQ== + dependencies: + "@docusaurus/types" "2.0.0-alpha.70" + chalk "^3.0.0" + escape-string-regexp "^2.0.0" + fs-extra "^9.0.1" + gray-matter "^4.0.2" + lodash "^4.17.20" + lodash.camelcase "^4.3.0" + lodash.kebabcase "^4.1.1" + resolve-pathname "^3.0.0" + +"@endiliey/static-site-generator-webpack-plugin@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@endiliey/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.0.tgz#94bfe58fd83aeda355de797fcb5112adaca3a6b1" + integrity sha512-3MBqYCs30qk1OBRC697NqhGouYbs71D1B8hrk/AFJC6GwF2QaJOQZtA1JYAaGSe650sZ8r5ppRTtCRXepDWlng== + dependencies: + bluebird "^3.7.1" + cheerio "^0.22.0" + eval "^0.1.4" + url "^0.11.0" + webpack-sources "^1.4.3" + +"@hapi/hoek@^9.0.0": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.1.tgz#9daf5745156fd84b8e9889a2dc721f0c58e894aa" + integrity sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw== + +"@hapi/topo@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.0.0.tgz#c19af8577fa393a06e9c77b60995af959be721e7" + integrity sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@mdx-js/mdx@^1.6.21": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba" + integrity sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA== + dependencies: + "@babel/core" "7.12.9" + "@babel/plugin-syntax-jsx" "7.12.1" + "@babel/plugin-syntax-object-rest-spread" "7.8.3" + "@mdx-js/util" "1.6.22" + babel-plugin-apply-mdx-type-prop "1.6.22" + babel-plugin-extract-import-names "1.6.22" + camelcase-css "2.0.1" + detab "2.0.4" + hast-util-raw "6.0.1" + lodash.uniq "4.5.0" + mdast-util-to-hast "10.0.1" + remark-footnotes "2.0.0" + remark-mdx "1.6.22" + remark-parse "8.0.3" + remark-squeeze-paragraphs "4.0.0" + style-to-object "0.3.0" + unified "9.2.0" + unist-builder "2.0.3" + unist-util-visit "2.0.3" + +"@mdx-js/react@^1.6.21": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573" + integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== + +"@mdx-js/util@1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" + integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== + dependencies: + "@nodelib/fs.stat" "2.0.4" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== + +"@nodelib/fs.stat@^1.1.2": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + dependencies: + "@nodelib/fs.scandir" "2.1.4" + fastq "^1.6.0" + +"@npmcli/move-file@^1.0.1": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.0.tgz#4ef8a53d727b9e43facf35404caf55ebf92cfec8" + integrity sha512-Iv2iq0JuyYjKeFkSR4LPaCdDZwlGK9X2cP/01nJcp3yMJ1FjNd9vpiEYvLUgzBxKPg2SFmaOhizoQsPc0LWeOQ== + dependencies: + mkdirp "^1.0.4" + rimraf "^2.7.1" + +"@sideway/address@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.0.tgz#0b301ada10ac4e0e3fa525c90615e0b61a72b78d" + integrity sha512-wAH/JYRXeIFQRsxerIuLjgUu2Xszam+O5xKeatJ4oudShOOirfmsQ1D6LL54XOU2tizpCYku+s1wmU0SYdpoSA== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" + integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" + integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== + +"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" + integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== + +"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" + integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" + integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== + +"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" + integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== + +"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" + integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== + +"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" + integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== + +"@svgr/babel-plugin-transform-svg-component@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" + integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== + +"@svgr/babel-preset@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" + integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" + "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" + "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" + "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" + "@svgr/babel-plugin-transform-svg-component" "^5.5.0" + +"@svgr/core@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" + integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== + dependencies: + "@svgr/plugin-jsx" "^5.5.0" + camelcase "^6.2.0" + cosmiconfig "^7.0.0" + +"@svgr/hast-util-to-babel-ast@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" + integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== + dependencies: + "@babel/types" "^7.12.6" + +"@svgr/plugin-jsx@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" + integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== + dependencies: + "@babel/core" "^7.12.3" + "@svgr/babel-preset" "^5.5.0" + "@svgr/hast-util-to-babel-ast" "^5.5.0" + svg-parser "^2.0.2" + +"@svgr/plugin-svgo@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" + integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== + dependencies: + cosmiconfig "^7.0.0" + deepmerge "^4.2.2" + svgo "^1.2.2" + +"@svgr/webpack@^5.4.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" + integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== + dependencies: + "@babel/core" "^7.12.3" + "@babel/plugin-transform-react-constant-elements" "^7.12.1" + "@babel/preset-env" "^7.12.1" + "@babel/preset-react" "^7.12.5" + "@svgr/core" "^5.5.0" + "@svgr/plugin-jsx" "^5.5.0" + "@svgr/plugin-svgo" "^5.5.0" + loader-utils "^2.0.0" + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@types/anymatch@*": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" + integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/hast@^2.0.0": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.1.tgz#b16872f2a6144c7025f296fb9636a667ebb79cd9" + integrity sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q== + dependencies: + "@types/unist" "*" + +"@types/html-minifier-terser@^5.0.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50" + integrity sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA== + +"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== + +"@types/mdast@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb" + integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw== + dependencies: + "@types/unist" "*" + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/node@*": + version "14.14.21" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.21.tgz#d934aacc22424fe9622ebf6857370c052eae464e" + integrity sha512-cHYfKsnwllYhjOzuC5q1VpguABBeecUp24yFluHpn/BQaVxB1CuQ1FSRZCzrPxrkIfWISXV2LbeoBthLWg0+0A== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/parse5@^5.0.0": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" + integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== + +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + +"@types/q@^1.5.1": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== + +"@types/react-toggle@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/react-toggle/-/react-toggle-4.0.2.tgz#46ffa5af1a55de5f25d0aa78ef0b557b5c8bf276" + integrity sha512-sHqfoKFnL0YU2+OC4meNEC8Ptx9FE8/+nFeFvNcdBa6ANA8KpAzj3R9JN8GtrvlLgjKDoYgI7iILgXYcTPo2IA== + dependencies: + "@types/react" "*" + +"@types/react@*": + version "17.0.0" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.0.tgz#5af3eb7fad2807092f0046a1302b7823e27919b8" + integrity sha512-aj/L7RIMsRlWML3YB6KZiXB3fV2t41+5RBGYF8z+tAKU43Px8C3cYUZsDvf1/+Bm4FK21QWBrDutu8ZJ/70qOw== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + +"@types/tapable@*", "@types/tapable@^1.0.5": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" + integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== + +"@types/uglify-js@*": + version "3.11.1" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.11.1.tgz#97ff30e61a0aa6876c270b5f538737e2d6ab8ceb" + integrity sha512-7npvPKV+jINLu1SpSYVWG8KvyJBhBa8tmzMMdDoVc2pWUYHN8KIXlPJhjJ4LT97c4dXJA2SHL/q6ADbDriZN+Q== + dependencies: + source-map "^0.6.1" + +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" + integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== + +"@types/webpack-sources@*": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.0.tgz#8882b0bd62d1e0ce62f183d0d01b72e6e82e8c10" + integrity sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.7.3" + +"@types/webpack@^4.41.0", "@types/webpack@^4.41.8": + version "4.41.26" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.26.tgz#27a30d7d531e16489f9c7607c747be6bc1a459ef" + integrity sha512-7ZyTfxjCRwexh+EJFwRUM+CDB2XvgHl4vfuqf1ZKrgGvcS5BrNvPQqJh3tsZ0P6h6Aa1qClVHaJZszLPzpqHeA== + dependencies: + "@types/anymatch" "*" + "@types/node" "*" + "@types/tapable" "*" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + source-map "^0.6.0" + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^6.4.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +address@1.1.2, address@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + +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-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +algoliasearch-helper@^3.1.1: + version "3.3.4" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.3.4.tgz#4a3c56d42a2a81589d5722b73653b2deaf3e7064" + integrity sha512-1Ts2XcgGdjGlDrp3v6zbY8VW+X9+jJ5rBmtPBmXOQLd4b5t/LpJlaBdxoAnlMfVFjywP7KSAdmyFUNNYVHDyRQ== + dependencies: + events "^1.1.1" + +algoliasearch@^4.0.0: + version "4.8.3" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.8.3.tgz#f76b824423e4264506fb6ba6a6709feb08ab9954" + integrity sha512-pljX9jEE2TQ3i1JayhG8afNdE8UuJg3O9c7unW6QO67yRWCKr6b0t5aKC3hSVtjt7pA2TQXLKoAISb4SHx9ozQ== + dependencies: + "@algolia/cache-browser-local-storage" "4.8.3" + "@algolia/cache-common" "4.8.3" + "@algolia/cache-in-memory" "4.8.3" + "@algolia/client-account" "4.8.3" + "@algolia/client-analytics" "4.8.3" + "@algolia/client-common" "4.8.3" + "@algolia/client-recommendation" "4.8.3" + "@algolia/client-search" "4.8.3" + "@algolia/logger-common" "4.8.3" + "@algolia/logger-console" "4.8.3" + "@algolia/requester-browser-xhr" "4.8.3" + "@algolia/requester-common" "4.8.3" + "@algolia/requester-node-http" "4.8.3" + "@algolia/transporter" "4.8.3" + +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +ansi-align@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + dependencies: + string-width "^3.0.0" + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-escapes@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +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@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +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" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +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== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +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== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@^9.4.7, autoprefixer@^9.6.1: + version "9.8.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" + integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== + dependencies: + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + colorette "^1.2.1" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" + +axios@^0.21.1: + version "0.21.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" + integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== + dependencies: + follow-redirects "^1.10.0" + +babel-code-frame@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-loader@^8.2.1: + version "8.2.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" + integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^1.4.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-apply-mdx-type-prop@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz#d216e8fd0de91de3f1478ef3231e05446bc8705b" + integrity sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + "@mdx-js/util" "1.6.22" + +babel-plugin-dynamic-import-node@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" + integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-extract-import-names@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz#de5f9a28eb12f3eb2578bf74472204e66d1a13dc" + integrity sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base16@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + integrity sha1-4pf2DX7BAUp6lxo568ipjAtoHnA= + +base64-js@^1.0.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bfj@^6.1.1: + version "6.1.2" + resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f" + integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw== + dependencies: + bluebird "^3.5.5" + check-types "^8.0.3" + hoopy "^0.1.4" + tryer "^1.0.1" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +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== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bluebird@^3.5.5, bluebird@^3.7.1: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" + integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +boxen@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" + integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^5.3.1" + chalk "^3.0.0" + cli-boxes "^2.2.0" + string-width "^4.1.0" + term-size "^2.1.0" + type-fest "^0.8.1" + widest-line "^3.1.0" + +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" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, 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" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.10.0.tgz#f179737913eaf0d2b98e4926ac1ca6a15cbcc6a9" + integrity sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA== + dependencies: + caniuse-lite "^1.0.30001035" + electron-to-chromium "^1.3.378" + node-releases "^1.1.52" + pkg-up "^3.1.0" + +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.0, browserslist@^4.6.4: + version "4.16.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.1.tgz#bf757a2da376b3447b800a16f0f1c96358138766" + integrity sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA== + dependencies: + caniuse-lite "^1.0.30001173" + colorette "^1.2.1" + electron-to-chromium "^1.3.634" + escalade "^3.1.1" + node-releases "^1.1.69" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-json@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/buffer-json/-/buffer-json-2.0.0.tgz#f73e13b1e42f196fe2fd67d001c7d7107edd7c23" + integrity sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + 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" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^15.0.5: + version "15.0.5" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" + integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== + dependencies: + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.0" + tar "^6.0.2" + unique-filename "^1.1.1" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cache-loader@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-4.1.0.tgz#9948cae353aec0a1fcb1eafda2300816ec85387e" + integrity sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw== + dependencies: + buffer-json "^2.0.0" + find-cache-dir "^3.0.0" + loader-utils "^1.2.3" + mkdirp "^0.5.1" + neo-async "^2.6.1" + schema-utils "^2.0.0" + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +call-bind@^1.0.0: + 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" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase-css@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001173: + version "1.0.30001177" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001177.tgz#2c3b384933aafda03e29ccca7bb3d8c3389e1ece" + integrity sha512-6Ld7t3ifCL02jTj3MxPMM5wAYjbo4h/TAQGFTgv1inihP1tWnWp8mxxT4ut4JBEHLbpFXEXJJQ119JCJTBkYDw== + +ccount@^1.0.0, ccount@^1.0.3: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" + integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +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== + +check-types@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" + integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== + +cheerio@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" + integrity sha1-qbqoYKP5tZWmuBsahocxIe06Jp4= + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash.assignin "^4.0.9" + lodash.bind "^4.1.4" + lodash.defaults "^4.0.1" + lodash.filter "^4.4.0" + lodash.flatten "^4.2.0" + lodash.foreach "^4.3.0" + lodash.map "^4.4.0" + lodash.merge "^4.4.0" + lodash.pick "^4.2.1" + lodash.reduce "^4.4.0" + lodash.reject "^4.4.0" + lodash.some "^4.4.0" + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.3.0, chokidar@^3.4.1, chokidar@^3.4.3: + version "3.5.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.0.tgz#458a4816a415e9d3b3caa4faec2b96a6935a9e65" + integrity sha512-JgQM9JS92ZbFR4P90EvmzNpSGhpPBGBSj10PILeDyYFwp4h2/D9OM03wsJ4zW1fEp4ka2DGrnUeD7FuvQ2aZ2Q== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +ci-info@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +classnames@^2.2.5: + version "2.2.6" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== + +clean-css@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + +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-boxes@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +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-width@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== + +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== + +clipboard@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.6.tgz#52921296eec0fdf77ead1749421b21c968647376" + integrity sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg== + dependencies: + good-listener "^1.2.2" + select "^1.1.2" + tiny-emitter "^2.0.0" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +clsx@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" + integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +collapse-white-space@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" + integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +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.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, 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== + +color-string@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6" + integrity sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" + integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.4" + +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + +comma-separated-tokens@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== + +commander@^2.18.0, commander@^2.20.0: + 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.0.1, 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== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + 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== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +consola@^2.10.0: + version "2.15.0" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.0.tgz#40fc4eefa4d2f8ef2e2806147f056ea207fcc0e9" + integrity sha512-vlcSGgdYS26mPf7qNi+dCisbhiyDnrN1zaRbw3CSuc2wGOMEGGPsp46PdRG5gqXwgtJfjxDkxRNAgRPr1B77vQ== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-text-to-clipboard@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-2.2.0.tgz#329dd6daf8c42034c763ace567418401764579ae" + integrity sha512-WRvoIdnTs1rgPMkgA2pUOa/M4Enh2uzCwdKsOMYNAJiz/4ZvEJgmbF4OmninPmlFdAWisfeh0tH+Cpf7ni3RqQ== + +copy-webpack-plugin@^6.3.0: + version "6.4.1" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz#138cd9b436dbca0a6d071720d5414848992ec47e" + integrity sha512-MXyPCjdPVx5iiWyl40Va3JGh27bKzOTNY3NjUTrosD2q7dR/cLD0013uqJ3BpFbUjyONINjb6qI7nDIJujrMbA== + dependencies: + cacache "^15.0.5" + fast-glob "^3.2.4" + find-cache-dir "^3.3.1" + glob-parent "^5.1.1" + globby "^11.0.1" + loader-utils "^2.0.0" + normalize-path "^3.0.0" + p-limit "^3.0.2" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + webpack-sources "^1.4.3" + +core-js-compat@^3.8.0: + version "3.8.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.2.tgz#3717f51f6c3d2ebba8cbf27619b57160029d1d4c" + integrity sha512-LO8uL9lOIyRRrQmZxHZFl1RV+ZbcsAkFWTktn5SmH40WgLtSNYN4m4W2v9ONT147PxBY/XrRhrWq8TlvObyUjQ== + dependencies: + browserslist "^4.16.0" + semver "7.0.0" + +core-js-pure@^3.0.0: + version "3.8.2" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.8.2.tgz#286f885c0dac1cdcd6d78397392abc25ddeca225" + integrity sha512-v6zfIQqL/pzTVAbZvYUozsxNfxcFb6Ks3ZfEbuneJl3FW9Jb8F6vLWB6f+qTmAu72msUdyb84V8d/yBFf7FNnw== + +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= + +core-js@^2.6.5: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cosmiconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" + integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cross-spawn@^6.0.0: + 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" + +cross-spawn@^7.0.0: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-blank-pseudo@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" + integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w== + dependencies: + postcss "^7.0.5" + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-has-pseudo@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" + integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^5.0.0-rc.4" + +css-loader@^3.4.2: + version "3.6.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" + integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== + dependencies: + camelcase "^5.3.1" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^1.2.3" + normalize-path "^3.0.0" + postcss "^7.0.32" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.2" + postcss-modules-scope "^2.2.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.0" + semver "^6.3.0" + +css-prefers-color-scheme@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" + integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg== + dependencies: + postcss "^7.0.5" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0, css-select@^2.0.2: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-select@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.2.tgz#9ae393b5dafd7dae8a622475caec78d3d8fbd7b5" + integrity sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@2.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + +cssdb@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" + integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== + +cssesc@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" + integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-advanced@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-4.0.7.tgz#d981527b77712e2f3f3f09c73313e9b71b278b88" + integrity sha512-j1O5/DQnaAqEyFFQfC+Z/vRlLXL3LxJHN+lvsfYqr7KgPH74t69+Rsy2yXkovWNaJjZYBpdz2Fj8ab2nH7pZXw== + dependencies: + autoprefixer "^9.4.7" + cssnano-preset-default "^4.0.7" + postcss-discard-unused "^4.0.1" + postcss-merge-idents "^4.0.1" + postcss-reduce-idents "^4.0.2" + postcss-zindex "^4.0.1" + +cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.2" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^4.1.10: + version "4.1.10" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +csstype@^3.0.2: + version "3.0.6" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.6.tgz#865d0b5833d7d8d40f4e5b8a6d76aea3de4725ef" + integrity sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw== + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.1, debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +del@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7" + integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== + dependencies: + globby "^10.0.1" + graceful-fs "^4.2.2" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.1" + p-map "^3.0.0" + rimraf "^3.0.0" + slash "^3.0.0" + +delegate@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" + integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detab@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.4.tgz#b927892069aff405fbb9a186fe97a44a92a94b43" + integrity sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g== + dependencies: + repeat-string "^1.5.4" + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +detect-port-alt@1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +detect-port@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" + integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag== + dependencies: + arrify "^1.0.1" + path-type "^3.0.0" + +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" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +dom-converter@^0.2: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" + integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== + dependencies: + domelementtype "^1.3.0" + entities "^1.1.1" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" + integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1, domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +ejs@^2.6.1: + version "2.7.4" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" + integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== + +electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.634: + version "1.3.639" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.639.tgz#0a27e3018ae3acf438a14a1dd4e41db4b8ab764e" + integrity sha512-bwl6/U6xb3d3CNufQU9QeO1L32ueouFwW4bWANSwdXR7LVqyLzWjNbynoKNfuC38QFB5Qn7O0l2KLqBkcXnC3Q== + +elliptic@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +"emoji-regex@>=6.0.0 <=6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" + integrity sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4= + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +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== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +emoticon@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-3.2.0.tgz#c008ca7d7620fac742fe1bf4af8ff8fed154ae7f" + integrity sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +encoding@^0.1.11: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + 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" + +enhanced-resolve@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +entities@^1.1.1, entities@~1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" + integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== + +errno@^0.1.3, errno@~0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: + version "1.17.7" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" + integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-abstract@^1.18.0-next.1: + version "1.18.0-next.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" + integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +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" + +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-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + +escape-html@^1.0.3, escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +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 sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +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== + +esrecurse@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eta@^1.11.0: + version "1.12.1" + resolved "https://registry.yarnpkg.com/eta/-/eta-1.12.1.tgz#d985766591676c323f02dfc48a67539212745937" + integrity sha512-H8npoci2J/7XiPnVcCVulBSPsTNGvGaINyMjQDU8AFqp9LGsEYS88g2CiU+d01Sg44WtX7o4nb8wUJ9vnI+tiA== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eval@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.4.tgz#e05dbe0dab4b9330215cbb7bf4886eb24bd58700" + integrity sha512-npGsebJejyjMRnLdFu+T/97dnigqIU0Ov3IGrZ8ygd1v7RL1vGkEKtvyWZobqUH1AQgKlg0Yqqe2BtMA9/QZLw== + dependencies: + require-like ">= 0.1.1" + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= + +events@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +express@^4.16.3, express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +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" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +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@^2.0.2: + version "2.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" + +fast-glob@^3.0.3, fast-glob@^3.1.1, fast-glob@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-url-parser@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" + integrity sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0= + dependencies: + punycode "^1.3.2" + +fastq@^1.6.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.0.tgz#74dbefccade964932cdf500473ef302719c652bb" + integrity sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + +fbemitter@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-2.1.1.tgz#523e14fdaf5248805bb02f62efc33be703f51865" + integrity sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU= + dependencies: + fbjs "^0.8.4" + +fbjs@^0.8.0, fbjs@^0.8.4: + version "0.8.17" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" + integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.18" + +feed@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.1.tgz#b246ef891051c7dbf088ca203341d9fb0444baee" + integrity sha512-l28KKcK1J/u3iq5dRDmmoB2p7dtBfACC2NqJh4dI2kFptxH0asfjmOfcxqh5Sv8suAlVa73gZJ4REY5RrafVvg== + dependencies: + xml-js "^1.6.11" + +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +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-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filesize@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.0.1.tgz#f850b509909c7c86f7e450ea19006c31c2ed3d2f" + integrity sha512-u4AYWPgbI5GBhs6id1KdImZWn5yfyFrrQ8OWZdN7ZMfA8Bf4HcO0BGo9bmUIEV8yrp8I1xVfJ/dn90GtFNNJcg== + +filesize@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" + integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +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" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-cache-dir@^3.0.0, find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@4.1.0, find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +flatten@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" + integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +flux@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/flux/-/flux-3.1.3.tgz#d23bed515a79a22d933ab53ab4ada19d05b2f08a" + integrity sha1-0jvtUVp5oi2TOrU6tK2hnQWy8Io= + dependencies: + fbemitter "^2.0.0" + fbjs "^0.8.0" + +follow-redirects@^1.0.0, follow-redirects@^1.10.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.1.tgz#5f69b813376cee4fd0474a3aba835df04ab763b7" + integrity sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +fork-ts-checker-webpack-plugin@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz#a1642c0d3e65f50c2cc1742e9c0a80f441f86b19" + integrity sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ== + dependencies: + babel-code-frame "^6.22.0" + chalk "^2.4.1" + chokidar "^3.3.0" + micromatch "^3.1.10" + minimatch "^3.0.4" + semver "^5.6.0" + tapable "^1.0.0" + worker-rpc "^0.1.0" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.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-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" + integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== + +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== + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1: + 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: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" + integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-stream@^4.0.0, get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.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-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +github-slugger@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.3.0.tgz#9bd0a95c5efdfc46005e82a906ef8e2a059124c9" + integrity sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q== + dependencies: + emoji-regex ">=6.0.0 <=6.1.1" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + +glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" + integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== + dependencies: + ini "1.3.7" + +global-modules@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globby@8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" + integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w== + dependencies: + array-union "^1.0.1" + dir-glob "2.0.0" + fast-glob "^2.0.2" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globby@^10.0.1: + version "10.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +globby@^11.0.1: + version "11.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" + integrity sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +good-listener@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" + integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= + dependencies: + delegate "^3.1.2" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +gray-matter@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.2.tgz#9aa379e3acaf421193fce7d2a28cebd4518ac454" + integrity sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw== + dependencies: + js-yaml "^3.11.0" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + +gzip-size@5.1.1, gzip-size@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + dependencies: + duplexer "^0.1.1" + pify "^4.0.1" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +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-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + +has@^1.0.0, 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" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hast-to-hyperscript@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d" + integrity sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA== + dependencies: + "@types/unist" "^2.0.3" + comma-separated-tokens "^1.0.0" + property-information "^5.3.0" + space-separated-tokens "^1.0.0" + style-to-object "^0.3.0" + unist-util-is "^4.0.0" + web-namespaces "^1.0.0" + +hast-util-from-parse5@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz#3089dc0ee2ccf6ec8bc416919b51a54a589e097c" + integrity sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA== + dependencies: + ccount "^1.0.3" + hastscript "^5.0.0" + property-information "^5.0.0" + web-namespaces "^1.1.2" + xtend "^4.0.1" + +hast-util-from-parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a" + integrity sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA== + dependencies: + "@types/parse5" "^5.0.0" + hastscript "^6.0.0" + property-information "^5.0.0" + vfile "^4.0.0" + vfile-location "^3.2.0" + web-namespaces "^1.0.0" + +hast-util-parse-selector@^2.0.0: + version "2.2.5" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" + integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== + +hast-util-raw@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.0.1.tgz#973b15930b7529a7b66984c98148b46526885977" + integrity sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig== + dependencies: + "@types/hast" "^2.0.0" + hast-util-from-parse5 "^6.0.0" + hast-util-to-parse5 "^6.0.0" + html-void-elements "^1.0.0" + parse5 "^6.0.0" + unist-util-position "^3.0.0" + vfile "^4.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hast-util-to-parse5@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479" + integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ== + dependencies: + hast-to-hyperscript "^9.0.0" + property-information "^5.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hastscript@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a" + integrity sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ== + dependencies: + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + +hastscript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" + integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +history@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoist-non-react-statics@^3.1.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hoopy@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" + integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + +html-entities@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== + +html-minifier-terser@^5.0.1, html-minifier-terser@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" + integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== + dependencies: + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" + he "^1.2.0" + param-case "^3.0.3" + relateurl "^0.2.7" + terser "^4.6.3" + +html-tags@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" + integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== + +html-void-elements@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" + integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== + +html-webpack-plugin@^4.5.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.1.tgz#40aaf1b5cb78f2f23a83333999625c20929cda65" + integrity sha512-yzK7RQZwv9xB+pcdHNTjcqbaaDZ+5L0zJHXfi89iWIZmb/FtzxhLk0635rmJihcQbs3ZUF27Xp4oWGx6EK56zg== + dependencies: + "@types/html-minifier-terser" "^5.0.0" + "@types/tapable" "^1.0.5" + "@types/webpack" "^4.41.8" + html-minifier-terser "^5.0.1" + loader-utils "^1.2.3" + lodash "^4.17.20" + pretty-error "^2.1.1" + tapable "^1.1.3" + util.promisify "1.0.0" + +htmlparser2@^3.10.1, htmlparser2@^3.9.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +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== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-parser-js@>=0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" + integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +iconv-lite@0.4.24, 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" + +iconv-lite@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + +ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore@^3.3.5: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + +ignore@^5.1.1, ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +immer@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d" + integrity sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg== + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.2.1, import-fresh@^3.2.2: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +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== + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +infima@0.2.0-alpha.18: + version "0.2.0-alpha.18" + resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.18.tgz#8ac62711f13ef99b1f4a45b3ac14571722a2ccf6" + integrity sha512-ndSEffXzjgM/eiSm5jpLTX6ON9MmylzxqBnV2bTiC3kCSyDYdvzTs+bSwf+C4TWayuqnRTnBK1JUePo3m6Bnfg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, 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== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" + integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== + +ini@^1.3.5, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inline-style-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" + integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== + +inquirer@7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.4.tgz#99af5bde47153abca23f5c7fc30db247f39da703" + integrity sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ== + dependencies: + ansi-escapes "^4.2.1" + chalk "^2.4.2" + cli-cursor "^3.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" + run-async "^2.2.0" + rxjs "^6.5.3" + string-width "^4.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +inquirer@^7.2.0: + version "7.3.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-alphabetical@1.0.4, is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +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-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.4, is-callable@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-core-module@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-docker@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" + integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +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-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-installed-globally@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" + integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== + dependencies: + global-dirs "^2.0.1" + is-path-inside "^3.0.1" + +is-negative-zero@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-npm@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" + integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +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-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.0.0, is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-path-inside@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" + integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== + +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 sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.4, is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-root@2.1.0, is-root@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-stream@^1.0.1, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-whitespace-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" + integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-word-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" + integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is-wsl@^2.1.1: + 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" + +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.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 sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +jest-worker@^26.5.0: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +joi@^17.2.1, joi@^17.3.0: + version "17.3.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.3.0.tgz#f1be4a6ce29bc1716665819ac361dfa139fff5d2" + integrity sha512-Qh5gdU6niuYbUIUV5ejbsMiiFmBdw8Kcp8Buj2JntszCkCfxJ9Cz76OtHxOZMPXrt5810iDIXs+n1nNVoquHgg== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.0" + "@sideway/formula" "^3.0.0" + "@sideway/pinpoint" "^2.0.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +js-yaml@^3.11.0, js-yaml@^3.13.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" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json3@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +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" + +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +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" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +last-call-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" + integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w== + dependencies: + lodash "^4.17.5" + webpack-sources "^1.1.0" + +latest-version@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + +lodash.assignin@^4.0.9: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" + integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI= + +lodash.bind@^4.1.4: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" + integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU= + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + +lodash.chunk@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz#66e5ce1f76ed27b4303d8c6512e8d1216e8106bc" + integrity sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw= + +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA= + +lodash.defaults@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + +lodash.filter@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" + integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4= + +lodash.flatmap@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz#ef8cbf408f6e48268663345305c6acc0b778702e" + integrity sha1-74y/QI9uSCaGYzRTBcaswLd4cC4= + +lodash.flatten@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + +lodash.flow@^3.3.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" + integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o= + +lodash.foreach@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= + +lodash.groupby@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.groupby/-/lodash.groupby-4.6.0.tgz#0b08a1dcf68397c397855c3239783832df7403d1" + integrity sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E= + +lodash.has@^4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862" + integrity sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + +lodash.kebabcase@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= + +lodash.map@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.merge@^4.4.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.padstart@^4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" + integrity sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs= + +lodash.pick@^4.2.1, lodash.pick@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= + +lodash.pickby@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff" + integrity sha1-feoh2MGNdwOifHBMFdO4SmfjOv8= + +lodash.reduce@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" + integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs= + +lodash.reject@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" + integrity sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU= + +lodash.some@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= + +lodash.sortby@^4.6.0, lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash.template@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + +lodash.toarray@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" + integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= + +lodash.uniq@4.5.0, lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.5: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +loglevel@^1.6.8: + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +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@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +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" + +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0, make-dir@^3.0.2, 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" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +markdown-escapes@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" + integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mdast-squeeze-paragraphs@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97" + integrity sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ== + dependencies: + unist-util-remove "^2.0.0" + +mdast-util-definitions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" + integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== + dependencies: + unist-util-visit "^2.0.0" + +mdast-util-to-hast@10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz#0cfc82089494c52d46eb0e3edb7a4eb2aea021eb" + integrity sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + mdast-util-definitions "^4.0.0" + mdurl "^1.0.0" + unist-builder "^2.0.0" + unist-util-generated "^1.0.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +mdast-util-to-string@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527" + integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A== + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +mdurl@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.2.3, merge2@^1.3.0: + 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 sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +microevent.ts@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" + integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.45.0, "mime-db@>= 1.43.0 < 2": + version "1.45.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" + integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== + +mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== + +mime-types@2.1.18: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== + dependencies: + mime-db "~1.33.0" + +mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24: + version "2.1.28" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" + integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== + dependencies: + mime-db "1.45.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4: + version "2.4.7" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.7.tgz#962aed9be0ed19c91fd7dc2ece5d7f4e89a90d74" + integrity sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA== + +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, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mini-create-react-context@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e" + integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ== + dependencies: + "@babel/runtime" "^7.12.1" + tiny-warning "^1.0.3" + +mini-css-extract-plugin@^0.8.0: + version "0.8.2" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz#a875e169beb27c88af77dd962771c9eedc3da161" + integrity sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw== + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + 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" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +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== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +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== + +nan@^2.12.1: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +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== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-emoji@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" + integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== + dependencies: + lodash.toarray "^4.4.0" + +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-releases@^1.1.52, node-releases@^1.1.69: + version "1.1.69" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.69.tgz#3149dbde53b781610cd8b486d62d86e26c3725f6" + integrity sha512-DGIjo79VDEyAnRlfSqYTsy+yoHd2IOjJiKUozD2MV2D85Vso6Bug56mb9tT/fY5Urt0iqk01H7x+llAruDR2zA== + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +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-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +normalize-url@^4.1.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nprogress@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + integrity sha1-y480xTIT2JVyP8urkH6UIq28r7E= + +nth-check@^1.0.2, nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +null-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-3.0.0.tgz#3e2b6c663c5bda8c73a54357d8fa0708dc61b245" + integrity sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw== + dependencies: + loader-utils "^1.2.3" + schema-utils "^1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.8.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + +object-is@^1.0.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.4.tgz#63d6c83c00a43f4cbc9434eb9757c8a5b8565068" + integrity sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +object-keys@^1.0.12, 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-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0, object.assign@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz#0dfda8d108074d9c563e80490c883b6661091544" + integrity sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" + integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has "^1.0.3" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +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 sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + 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.0.2: + version "7.3.1" + resolved "https://registry.yarnpkg.com/open/-/open-7.3.1.tgz#111119cb919ca1acd988f49685c4fdd0f4755356" + integrity sha512-f2wt9DCBKKjlFbjzGb8MOAW8LH8F0mrs1zc7KTjAJ9PZNQbfenzWbNP1VZJvw6ICMG9r14Ah6yfwPn7T7i646A== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +opener@^1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optimize-css-assets-webpack-plugin@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz#85883c6528aaa02e30bbad9908c92926bb52dc90" + integrity sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A== + dependencies: + cssnano "^4.1.10" + last-call-webpack-plugin "^3.0.0" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + +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-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" + integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-numeric-range@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.2.0.tgz#aa70b00f29624ed13e9f943e9461b306e386b0fa" + integrity sha512-1q2tXpAOplPxcl8vrIGPWz1dJxxfmdRkCFcpxxMBerDnGuuHalOWF/xj9L8Nn5XoTUoB/6F0CeQBp2fMgkOYFg== + +parse5@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +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 sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@1.0.2, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-to-regexp@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" + integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== + +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +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== + +pbkdf2@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + 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 sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@3.1.0, pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +pnp-webpack-plugin@^1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" + integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== + dependencies: + ts-pnp "^1.1.6" + +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-attribute-case-insensitive@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880" + integrity sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^6.0.2" + +postcss-calc@^7.0.1: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" + integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-color-functional-notation@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" + integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-gray@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" + integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-color-hex-alpha@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388" + integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw== + dependencies: + postcss "^7.0.14" + postcss-values-parser "^2.0.1" + +postcss-color-mod-function@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" + integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-rebeccapurple@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" + integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-combine-duplicated-selectors@^9.1.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/postcss-combine-duplicated-selectors/-/postcss-combine-duplicated-selectors-9.4.0.tgz#dae866debae5f93b58e13e6cc69419105e91336a" + integrity sha512-rMnO1H3wgR1T6QSlK3i8Slz9p3xD+0yOi4J7qwh/5PGR3z8jbgYvRlNKAIvXDtGBQbJKoWs4df5skL3a/fdUEA== + dependencies: + postcss "^7.0.0" + postcss-selector-parser "^6.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-custom-media@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" + integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg== + dependencies: + postcss "^7.0.14" + +postcss-custom-properties@^8.0.11: + version "8.0.11" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97" + integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA== + dependencies: + postcss "^7.0.17" + postcss-values-parser "^2.0.1" + +postcss-custom-selectors@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" + integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-dir-pseudo-class@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" + integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-discard-unused@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-4.0.1.tgz#ee7cc66af8c7e8c19bd36f12d09c4bde4039abea" + integrity sha512-/3vq4LU0bLH2Lj4NYN7BTf2caly0flUB7Xtrk9a5K3yLuXMkHMqMO/x3sDq8W2b1eQFSCyY0IVz2L+0HP8kUUA== + dependencies: + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-double-position-gradients@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" + integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA== + dependencies: + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-env-function@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" + integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-focus-visible@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" + integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g== + dependencies: + postcss "^7.0.2" + +postcss-focus-within@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" + integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w== + dependencies: + postcss "^7.0.2" + +postcss-font-variant@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz#42d4c0ab30894f60f98b17561eb5c0321f502641" + integrity sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA== + dependencies: + postcss "^7.0.2" + +postcss-gap-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" + integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg== + dependencies: + postcss "^7.0.2" + +postcss-image-set-function@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" + integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-initial@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.2.tgz#f018563694b3c16ae8eaabe3c585ac6319637b2d" + integrity sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA== + dependencies: + lodash.template "^4.5.0" + postcss "^7.0.2" + +postcss-lab-function@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" + integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-load-config@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" + integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-logical@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" + integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA== + dependencies: + postcss "^7.0.2" + +postcss-media-minmax@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" + integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw== + dependencies: + postcss "^7.0.2" + +postcss-merge-idents@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-4.0.1.tgz#b7df282a92f052ea0a66c62d8f8812e6d2cbed23" + integrity sha512-43S/VNdF6II0NZ31YxcvNYq4gfURlPAAsJW/z84avBXQCaP4I4qRHUH18slW/SOlJbcxxCobflPNUApYDddS7A== + dependencies: + cssnano-util-same-parent "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.32" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + +postcss-nesting@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" + integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== + dependencies: + postcss "^7.0.2" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-overflow-shorthand@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" + integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g== + dependencies: + postcss "^7.0.2" + +postcss-page-break@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" + integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ== + dependencies: + postcss "^7.0.2" + +postcss-place@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" + integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-preset-env@^6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5" + integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== + dependencies: + autoprefixer "^9.6.1" + browserslist "^4.6.4" + caniuse-lite "^1.0.30000981" + css-blank-pseudo "^0.1.4" + css-has-pseudo "^0.10.0" + css-prefers-color-scheme "^3.1.1" + cssdb "^4.4.0" + postcss "^7.0.17" + postcss-attribute-case-insensitive "^4.0.1" + postcss-color-functional-notation "^2.0.1" + postcss-color-gray "^5.0.0" + postcss-color-hex-alpha "^5.0.3" + postcss-color-mod-function "^3.0.3" + postcss-color-rebeccapurple "^4.0.1" + postcss-custom-media "^7.0.8" + postcss-custom-properties "^8.0.11" + postcss-custom-selectors "^5.1.2" + postcss-dir-pseudo-class "^5.0.0" + postcss-double-position-gradients "^1.0.0" + postcss-env-function "^2.0.2" + postcss-focus-visible "^4.0.0" + postcss-focus-within "^3.0.0" + postcss-font-variant "^4.0.0" + postcss-gap-properties "^2.0.0" + postcss-image-set-function "^3.0.1" + postcss-initial "^3.0.0" + postcss-lab-function "^2.0.1" + postcss-logical "^3.0.0" + postcss-media-minmax "^4.0.0" + postcss-nesting "^7.0.0" + postcss-overflow-shorthand "^2.0.0" + postcss-page-break "^2.0.0" + postcss-place "^4.0.1" + postcss-pseudo-class-any-link "^6.0.0" + postcss-replace-overflow-wrap "^3.0.0" + postcss-selector-matches "^4.0.0" + postcss-selector-not "^4.0.0" + +postcss-pseudo-class-any-link@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" + integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-reduce-idents@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-4.0.2.tgz#30447a6ec20941e78e21bd4482a11f569c4f455b" + integrity sha512-Tz70Ri10TclPoCtFfftjFVddx3fZGUkr0dEDbIEfbYhFUOFQZZ77TEqRrU0e6TvAvF+Wa5VVzYTpFpq0uwFFzw== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-replace-overflow-wrap@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" + integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw== + dependencies: + postcss "^7.0.2" + +postcss-selector-matches@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" + integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-not@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz#263016eef1cf219e0ade9a913780fc1f48204cbf" + integrity sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" + integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== + dependencies: + cssesc "^2.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" + integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + util-deprecate "^1.0.2" + +postcss-sort-media-queries@^1.7.26: + version "1.31.21" + resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-1.31.21.tgz#3225ec6eb490402602284ac99963b80461783cee" + integrity sha512-h+HbXXfOVFeLvCJOzl/Z9SqQ25MNpG/73k71756ftisaaJy75h06/Dn6KOwC4OCMN10ewT2PXMzHV03JNKwBbg== + dependencies: + postcss "^7.0.27" + sort-css-media-queries "1.5.0" + +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" + integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-zindex@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-4.0.1.tgz#8db6a4cec3111e5d3fd99ea70abeda61873d10c1" + integrity sha512-d/8BlQcUdEugZNRM9AdCA2V4fqREUtn/wcixLN3L6ITgc2P/FMcVVYz8QZkhItWT9NB5qr8wuN2dJCE4/+dlrA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" + integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +pretty-error@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" + integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== + dependencies: + lodash "^4.17.20" + renderkid "^2.0.4" + +pretty-time@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" + integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== + +prism-react-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.1.1.tgz#1c1be61b1eb9446a146ca7a50b7bcf36f2a70a44" + integrity sha512-MgMhSdHuHymNRqD6KM3eGS0PNqgK9q4QF5P0yoQQvpB6jNjeSAi3jcSAz0Sua/t9fa4xDOMar9HJbLa08gl9ug== + +prismjs@^1.22.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.23.0.tgz#d3b3967f7d72440690497652a9d40ff046067f33" + integrity sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA== + optionalDependencies: + clipboard "^2.0.0" + +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@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prop-types@^15.5.0, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +property-information@^5.0.0, property-information@^5.3.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" + integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== + dependencies: + xtend "^4.0.0" + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +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" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4, punycode@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +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== + +pupa@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + dependencies: + escape-goat "^2.0.0" + +pure-color@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" + integrity sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4= + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-base16-styling@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" + integrity sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw= + dependencies: + base16 "^1.0.0" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + +react-dev-utils@^10.2.1: + version "10.2.1" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-10.2.1.tgz#f6de325ae25fa4d546d09df4bb1befdc6dd19c19" + integrity sha512-XxTbgJnYZmxuPtY3y/UV0D8/65NKkmaia4rXzViknVnZeVlklSh8u6TnaEYPfAi/Gh1TP4mEOXHI6jQOPbeakQ== + dependencies: + "@babel/code-frame" "7.8.3" + address "1.1.2" + browserslist "4.10.0" + chalk "2.4.2" + cross-spawn "7.0.1" + detect-port-alt "1.1.6" + escape-string-regexp "2.0.0" + filesize "6.0.1" + find-up "4.1.0" + fork-ts-checker-webpack-plugin "3.1.1" + global-modules "2.0.0" + globby "8.0.2" + gzip-size "5.1.1" + immer "1.10.0" + inquirer "7.0.4" + is-root "2.1.0" + loader-utils "1.2.3" + open "^7.0.2" + pkg-up "3.1.0" + react-error-overlay "^6.0.7" + recursive-readdir "2.2.2" + shell-quote "1.7.2" + strip-ansi "6.0.0" + text-table "0.2.0" + +react-dom@^16.8.4: + version "16.14.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" + integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.19.1" + +react-error-overlay@^6.0.7: + version "6.0.8" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.8.tgz#474ed11d04fc6bda3af643447d85e9127ed6b5de" + integrity sha512-HvPuUQnLp5H7TouGq3kzBeioJmXms1wHy9EGjz2OURWBp4qZO6AfGEcnxts1D/CbwPLRAgTMPCEgYhA3sEM4vw== + +react-fast-compare@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" + integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== + +react-helmet@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-6.1.0.tgz#a750d5165cb13cf213e44747502652e794468726" + integrity sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw== + dependencies: + object-assign "^4.1.1" + prop-types "^15.7.2" + react-fast-compare "^3.1.1" + react-side-effect "^2.1.0" + +react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-json-view@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.19.1.tgz#95d8e59e024f08a25e5dc8f076ae304eed97cf5c" + integrity sha512-u5e0XDLIs9Rj43vWkKvwL8G3JzvXSl6etuS5G42a8klMohZuYFQzSN6ri+/GiBptDqlrXPTdExJVU7x9rrlXhg== + dependencies: + flux "^3.1.3" + react-base16-styling "^0.6.0" + react-lifecycles-compat "^3.0.4" + react-textarea-autosize "^6.1.0" + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-loadable-ssr-addon@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon/-/react-loadable-ssr-addon-0.3.0.tgz#ae9b2d3b11721930f8d8255476d288c0e9f9290f" + integrity sha512-E+lnmDakV0k6ut6R2J77vurwCOwTKEwKlHs9S62G8ez+ujecLPcqjt3YAU8M58kIGjp2QjFlZ7F9QWkq/mr6Iw== + dependencies: + "@babel/runtime" "^7.10.3" + +react-loadable@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/react-loadable/-/react-loadable-5.5.0.tgz#582251679d3da86c32aae2c8e689c59f1196d8c4" + integrity sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg== + dependencies: + prop-types "^15.5.0" + +react-router-config@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988" + integrity sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg== + dependencies: + "@babel/runtime" "^7.1.2" + +react-router-dom@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662" + integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + loose-envify "^1.3.1" + prop-types "^15.6.2" + react-router "5.2.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-router@5.2.0, react-router@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293" + integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + hoist-non-react-statics "^3.1.0" + loose-envify "^1.3.1" + mini-create-react-context "^0.4.0" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-side-effect@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.1.tgz#66c5701c3e7560ab4822a4ee2742dee215d72eb3" + integrity sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ== + +react-textarea-autosize@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-6.1.0.tgz#df91387f8a8f22020b77e3833c09829d706a09a5" + integrity sha512-F6bI1dgib6fSvG8so1HuArPUv+iVEfPliuLWusLF+gAKz0FbB4jLrWUrTAeq1afnPT2c9toEZYUdz/y1uKMy4A== + dependencies: + prop-types "^15.6.0" + +react-toggle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/react-toggle/-/react-toggle-4.1.1.tgz#2317f67bf918ea3508a96b09dd383efd9da572af" + integrity sha512-+wXlMcSpg8SmnIXauMaZiKpR+r2wp2gMUteroejp2UTSqGTVvZLN+m9EhMzFARBKEw7KpQOwzCyfzeHeAndQGw== + dependencies: + classnames "^2.2.5" + +react@^16.8.4: + version "16.14.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" + integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, 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.6, readable-stream@^3.1.1, 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" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +reading-time@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/reading-time/-/reading-time-1.2.1.tgz#c5533dca26fef91928a392e147ee51b64d163cba" + integrity sha512-a27kU9sCJzx4JklmKFMXgMoCWlhBi75DFTbU7+M3rjh5SXRWyacYt02il3muYaA+SUQ7tg5gMQn7GC8zOxTt/g== + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + +recursive-readdir@2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + dependencies: + minimatch "3.0.4" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +registry-auth-token@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" + integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== + dependencies: + rc "^1.2.8" + +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.6.4: + version "0.6.6" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.6.tgz#6d8c939d1a654f78859b08ddcc4aa777f3fa800a" + integrity sha512-jjyuCp+IEMIm3N1H1LLTJW1EISEJV9+5oHdEyrt43Pg9cDSb6rrLZei2cVWpl0xTjmmlpec/lEQGYgM7xfpGCQ== + dependencies: + jsesc "~0.5.0" + +rehype-parse@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-6.0.2.tgz#aeb3fdd68085f9f796f1d3137ae2b85a98406964" + integrity sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug== + dependencies: + hast-util-from-parse5 "^5.0.0" + parse5 "^5.0.0" + xtend "^4.0.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +remark-admonitions@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/remark-admonitions/-/remark-admonitions-1.2.1.tgz#87caa1a442aa7b4c0cafa04798ed58a342307870" + integrity sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow== + dependencies: + rehype-parse "^6.0.2" + unified "^8.4.2" + unist-util-visit "^2.0.1" + +remark-emoji@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-2.1.0.tgz#69165d1181b98a54ad5d9ef811003d53d7ebc7db" + integrity sha512-lDddGsxXURV01WS9WAiS9rO/cedO1pvr9tahtLhr6qCGFhHG4yZSJW3Ha4Nw9Uk1hLNmUBtPC0+m45Ms+xEitg== + dependencies: + emoticon "^3.2.0" + node-emoji "^1.10.0" + unist-util-visit "^2.0.2" + +remark-footnotes@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-2.0.0.tgz#9001c4c2ffebba55695d2dd80ffb8b82f7e6303f" + integrity sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ== + +remark-mdx@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.22.tgz#06a8dab07dcfdd57f3373af7f86bd0e992108bbd" + integrity sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ== + dependencies: + "@babel/core" "7.12.9" + "@babel/helper-plugin-utils" "7.10.4" + "@babel/plugin-proposal-object-rest-spread" "7.12.1" + "@babel/plugin-syntax-jsx" "7.12.1" + "@mdx-js/util" "1.6.22" + is-alphabetical "1.0.4" + remark-parse "8.0.3" + unified "9.2.0" + +remark-parse@8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1" + integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q== + dependencies: + ccount "^1.0.0" + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^2.0.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^2.0.0" + vfile-location "^3.0.0" + xtend "^4.0.1" + +remark-squeeze-paragraphs@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead" + integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw== + dependencies: + mdast-squeeze-paragraphs "^4.0.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.5.tgz#483b1ac59c6601ab30a7a596a5965cabccfdd0a5" + integrity sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ== + dependencies: + css-select "^2.0.2" + dom-converter "^0.2" + htmlparser2 "^3.10.1" + lodash "^4.17.20" + strip-ansi "^3.0.0" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.5.4, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +"require-like@>= 0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" + integrity sha1-rW8wwTvs15cBDEaK+ndcDAprR/o= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.1.6, resolve@^1.3.2: + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.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" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +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== + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rimraf@^2.5.4, rimraf@^2.6.3, rimraf@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +run-async@^2.2.0, 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@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" + integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rxjs@^6.5.3, rxjs@^6.6.0, rxjs@^6.6.3: + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== + dependencies: + tslib "^1.9.0" + +safe-buffer@5.1.2, 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-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, 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-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@^1.2.4, sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scheduler@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" + integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.0.0, schema-utils@^2.6.5, schema-utils@^2.7.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" + integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== + dependencies: + "@types/json-schema" "^7.0.6" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +select@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" + integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= + +selfsigned@^1.10.8: + version "1.10.8" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" + integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== + dependencies: + node-forge "^0.10.0" + +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.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, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +serve-handler@^6.1.3: + version "6.1.3" + resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.3.tgz#1bf8c5ae138712af55c758477533b9117f6435e8" + integrity sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w== + dependencies: + bytes "3.0.0" + content-disposition "0.5.2" + fast-url-parser "1.1.3" + mime-types "2.1.18" + minimatch "3.0.4" + path-is-inside "1.0.2" + path-to-regexp "2.2.1" + range-parser "1.2.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4, setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.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 sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +shelljs@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" + integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +sitemap@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-3.2.2.tgz#3f77c358fa97b555c879e457098e39910095c62b" + integrity sha512-TModL/WU4m2q/mQcrDgNANn0P4LwprM9MMvG4hu5zP4c6IIKs2YLTu6nXXnNr8ODW/WFtxKggiJ1EGn2W0GNmg== + dependencies: + lodash.chunk "^4.2.0" + lodash.padstart "^4.6.1" + whatwg-url "^7.0.0" + xmlbuilder "^13.0.0" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.0.tgz#2f8ff5d4b659e0d092f7aba0b7c386bd2aa20add" + integrity sha512-8Dt3BDi4FYNrCFGTL/HtwVzkARrENdwOUf1ZoW/9p3M8lZdFT35jVdrHza+qgxuG9H3/shR4cuX/X9umUrjP8Q== + dependencies: + debug "^3.2.6" + eventsource "^1.0.7" + faye-websocket "^0.11.3" + inherits "^2.0.4" + json3 "^3.3.3" + url-parse "^1.4.7" + +sockjs@^0.3.21: + version "0.3.21" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" + integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== + dependencies: + faye-websocket "^0.11.3" + uuid "^3.4.0" + websocket-driver "^0.7.4" + +sort-css-media-queries@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-1.5.0.tgz#8f605ad372caad0b81be010311882c046e738093" + integrity sha512-QofNE7CEVH1AKdhS7L9IPbV9UtyQYNXyw++8lC+xG6iOLlpzsmncZRiKbihTAESvZ8wOhwnPoesHbMrehrQyyw== + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@~0.5.12, source-map-support@~0.5.19: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3, source-map@~0.7.2: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +space-separated-tokens@^1.0.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^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 sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +ssri@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" + integrity sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA== + dependencies: + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +state-toggle@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" + integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +std-env@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-2.2.1.tgz#2ffa0fdc9e2263e0004c1211966e960948a40f6b" + integrity sha512-IjYQUinA3lg5re/YMlwlfhqNRTzMZMqE+pezevdcTaHceqx8ngEi1alX9nNCk9Sc81fy1fLDeQoaCzeiW1yBOQ== + dependencies: + ci-info "^1.6.0" + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.0.0, string-width@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.trimend@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" + integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" + integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +string_decoder@^1.0.0, 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" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@6.0.0, strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +style-to-object@0.3.0, style-to-object@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" + integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== + dependencies: + inline-style-parser "0.1.1" + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +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.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" + +svg-parser@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^1.0.0, svgo@^1.2.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tar@^6.0.2: + version "6.1.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" + integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== + 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" + +term-size@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" + integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== + +terser-webpack-plugin@^1.4.3: + version "1.4.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser-webpack-plugin@^4.1.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz#28daef4a83bd17c1db0297070adc07fc8cfc6a9a" + integrity sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ== + dependencies: + cacache "^15.0.5" + find-cache-dir "^3.3.1" + jest-worker "^26.5.0" + p-limit "^3.0.2" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + source-map "^0.6.1" + terser "^5.3.4" + webpack-sources "^1.4.3" + +terser@^4.1.2, terser@^4.6.3: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +terser@^5.3.4: + version "5.5.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.5.1.tgz#540caa25139d6f496fdea056e414284886fb2289" + integrity sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + +text-table@0.2.0, text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tiny-emitter@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" + integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== + +tiny-invariant@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" + integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== + +tiny-warning@^1.0.0, tiny-warning@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +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-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +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" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +trim-trailing-lines@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" + integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== + +tryer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" + integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== + +ts-pnp@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== + +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +ua-parser-js@^0.7.18: + version "0.7.23" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.23.tgz#704d67f951e13195fbcd3d78818577f5bc1d547b" + integrity sha512-m4hvMLxgGHXG3O3fQVAyyAQpZzDOvwnhOTjYz5Xmr7r/+LpkNy3vJXdVRWgd1TkAb7NGROZuSy96CrlNVjA7KA== + +unherit@^1.0.4: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" + integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== + dependencies: + inherits "^2.0.0" + xtend "^4.0.0" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +unified@9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" + integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +unified@^8.4.2: + version "8.4.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-8.4.2.tgz#13ad58b4a437faa2751a4a4c6a16f680c500fff1" + integrity sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +unist-builder@2.0.3, unist-builder@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" + integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== + +unist-util-generated@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" + integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== + +unist-util-is@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.0.4.tgz#3e9e8de6af2eb0039a59f50c9b3e99698a924f50" + integrity sha512-3dF39j/u423v4BBQrk1AQ2Ve1FxY5W3JKwXxVFzBODQ6WEvccguhgp802qQLKSnxPODE6WuRZtV+ohlUg4meBA== + +unist-util-position@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" + integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== + +unist-util-remove-position@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc" + integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA== + dependencies: + unist-util-visit "^2.0.0" + +unist-util-remove@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.0.1.tgz#fa13c424ff8e964f3aa20d1098b9a690c6bfaa39" + integrity sha512-YtuetK6o16CMfG+0u4nndsWpujgsHDHHLyE0yGpJLLn5xSjKeyGyzEBOI2XbmoUHCYabmNgX52uxlWoQhcvR7Q== + dependencies: + unist-util-is "^4.0.0" + +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== + dependencies: + "@types/unist" "^2.0.2" + +unist-util-visit-parents@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" + integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + +unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.1, unist-util-visit@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" + integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +update-notifier@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" + integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== + dependencies: + boxen "^4.2.0" + chalk "^3.0.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.3.1" + is-npm "^4.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.0.0" + pupa "^2.0.1" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + +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" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-loader@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" + integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== + dependencies: + loader-utils "^2.0.0" + mime-types "^2.1.27" + schema-utils "^3.0.0" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +url-parse@^1.4.3, url-parse@^1.4.7: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utility-types@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" + integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + +vfile-location@^3.0.0, vfile-location@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" + integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== + +vfile-message@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" + +vfile@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" + integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +wait-on@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-5.2.1.tgz#05b66fcb4d7f5da01537f03e7cf96e8836422996" + integrity sha512-H2F986kNWMU9hKlI9l/ppO6tN8ZSJd35yBljMLa1/vjzWP++Qh6aXyt77/u7ySJFZQqBtQxnvm/xgG48AObXcw== + dependencies: + axios "^0.21.1" + joi "^17.3.0" + lodash "^4.17.20" + minimist "^1.2.5" + rxjs "^6.6.3" + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +web-namespaces@^1.0.0, web-namespaces@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" + integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +webpack-bundle-analyzer@^3.6.1: + version "3.9.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz#f6f94db108fb574e415ad313de41a2707d33ef3c" + integrity sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + bfj "^6.1.1" + chalk "^2.4.1" + commander "^2.18.0" + ejs "^2.6.1" + express "^4.16.3" + filesize "^3.6.1" + gzip-size "^5.0.0" + lodash "^4.17.19" + mkdirp "^0.5.1" + opener "^1.5.1" + ws "^6.0.0" + +webpack-dev-middleware@^3.7.2: + version "3.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.11.0: + version "3.11.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz#695ebced76a4929f0d5de7fd73fafe185fe33708" + integrity sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.8" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "^0.3.21" + sockjs-client "^1.5.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-merge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== + dependencies: + lodash "^4.17.15" + +webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.44.1: + version "4.46.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" + integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.5.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + +webpackbar@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-4.0.0.tgz#ee7a87f16077505b5720551af413c8ecd5b1f780" + integrity sha512-k1qRoSL/3BVuINzngj09nIwreD8wxV4grcuhHTD8VJgUbGcy8lQSPqv+bM00B7F+PffwIsQ8ISd4mIwRbr23eQ== + dependencies: + ansi-escapes "^4.2.1" + chalk "^2.4.2" + consola "^2.10.0" + figures "^3.0.0" + pretty-time "^1.1.0" + std-env "^2.2.1" + text-table "^0.2.0" + wrap-ansi "^6.0.0" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-fetch@>=0.10.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.5.0.tgz#605a2cd0a7146e5db141e29d1c62ab84c0c4c868" + integrity sha512-jXkLtsR42xhXg7akoDKvKWE40eJeI+2KZqcp2h3NsOrRnDvtWX36KcKl30dy+hxECivdk2BVUHVNrPtoMBUx6A== + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9, which@^1.3.1: + 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.1: + 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" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +worker-rpc@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" + integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== + dependencies: + microevent.ts "~0.1.1" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + 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 sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^6.0.0, ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + +xml-js@^1.6.11: + version "1.6.11" + resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" + integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== + dependencies: + sax "^1.2.4" + +xmlbuilder@^13.0.0: + version "13.0.2" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-13.0.2.tgz#02ae33614b6a047d1c32b5389c1fdacb2bce47a7" + integrity sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ== + +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +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@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" + integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zwitch@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== From 2805c5fdb342da3e00077b0ce6f03c0175acf9d2 Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 15 Jan 2021 18:15:16 -0500 Subject: [PATCH 267/481] Fix linting runs twice on sst remove --- packages/cli/scripts/deploy.js | 11 +++++------ packages/cli/scripts/remove.js | 18 +++++++++++++----- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/packages/cli/scripts/deploy.js b/packages/cli/scripts/deploy.js index 50a4f1bbb0..80d4392ed0 100644 --- a/packages/cli/scripts/deploy.js +++ b/packages/cli/scripts/deploy.js @@ -10,8 +10,6 @@ const { synth, parallelDeploy } = require("./util/cdkHelpers"); module.exports = async function (argv, config, cliInfo) { logger.info(chalk.grey("Deploying " + (argv.stack ? argv.stack : "stacks"))); - const cdkOutputPath = path.join(paths.appPath, paths.appBuildDir, "cdk.out"); - // Build await synth(cliInfo.cdkOptions); @@ -23,10 +21,11 @@ module.exports = async function (argv, config, cliInfo) { const prevEventCount = stackStates ? getEventCount(stackStates) : 0; // Update deploy status - const response = await parallelDeploy( - { ...cliInfo.cdkOptions, stackName: argv.stack, cdkOutputPath }, - stackStates - ); + const response = await parallelDeploy({ + ...cliInfo.cdkOptions, + stackName: argv.stack, + cdkOutputPath: path.join(paths.appPath, paths.appBuildDir, "cdk.out"), + }, stackStates); stackStates = response.stackStates; isCompleted = response.isCompleted; diff --git a/packages/cli/scripts/remove.js b/packages/cli/scripts/remove.js index f307ec3968..27cb020876 100644 --- a/packages/cli/scripts/remove.js +++ b/packages/cli/scripts/remove.js @@ -2,10 +2,10 @@ const path = require("path"); const chalk = require("chalk"); -const { logger, parallelDestroy } = require("@serverless-stack/core"); +const { logger } = require("@serverless-stack/core"); const paths = require("./util/paths"); -const { destroy: cdkDestroy } = require("./util/cdkHelpers"); +const { synth, parallelDestroy, destroy: cdkDestroy } = require("./util/cdkHelpers"); module.exports = async function (argv, config, cliInfo) { const stackName = `${config.stage}-debug-stack`; @@ -13,6 +13,7 @@ module.exports = async function (argv, config, cliInfo) { //////////////////////// // Remove debug stack // //////////////////////// + logger.info(chalk.grey("Removing " + stackName + " stack")); const debugAppArgs = [stackName, config.stage, config.region]; // Note: When deploying the debug stack, the current working directory is user's app. @@ -30,15 +31,22 @@ module.exports = async function (argv, config, cliInfo) { //////////////// // Remove app // //////////////// + logger.info(chalk.grey("Removing " + (argv.stack ? argv.stack : "stacks"))); - // Wait for remove to complete + // Build + await synth(cliInfo.cdkOptions); + + // Loop until remove is complete let stackStates; let isCompleted; do { // Update remove status - const cdkOptions = { ...cliInfo.cdkOptions, stackName: argv.stack }; - const response = await parallelDestroy(cdkOptions, stackStates); + const response = await parallelDestroy({ + ...cliInfo.cdkOptions, + stackName: argv.stack, + cdkOutputPath: path.join(paths.appPath, paths.appBuildDir, "cdk.out"), + }, stackStates); stackStates = response.stackStates; isCompleted = response.isCompleted; From 490d45cf9d10dd963ab46d90520af776f3ea79a7 Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 15 Jan 2021 18:17:06 -0500 Subject: [PATCH 268/481] Fix debug stack not removed on sst remove --- packages/cli/scripts/remove.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/scripts/remove.js b/packages/cli/scripts/remove.js index 27cb020876..7d6b9b4a29 100644 --- a/packages/cli/scripts/remove.js +++ b/packages/cli/scripts/remove.js @@ -8,12 +8,12 @@ const paths = require("./util/paths"); const { synth, parallelDestroy, destroy: cdkDestroy } = require("./util/cdkHelpers"); module.exports = async function (argv, config, cliInfo) { - const stackName = `${config.stage}-debug-stack`; //////////////////////// // Remove debug stack // //////////////////////// + const stackName = `${config.stage}-${config.name}-debug-stack`; logger.info(chalk.grey("Removing " + stackName + " stack")); const debugAppArgs = [stackName, config.stage, config.region]; // Note: When deploying the debug stack, the current working directory is user's app. From 721533e38a6f15eca6d5a58f4c90c866c98e07e7 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 15 Jan 2021 22:38:14 -0500 Subject: [PATCH 269/481] Moving docs to docusaurus --- README.md | 386 ------------------- docs/babel.config.js | 3 - docs/docs/doc1.md | 203 ---------- docs/docs/doc2.md | 6 - docs/docs/doc3.md | 14 - docs/docs/mdx.md | 17 - docs/docusaurus.config.js | 117 ------ docs/sidebars.js | 6 - docs/static/img/logo.svg | 3 - packages/cli/README.md | 118 ------ packages/create-serverless-stack/README.md | 44 --- {docs => www}/.gitignore | 0 www/babel.config.js | 3 + www/config.js | 12 + www/docs/about.md | 43 +++ www/docs/background.md | 66 ++++ www/docs/deploying-your-app.md | 34 ++ www/docs/installation.md | 137 +++++++ www/docs/known-issues.md | 32 ++ www/docs/migrating-from-cdk.md | 62 +++ www/docs/packages/cli.md | 126 ++++++ www/docs/packages/create-serverless-stack.md | 50 +++ www/docs/packages/resources.md | 134 +++++++ www/docs/working-locally.md | 81 ++++ www/docusaurus.config.js | 129 +++++++ {docs => www}/package.json | 2 +- www/sidebars.js | 21 + {docs => www}/src/css/custom.css | 7 + {docs => www}/static/.nojekyll | 0 {docs => www}/static/img/favicon.ico | Bin www/static/img/logo.svg | 3 + {docs => www}/yarn.lock | 0 32 files changed, 941 insertions(+), 918 deletions(-) delete mode 100644 docs/babel.config.js delete mode 100644 docs/docs/doc1.md delete mode 100644 docs/docs/doc2.md delete mode 100644 docs/docs/doc3.md delete mode 100644 docs/docs/mdx.md delete mode 100644 docs/docusaurus.config.js delete mode 100644 docs/sidebars.js delete mode 100644 docs/static/img/logo.svg rename {docs => www}/.gitignore (100%) create mode 100644 www/babel.config.js create mode 100644 www/config.js create mode 100644 www/docs/about.md create mode 100644 www/docs/background.md create mode 100644 www/docs/deploying-your-app.md create mode 100644 www/docs/installation.md create mode 100644 www/docs/known-issues.md create mode 100644 www/docs/migrating-from-cdk.md create mode 100644 www/docs/packages/cli.md create mode 100644 www/docs/packages/create-serverless-stack.md create mode 100644 www/docs/packages/resources.md create mode 100644 www/docs/working-locally.md create mode 100644 www/docusaurus.config.js rename {docs => www}/package.json (99%) create mode 100644 www/sidebars.js rename {docs => www}/src/css/custom.css (93%) rename {docs => www}/static/.nojekyll (100%) rename {docs => www}/static/img/favicon.ico (100%) create mode 100644 www/static/img/logo.svg rename {docs => www}/yarn.lock (100%) diff --git a/README.md b/README.md index d248fbb64c..ceb048909a 100644 --- a/README.md +++ b/README.md @@ -54,398 +54,12 @@ $ npx sst start ## Background -### Local Lambda Development - -Developing Lambdas locally is painful, you either: - -1. Locally mock all the AWS services you are using -2. Or, constantly deploy your changes to test them - -Both these approaches don't work well in practice. Locally mocking all the AWS services can be hard to do and most setups are really flaky. While, constantly deploying your Lambda functions or infrastructure can be simply too slow. - -The `sst start` command starts up a local development environment that opens a WebSocket connection to your deployed app and proxies any Lambda requests to your local machine. This allows you to: - -- Work on your Lambda functions locally -- While, interacting with your entire deployed AWS infrastructure -- Supports all Lambda triggers, so there's no need to mock API Gateway, SQS, SNS, etc. -- Supports real Lambda environment variables and Lambda IAM permissions -- So if a Lambda fails on AWS due to lack of IAM permissions, it would fail locally as well -- And it's fast. There's nothing to deploy when you make a change! - -You can read more about the [**sst start** command here](https://github.com/serverless-stack/serverless-stack/tree/master/packages/cli#start) and [try out a demo here](https://github.com/serverless-stack/sst-start-demo). - -### Using Serverless Framework with CDK - -[Serverless Framework](https://github.com/serverless/serverless) is great but deploying any other AWS resources requires you to write CloudFormation templates in YAML. CloudFormation templates are incredibly verbose and even creating simple resources can take hundreds of lines of YAML. AWS CDK solves this by allowing you to generate CloudFormation templates using modern programming languages. Making it truly, _infrastructure as code_. - -However, to use AWS CDK alongside your Serverless Framework services, requires you to follow certain conventions. - -- **Deploying all the stacks to the same region and AWS account** - - Serverless Framework apps are deployed to multiple environments using the `--region` and `AWS_PROFILE=profile` options. CDK apps on the other hand, contain CloudFormation stacks that are deployed to multiple regions and AWS accounts simultaneously. - -- **Prefixing stage and resource names** - - Since the same app is deployed to multiple environments, Serverless Framework adopts the practice of prefixing the stack names with the stage name. On the other hand, to deploy a CDK app to multiple stages, you'd need to manually ensure that the stack names and resource names don't thrash. - -SST provides the above out-of-the-box. So you can deploy your Serverless services using: - -```bash -$ AWS_PROFILE=production serverless deploy --stage prod --region us-east-1 -``` - -And use CDK for the rest of your AWS infrastructure: - -```bash -$ AWS_PROFILE=production npx sst deploy --stage prod --region us-east-1 -``` - -You can [read more about this here](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html). - -### And more - -As a bonus, SST also supports deploying your CloudFormation stacks asynchronously. So you don't have to waste CI build minutes waiting for CloudFormation to complete. [Seed](https://seed.run) natively supports concurrent asynchronous deployments for your SST apps. Making it 5x faster than other CI services. And SST deployments on Seed are free! - -SST also comes with a few other niceties: - -- Zero-config support for ES and TypeScript using [esbuild](http://esbuild.github.io) -- Automatically lints your code using [ESLint](https://eslint.org/) -- Runs your unit tests using [Jest](https://jestjs.io/) - -Behind the scenes, SST uses [a lightweight fork of AWS CDK](https://github.com/serverless-stack/sst-cdk) to programmatically invoke the various CDK commands. - ## Usage -### Creating an app - -Create a new project using. - -```bash -$ npx create-serverless-stack@latest my-sst-app -``` - -Or alternatively, with a newer version of npm or Yarn. - -```bash -# With npm 6+ -$ npm init serverless-stack@latest my-sst-app -# Or with Yarn 0.25+ -$ yarn create serverless-stack my-sst-app -``` - -This by default creates a JavaScript/ES project. If you instead want to use **TypeScript**. - -```bash -$ npm init serverless-stack@latest my-sst-app --language typescript -``` - -By default your project is using npm as the package manager, if you'd like to use **Yarn**. - -```bash -$ npm init serverless-stack@latest my-sst-app --use-yarn -``` - -You can read more about the [**create-serverless-stack** CLI here](https://github.com/serverless-stack/serverless-stack/tree/master/packages/create-serverless-stack). - -### Working on your app - -Your app starts with a simple project structure. - -``` -my-sst-app -├── README.md -├── node_modules -├── .gitignore -├── package.json -├── sst.json -├── test -│ └── MyStack.test.js -├── lib -| ├── MyStack.js -| └── index.js -└── src - └── lambda.js -``` - -It includes a config file in `sst.json`. - -```json -{ - "name": "my-sst-app", - "stage": "dev", - "region": "us-east-1" -} -``` - -The **stage** and the **region** are defaults for your app and can be overridden using the `--stage` and `--region` options. The **name** is used while prefixing your stack and resource names. - -The `lib/index.js` file is the entry point for your app. It has a default export function to add your stacks. - -```jsx -import MyStack from "./MyStack"; - -export default function main(app) { - new MyStack(app, "my-stack"); - - // Add more stacks -} -``` - -Here you'll be able to access the stage, region, and name of your app using. - -```js -app.stage; // "dev" -app.region; // "us-east-1" -app.name; // "my-sst-app" -``` - -In the sample `lib/MyStack.js` you can add the resources to your stack. - -```jsx -import * as sst from "@serverless-stack/resources"; - -export default class MyStack extends sst.Stack { - constructor(scope, id, props) { - super(scope, id, props); - - // Define your stack - } -} -``` - -Note that the stacks in SST use `sst.Stack` as imported from `@serverless-stack/resources`. As opposed to `cdk.Stack`. This is what allows SST to make sure that your stack names are prefixed with the stage names and are deployed to the region and AWS account that's specified through the CLI. - -You can access the stage, region, and name of your app using. - -```js -this.node.root.stage; // "dev" -this.node.root.region; // "us-east-1" -this.node.root.name; // "my-sst-app" -``` - -And if you need to prefix certain resource names so that they don't thrash when deployed to multiple stages, you can do the following in your stacks. - -```js -this.node.root.logicalPrefixedName("MyResource"); // "dev-my-sst-app-MyResource" -``` - -The sample stack also comes with a Lambda function and API endpoint. The Lambda function is in the `src/` directory. - -```js -new sst.Function(this, "Lambda", { - entry: "src/lambda.js", -}); -``` - -Notice that we are using the `sst.Function` instead of the `cdk.lambda.NodejsFunction`. This allows SST to locally invoke a deployed Lambda function. - -You can read more about [**@serverless-stack/resources** here](https://github.com/serverless-stack/serverless-stack/tree/master/packages/resources). - -### Developing locally - -Let's start the local development environment. - -```bash -# With npm -$ npx sst start -# Or with Yarn -$ yarn sst start -``` - -The first time you run this, it'll deploy your app and a stack that sets up the debugger. This can take a couple of minutes. - -#### Making changes - -The sample stack will deploy a Lambda function with an API endpoint. You'll see something like this in the output. - -```bash -Outputs: - ApiEndpoint: https://s8gecmmzxf.execute-api.us-east-1.amazonaws.com -``` - -If you head over to the endpoint, it'll invoke the Lambda function in `src/lambda.js`. You can try changing this file and hitting the endpoint again. You should **see your changes reflected right away**! - -### Building your app - -Once you are ready to build your app and convert your CDK code to CloudFormation, run the following from your project root. - -```bash -# With npm -$ npx sst build -# Or with Yarn -$ yarn sst build -``` - -This will compile your ES (or TS) code to the `.build/` directory in your app. And the synthesized CloudFormation templates are outputted to `.build/cdk.out/`. Note that, you shouldn't commit the `.build/` directory to source control and it's ignored by default in your project's `.gitignore`. - -### Testing your app - -You can run your tests using. - -```bash -# With npm -$ npm test -# Or with Yarn -$ yarn test -``` - -Internally, SST uses [Jest](https://jestjs.io/). You'll just need to add your tests to the `test/` directory. - -### Deploying your app - -Once your app has been built and tested successfully. You are ready to deploy it to AWS. - -```bash -# With npm -$ npx sst deploy -# Or with Yarn -$ yarn sst deploy -``` - -This uses your **default AWS Profile**. And the **region** and **stage** specified in your `sst.json`. You can deploy using a specific AWS profile, stage, and region by running. - -```bash -$ AWS_PROFILE=my-profile npx sst deploy --stage prod --region eu-west-1 -``` - -### Removing an app - -Finally, you can remove all your stacks and their resources from AWS using. - -```bash -# With npm -$ npx sst remove -# Or with Yarn -$ yarn sst remove -``` - -Note that, this permanently removes your resources from AWS. It also removes the stack that's created as a part of the debugger. - -### Package scripts - -The above commands (`start`, `build`, `deploy`, and `remove`) are also available in your `package.json`. So you can run them using. - -```bash -# With npm -$ npm run -# Or with Yarn -$ yarn run -``` - -Just note that for `npm run`, you'll need to use an extra `--` for the options. For example: - -```bash -$ npm run build -- --stage alpha -``` - -### Linting, type checking - -Your code is automatically linted when building or deploying. If you'd like to customize the lint rules, add a `.eslintrc.json` in your project root. If you'd like to turn off linting, add `*` to an `.eslintignore` file in your project root. - -If you are using TypeScript, SST also runs a separate TypeScript process to type check your code. It uses the `tsconfig.json` in your project root for this. - -Note that, this applies to the Lambda functions in your app as well. - -## Example Project - -We use SST as a part of the [Serverless Stack guide](https://serverless-stack.com). We build a [simple notes app](http://demo2.serverless-stack.com/) in the guide and the backend for it is created using Serverless Framework and CDK with SST. You can check out the repo here — [serverless-stack-demo-api](https://github.com/AnomalyInnovations/serverless-stack-demo-api). - ## Migrating From CDK -It's fairly simple to move a CDK app to SST. There are a couple of small differences between the two: - -1. There is no `cdk.json` - - If you have a `context` block in your `cdk.json`, you can move it to a `cdk.context.json`. You can [read more about this here](https://docs.aws.amazon.com/cdk/latest/guide/context.html). You'll also need to add a `sst.json` config file, as talked about above. Here is a sample config for reference. - - ```json - { - "name": "my-sst-app", - "stage": "dev", - "region": "us-east-1" - } - ``` - -2. There is no `bin/*.js` - - Instead there is a `lib/index.js` that has a default export function where you can add your stacks. SST creates the App object for you. This is what allows SST to ensure that the stage, region, and AWS accounts are set uniformly across all the stacks. Here is a sample `lib/index.js` for reference. - - ```js - import MyStack from "./MyStack"; - - export default function main(app) { - new MyStack(app, "my-stack"); - - // Add more stacks - } - ``` - -3. Stacks extend `sst.Stack` - - Your stack classes extend `sst.Stack` instead of `cdk.Stack`. Here is what the JavaScript version looks like. - - ```js - import * as sst from "@serverless-stack/resources"; - - export default class MyStack extends sst.Stack { - constructor(scope, id, props) {} - } - ``` - - And in TypeScript. - - ```ts - import * as sst from "@serverless-stack/resources"; - - export class MyStack extends sst.Stack { - constructor(scope: sst.App, id: string, props?: sst.StackProps) {} - } - ``` - -4. Lambdas use `sst.Function` - - Use the `sst.Function` construct instead to the `cdk.lambda.NodejsFunction`. You can read more about this over on [`@serverless-stack/resources`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/resources) docs. - -5. Include the right packages - - You don't need the `aws-cdk` package in your `package.json`. Instead you'll need `@serverless-stack/cli` and `@serverless-stack/resources`. - ## Known Issues -### CDK Version Mismatch - -There is a known issue in AWS CDK when using mismatched versions of their NPM packages. This means that all your AWS CDK packages in your `package.json` should use the same exact version. And since SST uses a forked version of AWS CDK internally, this means that your app needs to use the same versions as well. - -To help with this, SST will show a message to let you know if you might potentially run into this issue. And help you fix it. - -```bash -Mismatched versions of AWS CDK packages. Serverless Stack currently supports 1.55.0. Fix using: - - npm install @aws-cdk/aws-cognito@1.55.0 --save-exact -``` - -We also created a convenience method to help install the CDK npm packages with the right version — [`sst add-cdk`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/cli#add-cdk-packages). - -So instead of: - -```bash -$ npm install @aws-cdk/aws-s3 @aws-cdk/aws-iam -``` - -You can do: - -```bash -$ npx sst add-cdk @aws-cdk/aws-s3 @aws-cdk/aws-iam -``` - -And it'll install those packages using the right CDK versions. - -You can learn more about these issues [here](https://github.com/aws/aws-cdk/issues/9578) and [here](https://github.com/aws/aws-cdk/issues/542). - -## Future Roadmap - -Check out [**the public SST roadmap here**][roadmap]. - ## Contributing Check out our [roadmap][roadmap] and [join our Slack][slack] to get started. diff --git a/docs/babel.config.js b/docs/babel.config.js deleted file mode 100644 index e00595dae7..0000000000 --- a/docs/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: [require.resolve('@docusaurus/core/lib/babel/preset')], -}; diff --git a/docs/docs/doc1.md b/docs/docs/doc1.md deleted file mode 100644 index 28286ecc72..0000000000 --- a/docs/docs/doc1.md +++ /dev/null @@ -1,203 +0,0 @@ ---- -id: doc1 -title: Style Guide -sidebar_label: Style Guide -slug: / ---- - -You can write content using [GitHub-flavored Markdown syntax](https://github.github.com/gfm/). - -## Markdown Syntax - -To serve as an example page when styling markdown based Docusaurus sites. - -## Headers - -# H1 - Create the best documentation - -## H2 - Create the best documentation - -### H3 - Create the best documentation - -#### H4 - Create the best documentation - -##### H5 - Create the best documentation - -###### H6 - Create the best documentation - ---- - -## Emphasis - -Emphasis, aka italics, with *asterisks* or _underscores_. - -Strong emphasis, aka bold, with **asterisks** or __underscores__. - -Combined emphasis with **asterisks and _underscores_**. - -Strikethrough uses two tildes. ~~Scratch this.~~ - ---- - -## Lists - -1. First ordered list item -1. Another item - - Unordered sub-list. -1. Actual numbers don't matter, just that it's a number - 1. Ordered sub-list -1. And another item. - -* Unordered list can use asterisks - -- Or minuses - -+ Or pluses - ---- - -## Links - -[I'm an inline-style link](https://www.google.com/) - -[I'm an inline-style link with title](https://www.google.com/ "Google's Homepage") - -[I'm a reference-style link][arbitrary case-insensitive reference text] - -[You can use numbers for reference-style link definitions][1] - -Or leave it empty and use the [link text itself]. - -URLs and URLs in angle brackets will automatically get turned into links. http://www.example.com/ or and sometimes example.com (but not on GitHub, for example). - -Some text to show that the reference links can follow later. - -[arbitrary case-insensitive reference text]: https://www.mozilla.org/ -[1]: http://slashdot.org/ -[link text itself]: http://www.reddit.com/ - ---- - -## Images - -Here's our logo (hover to see the title text): - -Inline-style: ![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png 'Logo Title Text 1') - -Reference-style: ![alt text][logo] - -[logo]: https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png 'Logo Title Text 2' - -Images from any folder can be used by providing path to file. Path should be relative to markdown file. - -![img](../static/img/logo.svg) - ---- - -## Code - -```javascript -var s = 'JavaScript syntax highlighting'; -alert(s); -``` - -```python -s = "Python syntax highlighting" -print(s) -``` - -``` -No language indicated, so no syntax highlighting. -But let's throw in a tag. -``` - -```js {2} -function highlightMe() { - console.log('This line can be highlighted!'); -} -``` - ---- - -## Tables - -Colons can be used to align columns. - -| Tables | Are | Cool | -| ------------- | :-----------: | -----: | -| col 3 is | right-aligned | \$1600 | -| col 2 is | centered | \$12 | -| zebra stripes | are neat | \$1 | - -There must be at least 3 dashes separating each header cell. The outer pipes (|) are optional, and you don't need to make the raw Markdown line up prettily. You can also use inline Markdown. - -| Markdown | Less | Pretty | -| -------- | --------- | ---------- | -| _Still_ | `renders` | **nicely** | -| 1 | 2 | 3 | - ---- - -## Blockquotes - -> Blockquotes are very handy in email to emulate reply text. This line is part of the same quote. - -Quote break. - -> This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can _put_ **Markdown** into a blockquote. - ---- - -## Inline HTML - -
-
Definition list
-
Is something people use sometimes.
- -
Markdown in HTML
-
Does *not* work **very** well. Use HTML tags.
-
- ---- - -## Line Breaks - -Here's a line for us to start with. - -This line is separated from the one above by two newlines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - ---- - -## Admonitions - -:::note - -This is a note - -::: - -:::tip - -This is a tip - -::: - -:::important - -This is important - -::: - -:::caution - -This is a caution - -::: - -:::warning - -This is a warning - -::: diff --git a/docs/docs/doc2.md b/docs/docs/doc2.md deleted file mode 100644 index 16cfce4082..0000000000 --- a/docs/docs/doc2.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -id: doc2 -title: Document Number 2 ---- - -This is a link to [another document.](doc3.md) This is a link to an [external page.](http://www.example.com/) diff --git a/docs/docs/doc3.md b/docs/docs/doc3.md deleted file mode 100644 index 2c40cc680f..0000000000 --- a/docs/docs/doc3.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -id: doc3 -title: This is Document Number 3 ---- - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ac euismod odio, eu consequat dui. Nullam molestie consectetur risus id imperdiet. Proin sodales ornare turpis, non mollis massa ultricies id. Nam at nibh scelerisque, feugiat ante non, dapibus tortor. Vivamus volutpat diam quis tellus elementum bibendum. Praesent semper gravida velit quis aliquam. Etiam in cursus neque. Nam lectus ligula, malesuada et mauris a, bibendum faucibus mi. Phasellus ut interdum felis. Phasellus in odio pulvinar, porttitor urna eget, fringilla lectus. Aliquam sollicitudin est eros. Mauris consectetur quam vitae mauris interdum hendrerit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. - -Duis et egestas libero, imperdiet faucibus ipsum. Sed posuere eget urna vel feugiat. Vivamus a arcu sagittis, fermentum urna dapibus, congue lectus. Fusce vulputate porttitor nisl, ac cursus elit volutpat vitae. Nullam vitae ipsum egestas, convallis quam non, porta nibh. Morbi gravida erat nec neque bibendum, eu pellentesque velit posuere. Fusce aliquam erat eu massa eleifend tristique. - -Sed consequat sollicitudin ipsum eget tempus. Integer a aliquet velit. In justo nibh, pellentesque non suscipit eget, gravida vel lacus. Donec odio ante, malesuada in massa quis, pharetra tristique ligula. Donec eros est, tristique eget finibus quis, semper non nisl. Vivamus et elit nec enim ornare placerat. Sed posuere odio a elit cursus sagittis. - -Phasellus feugiat purus eu tortor ultrices finibus. Ut libero nibh, lobortis et libero nec, dapibus posuere eros. Sed sagittis euismod justo at consectetur. Nulla finibus libero placerat, cursus sapien at, eleifend ligula. Vivamus elit nisl, hendrerit ac nibh eu, ultrices tempus dui. Nam tellus neque, commodo non rhoncus eu, gravida in risus. Nullam id iaculis tortor. - -Nullam at odio in sem varius tempor sit amet vel lorem. Etiam eu hendrerit nisl. Fusce nibh mauris, vulputate sit amet ex vitae, congue rhoncus nisl. Sed eget tellus purus. Nullam tempus commodo erat ut tristique. Cras accumsan massa sit amet justo consequat eleifend. Integer scelerisque vitae tellus id consectetur. diff --git a/docs/docs/mdx.md b/docs/docs/mdx.md deleted file mode 100644 index f0210fb70d..0000000000 --- a/docs/docs/mdx.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -id: mdx -title: Powered by MDX ---- - -You can write JSX and use React components within your Markdown thanks to [MDX](https://mdxjs.com/). - -export const Highlight = ({children, color}) => ( {children} ); - -Docusaurus green and Facebook blue are my favorite colors. - -I can write **Markdown** alongside my _JSX_! diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js deleted file mode 100644 index 312e25d087..0000000000 --- a/docs/docusaurus.config.js +++ /dev/null @@ -1,117 +0,0 @@ -module.exports = { - title: 'My Site', - tagline: 'The tagline of my site', - url: 'https://docs.serverless-stack.com', - baseUrl: '/', - onBrokenLinks: 'throw', - onBrokenMarkdownLinks: 'warn', - favicon: 'img/favicon.ico', - organizationName: 'serverless-stack', // Usually your GitHub org/user name. - projectName: 'serverless-stack', // Usually your repo name. - stylesheets: [ - "https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@400;700&family=Source+Code+Pro:wght@400;700&family=Source+Sans+Pro:wght@300;400;700&display=swap", - ], - themeConfig: { - navbar: { - title: 'SST', - logo: { - alt: 'SST Logo', - src: 'img/logo.svg', - }, - items: [ - /** - { - to: 'docs/', - activeBasePath: 'docs', - label: 'Docs', - position: 'left', - }, - {to: 'blog', label: 'Blog', position: 'left'}, - **/ - { - href: 'https://github.com/serverless-stack/serverless-stack', - label: 'GitHub', - position: 'right', - }, - ], - }, - footer: { - style: 'dark', - links: [ - { - title: 'Docs', - items: [ - { - label: 'Style Guide', - to: 'docs/', - }, - { - label: 'Second Doc', - to: 'docs/doc2/', - }, - ], - }, - { - title: 'Community', - items: [ - { - label: 'Stack Overflow', - href: 'https://stackoverflow.com/questions/tagged/sst', - }, - { - label: 'Newsletter', - href: 'https://emailoctopus.com/lists/1c11b9a8-1500-11e8-a3c9-06b79b628af2/forms/subscribe', - }, - { - label: 'Twitter', - href: 'https://twitter.com/ServerlessStack', - }, - { - label: 'Slack', - href: 'https://join.slack.com/t/serverless-stack/shared_invite/zt-kqna615x-AFoTXvrglivZqJZcnTzKZA', - }, - ], - }, - { - title: 'More', - items: [ - { - label: 'Brand Guide', - href: 'https://github.com/serverless-stack/identity', - }, - { - label: 'About Us', - href: 'https://anoma.ly/', - }, - { - label: 'GitHub', - href: 'https://github.com/serverless-stack/serverless-stack', - }, - { - label: 'Guide', - to: 'https://serverless-stack.com', - }, - ], - }, - ], - copyright: `Copyright © ${new Date().getFullYear()} Anomaly Innovations, Inc`, - }, - }, - presets: [ - [ - '@docusaurus/preset-classic', - { - docs: { - routeBasePath: '/', - sidebarPath: require.resolve('./sidebars.js'), - // Please change this to your repo. - editUrl: - 'https://github.com/serverless-stack/serverless-stack/edit/master/docs/', - }, - theme: { - customCss: require.resolve('./src/css/custom.css'), - }, - }, - ], - ], -}; diff --git a/docs/sidebars.js b/docs/sidebars.js deleted file mode 100644 index 8765a2edf3..0000000000 --- a/docs/sidebars.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - someSidebar: { - Docusaurus: ['doc1', 'doc2', 'doc3'], - Features: ['mdx'], - }, -}; diff --git a/docs/static/img/logo.svg b/docs/static/img/logo.svg deleted file mode 100644 index 8f19dff659..0000000000 --- a/docs/static/img/logo.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/packages/cli/README.md b/packages/cli/README.md index 4b757ce179..91aa27db24 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -1,121 +1,3 @@ # @serverless-stack/cli [![npm](https://img.shields.io/npm/v/@serverless-stack/cli.svg)](https://www.npmjs.com/package/@serverless-stack/cli) Part of the **[Serverless Stack Toolkit](https://github.com/serverless-stack/serverless-stack)**. The `sst` CLI allows you to build, deploy, test, and remove Serverless Stack apps. - -## Installation - -While it can be installed globally, it's recommended to install it locally in your project instead. - -```bash -# With npm -$ npm install @serverless-stack/cli --save-exact -# Or with Yarn -$ yarn add @serverless-stack/cli --exact -``` - -## Usage - -Once installed locally, you can run the commands using. - -```bash -# With npm -$ npx sst -# Or with Yarn -$ yarn sst -``` - -## Commands - -### `start` - -Starts up a local development environment for your Lambda functions. It allows you to make changes and test your functions without having to deploy them. Here is how it works: - -1. Before deploying your app, SST first deploys a stack with a Lambda powered WebSocket API. -2. While deploying your app, it replaces all the `sst.Function` constructs with a _stub_ Lambda function. -3. SST starts up a local client that connects to the WebSocket API. -4. When your Lambda functions are invoked, the stub Lambdas send the request to the WebSocket API. -5. This in turn sends the request to your local SST client. -6. The client then invokes the local version of your Lambda function and sends back the results to the WebSocket API. -7. The WebSocket API responds to the stub Lambda with the results and the original request continues. - -This means that for any new requests, the local version of your Lambdas will be invoked. Without having to deploy them. - -Note that all this is deployed to your AWS account. There are no 3rd party services involved and your data never leaves your account. And since the WebSocket API is completely serverless, it's basically free for most use cases. - -`sst start` also starts up a watcher to transpile (using [esbuild](https://esbuild.github.io)), lint (with [ESLint](http://eslint.org)), and type check (using [TypeScript](https://www.typescriptlang.org)) your Lambda functions. So you can use ES or TypeScript directly. - -### `build` - -Build your app and synthesize your stacks. - -Generates a `build/` directory with the compiled files and a `build/cdk.out/` directory with the synthesized CloudFormation stacks. - -### `deploy [stack]` - -Deploy all your stacks to AWS. Or optionally deploy a specific stack. - -### `remove [stack]` - -Remove all your stacks and all of their resources from AWS. Or optionally remove a specific stack. Also removes the debug stack that might've been deployed along with `sst start`. - -### `add-cdk [packages..]` - -Installs the given AWS CDK npm packages with the appropriate CDK version. This convenience method helps get around the [known CDK issue of version mismatches](https://github.com/serverless-stack/serverless-stack#cdk-version-mismatch). This command internally simply does and `npm install` or `yarn add`. - -So instead of installing the CDK npm packages directly: - -```bash -$ npm install @aws-cdk/aws-s3 @aws-cdk/aws-iam -``` - -Use the `add-cdk` command instead. - -```bash -$ npx sst add-cdk @aws-cdk/aws-s3 @aws-cdk/aws-iam -``` - -Which in turn does: - -```bash -$ npm install @aws-cdk/aws-s3@x.x.x @aws-cdk/aws-iam@x.x.x -``` - -Where `x.x.x` is the version of CDK that's being used internally. Note, that it'll use Yarn instead if it detects a `yarn.lock` file in your project. - -#### Options - -- `--dev` - - You can also pass in the `--dev` option if you need the packages to be installed as `devDependencies`. - -### `test` - -Runs your tests using Jest. Takes all the [Jest CLI options](https://jestjs.io/docs/en/cli). - -### `cdk` - -The sst CLI comes with [a forked version of AWS CDK](https://github.com/serverless-stack/aws-cdk) that it uses internally. This command gives direct access to it. To use this command you'll need to pass in the location of the CDK app. In our cases this is going to be generated in `build/run.js`. For example, to run the CDK `list` command you'll need to. - -```bash -$ npx sst cdk --app=build/run.js list -``` - -## Options - -### `--stage` - -The stage you want to deploy to. Defaults to the one specified in your `sst.json`. Or uses `dev`. - -### `--region` - -The region you want to deploy to. Defaults to the one specified in your `sst.json`. Or uses `us-east-1`. - -## AWS Profile - -Specify the AWS account you want to deploy to by using the `AWS_PROFILE` CLI environment variable. If not specified, uses the default AWS profile. [Read more about AWS profiles here](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html). For example: - -```bash -$ AWS_PROFILE=production npx sst deploy -``` - -Where `production` is a profile defined locally in your `~/.aws/credentials`. diff --git a/packages/create-serverless-stack/README.md b/packages/create-serverless-stack/README.md index 52747224d9..4c3f118041 100644 --- a/packages/create-serverless-stack/README.md +++ b/packages/create-serverless-stack/README.md @@ -1,47 +1,3 @@ # create-serverless-stack [![npm](https://img.shields.io/npm/v/create-serverless-stack)](https://www.npmjs.com/package/create-serverless-stack) Part of the **[Serverless Stack Toolkit](https://github.com/serverless-stack/serverless-stack)**. A simple CLI (`create-serverless-stack`) that helps you create your Serverless Stack projects. - -## Usage - -There's no need install this CLI. Just use it directly to create your projects. - -With npx. - -```bash -$ npx create-serverless-stack@latest my-sst-app -``` - -Or with npm 6+ - -```bash -$ npm init serverless-stack@latest my-sst-app -``` - -Or with Yarn 0.25+ - -```bash -$ yarn create serverless-stack my-sst-app -``` - -This will create an app in the `my-sst-app/` directory. - -## Options - -Pass in the following (optional) options. - -### `--language` - -The language of the project: `javascript` or `typescript`. Defaults to `javascript`. For example: - -```bash -$ npm init serverless-stack@latest my-sst-app --language typescript -``` - -### `--use-yarn` - -Use Yarn instead of npm as the packager. Defaults to npm. For example: - -```bash -$ yarn create serverless-stack my-sst-app --use-yarn -``` diff --git a/docs/.gitignore b/www/.gitignore similarity index 100% rename from docs/.gitignore rename to www/.gitignore diff --git a/www/babel.config.js b/www/babel.config.js new file mode 100644 index 0000000000..bfd75dbdfc --- /dev/null +++ b/www/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: [require.resolve("@docusaurus/core/lib/babel/preset")], +}; diff --git a/www/config.js b/www/config.js new file mode 100644 index 0000000000..f341acbc81 --- /dev/null +++ b/www/config.js @@ -0,0 +1,12 @@ +module.exports = { + twitter: "https://twitter.com/ServerlessStack", + forums: "https://discourse.serverless-stack.com/", + forkedCdk: "https://github.com/serverless-stack/aws-cdk", + github: "https://github.com/serverless-stack/serverless-stack", + newsletter: + "https://emailoctopus.com/lists/1c11b9a8-1500-11e8-a3c9-06b79b628af2/forms/subscribe", + slack: + "https://join.slack.com/t/serverless-stack/shared_invite/zt-kqna615x-AFoTXvrglivZqJZcnTzKZA", + roadmap: + "https://github.com/serverless-stack/serverless-stack/milestones?direction=asc&sort=due_date&state=open", +}; diff --git a/www/docs/about.md b/www/docs/about.md new file mode 100644 index 0000000000..a46c4bbcb9 --- /dev/null +++ b/www/docs/about.md @@ -0,0 +1,43 @@ +--- +id: about +title: Serverless Stack Toolkit +sidebar_label: About +slug: / +--- + +import config from "../config"; + +Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.com/cdk/) that: + +- Includes a complete [local development environment for Lambda](#local-lambda-development) + - Supports remotely invoking local functions + - Zero-config ES and TypeScript support using [esbuild](https://esbuild.github.io) +- Allows you to use [CDK with Serverless Framework](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html) + +

+sst start +

+ +## Quick start + +Create your first SST app. + +```bash +npx create-serverless-stack@latest my-sst-app +cd my-sst-app +npx sst start +``` + +## Example project + +We use SST as a part of the [Serverless Stack guide](https://serverless-stack.com). We build a [simple notes app](http://demo2.serverless-stack.com/) in the guide and the backend for it is created using Serverless Framework and CDK with SST. You can check out the repo here — [serverless-stack-demo-api](https://github.com/AnomalyInnovations/serverless-stack-demo-api). + +## Future roadmap + +Check out <>the public SST roadmap here. + +## Getting help + +- <>Slack +- <>GitHub +- <>Forums diff --git a/www/docs/background.md b/www/docs/background.md new file mode 100644 index 0000000000..91f6fc3bd5 --- /dev/null +++ b/www/docs/background.md @@ -0,0 +1,66 @@ +--- +id: background +title: Background +--- + +import config from "../config"; + +## Local Lambda development + +Developing Lambdas locally is painful, you either: + +1. Locally mock all the AWS services you are using +2. Or, constantly deploy your changes to test them + +Both these approaches don't work well in practice. Locally mocking all the AWS services can be hard to do and most setups are really flaky. While, constantly deploying your Lambda functions or infrastructure can be simply too slow. + +The `sst start` command starts up a local development environment that opens a WebSocket connection to your deployed app and proxies any Lambda requests to your local machine. This allows you to: + +- Work on your Lambda functions locally +- While, interacting with your entire deployed AWS infrastructure +- Supports all Lambda triggers, so there's no need to mock API Gateway, SQS, SNS, etc. +- Supports real Lambda environment variables and Lambda IAM permissions +- So if a Lambda fails on AWS due to lack of IAM permissions, it would fail locally as well +- And it's fast. There's nothing to deploy when you make a change! + +You can read more about the [**sst start** command here](packages/cli.md#start) and [try out a demo here](https://github.com/serverless-stack/sst-start-demo). + +## Using Serverless Framework with CDK + +[Serverless Framework](https://github.com/serverless/serverless) is great but deploying any other AWS resources requires you to write CloudFormation templates in YAML. CloudFormation templates are incredibly verbose and even creating simple resources can take hundreds of lines of YAML. AWS CDK solves this by allowing you to generate CloudFormation templates using modern programming languages. Making it truly, _infrastructure as code_. + +However, to use AWS CDK alongside your Serverless Framework services, requires you to follow certain conventions. + +- **Deploying all the stacks to the same region and AWS account** + + Serverless Framework apps are deployed to multiple environments using the `--region` and `AWS_PROFILE=profile` options. CDK apps on the other hand, contain CloudFormation stacks that are deployed to multiple regions and AWS accounts simultaneously. + +- **Prefixing stage and resource names** + + Since the same app is deployed to multiple environments, Serverless Framework adopts the practice of prefixing the stack names with the stage name. On the other hand, to deploy a CDK app to multiple stages, you'd need to manually ensure that the stack names and resource names don't thrash. + +SST provides the above out-of-the-box. So you can deploy your Serverless services using: + +```bash +AWS_PROFILE=production serverless deploy --stage prod --region us-east-1 +``` + +And use CDK for the rest of your AWS infrastructure: + +```bash +AWS_PROFILE=production npx sst deploy --stage prod --region us-east-1 +``` + +You can [read more about this here](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html). + +## And more + +As a bonus, SST also supports deploying your CloudFormation stacks asynchronously. So you don't have to waste CI build minutes waiting for CloudFormation to complete. [Seed](https://seed.run) natively supports concurrent asynchronous deployments for your SST apps. Making it 5x faster than other CI services. And SST deployments on Seed are free! + +SST also comes with a few other niceties: + +- Zero-config support for ES and TypeScript using [esbuild](http://esbuild.github.io) +- Automatically lints your code using [ESLint](https://eslint.org/) +- Runs your unit tests using [Jest](https://jestjs.io/) + +Behind the scenes, SST uses <>a lightweight fork of AWS CDK to programmatically invoke the various CDK commands. diff --git a/www/docs/deploying-your-app.md b/www/docs/deploying-your-app.md new file mode 100644 index 0000000000..5e80087b24 --- /dev/null +++ b/www/docs/deploying-your-app.md @@ -0,0 +1,34 @@ +--- +id: deploying-your-app +title: Deploying Your App +--- + +Once your app has been built and tested successfully. You are ready to deploy it to AWS. + +## Deploying to AWS + +```bash +# With npm +npx sst deploy +# Or with Yarn +yarn sst deploy +``` + +This uses your **default AWS Profile**. And the **region** and **stage** specified in your `sst.json`. You can deploy using a specific AWS profile, stage, and region by running. + +```bash +AWS_PROFILE=my-profile npx sst deploy --stage prod --region eu-west-1 +``` + +## Removing an app + +Finally, you can remove all your stacks and their resources from AWS using. + +```bash +# With npm +npx sst remove +# Or with Yarn +yarn sst remove +``` + +Note that, this permanently removes your resources from AWS. It also removes the stack that's created as a part of the debugger. diff --git a/www/docs/installation.md b/www/docs/installation.md new file mode 100644 index 0000000000..c0564a1e13 --- /dev/null +++ b/www/docs/installation.md @@ -0,0 +1,137 @@ +--- +id: installation +title: Installation +--- + +import config from "../config"; + +SST is a collection of <>npm packages. + +## Requirements + +[Node.js](https://nodejs.org/en/download/) version >= `10.15.1` or above (which can be checked by running `node -v`). You can use [nvm](https://github.com/nvm-sh/nvm) for managing multiple Node versions on a single machine installed + +## Getting Started + +Create a new project using. + +```bash +npx create-serverless-stack@latest my-sst-app +``` + +Or alternatively, with a newer version of npm or Yarn. + +```bash +# With npm 6+ +npm init serverless-stack@latest my-sst-app +# Or with Yarn 0.25+ +yarn create serverless-stack my-sst-app +``` + +This by default creates a JavaScript/ES project. If you instead want to use **TypeScript**. + +```bash +npm init serverless-stack@latest my-sst-app --language typescript +``` + +By default your project is using npm as the package manager, if you'd like to use **Yarn**. + +```bash +npm init serverless-stack@latest my-sst-app --use-yarn +``` + +You can read more about the [**create-serverless-stack** CLI here](packages/create-serverless-stack.md). + +## App Structure + +Your app starts with a simple project structure. + +``` +my-sst-app +├── README.md +├── node_modules +├── .gitignore +├── package.json +├── sst.json +├── test +│ └── MyStack.test.js +├── lib +| ├── MyStack.js +| └── index.js +└── src + └── lambda.js +``` + +It includes a config file in `sst.json`. + +```json +{ + "name": "my-sst-app", + "stage": "dev", + "region": "us-east-1" +} +``` + +The **stage** and the **region** are defaults for your app and can be overridden using the `--stage` and `--region` options. The **name** is used while prefixing your stack and resource names. + +The `lib/index.js` file is the entry point for your app. It has a default export function to add your stacks. + +```jsx +import MyStack from "./MyStack"; + +export default function main(app) { + new MyStack(app, "my-stack"); + + // Add more stacks +} +``` + +Here you'll be able to access the stage, region, and name of your app using. + +```js +app.stage; // "dev" +app.region; // "us-east-1" +app.name; // "my-sst-app" +``` + +In the sample `lib/MyStack.js` you can add the resources to your stack. + +```jsx +import * as sst from "@serverless-stack/resources"; + +export default class MyStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + // Define your stack + } +} +``` + +Note that the stacks in SST use `sst.Stack` as imported from `@serverless-stack/resources`. As opposed to `cdk.Stack`. This is what allows SST to make sure that your stack names are prefixed with the stage names and are deployed to the region and AWS account that's specified through the CLI. + +You can access the stage, region, and name of your app using. + +```js +this.node.root.stage; // "dev" +this.node.root.region; // "us-east-1" +this.node.root.name; // "my-sst-app" +``` + +And if you need to prefix certain resource names so that they don't thrash when deployed to multiple stages, you can do the following in your stacks. + +```js +this.node.root.logicalPrefixedName("MyResource"); // "dev-my-sst-app-MyResource" +``` + +The sample stack also comes with a Lambda function and API endpoint. The Lambda function is in the `src/` directory. + +```js +new sst.Function(this, "Lambda", { + entry: "src/lambda.js", +}); +``` + +Notice that we are using the `sst.Function` instead of the `cdk.lambda.NodejsFunction`. This allows SST to locally invoke a deployed Lambda function. + +You can read more about [**@serverless-stack/resources** here](packages/resources.md). diff --git a/www/docs/known-issues.md b/www/docs/known-issues.md new file mode 100644 index 0000000000..99b7d26865 --- /dev/null +++ b/www/docs/known-issues.md @@ -0,0 +1,32 @@ +--- +id: known-issues +title: Known Issues +--- + +There is a known issue in AWS CDK when using mismatched versions of their NPM packages. This means that all your AWS CDK packages in your `package.json` should use the same exact version. And since SST uses a forked version of AWS CDK internally, this means that your app needs to use the same versions as well. + +To help with this, SST will show a message to let you know if you might potentially run into this issue. And help you fix it. + +```bash +Mismatched versions of AWS CDK packages. Serverless Stack currently supports 1.55.0. Fix using: + + npm install @aws-cdk/aws-cognito@1.55.0 --save-exact +``` + +We also created a convenience method to help install the CDK npm packages with the right version — [`sst add-cdk`](packages/cli.md#add-cdk-packages). + +So instead of: + +```bash +npm install @aws-cdk/aws-s3 @aws-cdk/aws-iam +``` + +You can do: + +```bash +npx sst add-cdk @aws-cdk/aws-s3 @aws-cdk/aws-iam +``` + +And it'll install those packages using the right CDK versions. + +You can learn more about these issues [here](https://github.com/aws/aws-cdk/issues/9578) and [here](https://github.com/aws/aws-cdk/issues/542). diff --git a/www/docs/migrating-from-cdk.md b/www/docs/migrating-from-cdk.md new file mode 100644 index 0000000000..12e48c383d --- /dev/null +++ b/www/docs/migrating-from-cdk.md @@ -0,0 +1,62 @@ +--- +id: migrating-from-cdk +title: Migrating From CDK +--- + +It's fairly simple to move a CDK app to SST. There are a couple of small differences between the two: + +1. There is no `cdk.json` + + If you have a `context` block in your `cdk.json`, you can move it to a `cdk.context.json`. You can [read more about this here](https://docs.aws.amazon.com/cdk/latest/guide/context.html). You'll also need to add a `sst.json` config file, as talked about above. Here is a sample config for reference. + + ```json + { + "name": "my-sst-app", + "stage": "dev", + "region": "us-east-1" + } + ``` + +2. There is no `bin/*.js` + + Instead there is a `lib/index.js` that has a default export function where you can add your stacks. SST creates the App object for you. This is what allows SST to ensure that the stage, region, and AWS accounts are set uniformly across all the stacks. Here is a sample `lib/index.js` for reference. + + ```js + import MyStack from "./MyStack"; + + export default function main(app) { + new MyStack(app, "my-stack"); + + // Add more stacks + } + ``` + +3. Stacks extend `sst.Stack` + + Your stack classes extend `sst.Stack` instead of `cdk.Stack`. Here is what the JavaScript version looks like. + + ```js + import * as sst from "@serverless-stack/resources"; + + export default class MyStack extends sst.Stack { + constructor(scope, id, props) {} + } + ``` + + And in TypeScript. + + ```ts + import * as sst from "@serverless-stack/resources"; + + export class MyStack extends sst.Stack { + constructor(scope: sst.App, id: string, props?: sst.StackProps) {} + } + ``` + +4. Lambdas use `sst.Function` + + Use the `sst.Function` construct instead to the `cdk.lambda.NodejsFunction`. You can read more about this over on [`@serverless-stack/resources`](packages/resources.md#sstfunction) docs. + +5. Include the right packages + + You don't need the `aws-cdk` package in your `package.json`. Instead you'll need `@serverless-stack/cli` and `@serverless-stack/resources`. diff --git a/www/docs/packages/cli.md b/www/docs/packages/cli.md new file mode 100644 index 0000000000..c3417b6fee --- /dev/null +++ b/www/docs/packages/cli.md @@ -0,0 +1,126 @@ +--- +id: cli +title: "@serverless-stack/cli" +--- + +import config from "../../config"; + +The SST CLI (`@serverless-stack/cli`) allows you to build, deploy, test, and remove Serverless Stack apps. + +## Installation + +While it can be installed globally, it's recommended to install it locally in your project instead. + +```bash +# With npm +npm install @serverless-stack/cli --save-exact +# Or with Yarn +yarn add @serverless-stack/cli --exact +``` + +## Usage + +Once installed locally, you can run the commands using. + +```bash +# With npm +npx sst +# Or with Yarn +yarn sst +``` + +## Commands + +### `start` + +Starts up a local development environment for your Lambda functions. It allows you to make changes and test your functions without having to deploy them. Here is how it works: + +1. Before deploying your app, SST first deploys a stack with a Lambda powered WebSocket API. +2. While deploying your app, it replaces all the `sst.Function` constructs with a _stub_ Lambda function. +3. SST starts up a local client that connects to the WebSocket API. +4. When your Lambda functions are invoked, the stub Lambdas send the request to the WebSocket API. +5. This in turn sends the request to your local SST client. +6. The client then invokes the local version of your Lambda function and sends back the results to the WebSocket API. +7. The WebSocket API responds to the stub Lambda with the results and the original request continues. + +This means that for any new requests, the local version of your Lambdas will be invoked. Without having to deploy them. + +Note that all this is deployed to your AWS account. There are no 3rd party services involved and your data never leaves your account. And since the WebSocket API is completely serverless, it's basically free for most use cases. + +`sst start` also starts up a watcher to transpile (using [esbuild](https://esbuild.github.io)), lint (with [ESLint](http://eslint.org)), and type check (using [TypeScript](https://www.typescriptlang.org)) your Lambda functions. So you can use ES or TypeScript directly. + +### `build` + +Build your app and synthesize your stacks. + +Generates a `build/` directory with the compiled files and a `build/cdk.out/` directory with the synthesized CloudFormation stacks. + +### `deploy [stack]` + +Deploy all your stacks to AWS. Or optionally deploy a specific stack. + +### `remove [stack]` + +Remove all your stacks and all of their resources from AWS. Or optionally remove a specific stack. Also removes the debug stack that might've been deployed along with `sst start`. + +### `add-cdk [packages..]` + +Installs the given AWS CDK npm packages with the appropriate CDK version. This convenience method helps get around the [known CDK issue of version mismatches](known-issues.md). This command internally simply does and `npm install` or `yarn add`. + +So instead of installing the CDK npm packages directly: + +```bash +npm install @aws-cdk/aws-s3 @aws-cdk/aws-iam +``` + +Use the `add-cdk` command instead. + +```bash +npx sst add-cdk @aws-cdk/aws-s3 @aws-cdk/aws-iam +``` + +Which in turn does: + +```bash +npm install @aws-cdk/aws-s3@x.x.x @aws-cdk/aws-iam@x.x.x +``` + +Where `x.x.x` is the version of CDK that's being used internally. Note, that it'll use Yarn instead if it detects a `yarn.lock` file in your project. + +#### Options + +- `--dev` + + You can also pass in the `--dev` option if you need the packages to be installed as `devDependencies`. + +### `test` + +Runs your tests using Jest. Takes all the [Jest CLI options](https://jestjs.io/docs/en/cli). + +### `cdk` + +The sst CLI comes with <>a forked version of AWS CDK that it uses internally. This command gives direct access to it. To use this command you'll need to pass in the location of the CDK app. In our cases this is going to be generated in `build/run.js`. For example, to run the CDK `list` command you'll need to. + +```bash +npx sst cdk --app=build/run.js list +``` + +## Options + +### `--stage` + +The stage you want to deploy to. Defaults to the one specified in your `sst.json`. Or uses `dev`. + +### `--region` + +The region you want to deploy to. Defaults to the one specified in your `sst.json`. Or uses `us-east-1`. + +## AWS Profile + +Specify the AWS account you want to deploy to by using the `AWS_PROFILE` CLI environment variable. If not specified, uses the default AWS profile. [Read more about AWS profiles here](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html). For example: + +```bash +AWS_PROFILE=production npx sst deploy +``` + +Where `production` is a profile defined locally in your `~/.aws/credentials`. diff --git a/www/docs/packages/create-serverless-stack.md b/www/docs/packages/create-serverless-stack.md new file mode 100644 index 0000000000..d4714e2a9d --- /dev/null +++ b/www/docs/packages/create-serverless-stack.md @@ -0,0 +1,50 @@ +--- +id: create-serverless-stack +title: create-serverless-stack +--- + +A simple CLI (`create-serverless-stack`) that helps you create your Serverless Stack projects. + +## Usage + +There's no need install this CLI. Just use it directly to create your projects. + +With npx. + +```bash +$ npx create-serverless-stack@latest my-sst-app +``` + +Or with npm 6+ + +```bash +$ npm init serverless-stack@latest my-sst-app +``` + +Or with Yarn 0.25+ + +```bash +$ yarn create serverless-stack my-sst-app +``` + +This will create an app in the `my-sst-app/` directory. + +## Options + +Pass in the following (optional) options. + +### `--language` + +The language of the project: `javascript` or `typescript`. Defaults to `javascript`. For example: + +```bash +$ npm init serverless-stack@latest my-sst-app --language typescript +``` + +### `--use-yarn` + +Use Yarn instead of npm as the packager. Defaults to npm. For example: + +```bash +$ yarn create serverless-stack my-sst-app --use-yarn +``` diff --git a/www/docs/packages/resources.md b/www/docs/packages/resources.md new file mode 100644 index 0000000000..cf1bdb4d87 --- /dev/null +++ b/www/docs/packages/resources.md @@ -0,0 +1,134 @@ +--- +id: resources +title: "@serverless-stack/resources" +--- + +The `@serverless-stack/resources` package provides a couple of simple AWS CDK Constructs: + +- `sst.App` (used internally) +- `sst.Stack` +- `sst.Function` + +## `sst.Stack` + +The `sst.Stack` and `sst.App` constructs allow you to: + +- Automatically prefix stack names with the stage +- Optionally prefix resource names with the stage +- Deploy the entire app using the same AWS profile and region + +### Creating a new stack + +Create a new stack by adding this in `lib/MyStack.js`. + +```jsx +import * as sst from "@serverless-stack/resources"; + +export default class MyStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + // Define your stack + } +} +``` + +Here `sst.Stack` is a simple extension of `cdk.Stack` that prefixes the stack name with the stage and enforces using the global region and AWS profile. + +### Adding to an app + +Add it to your app in `lib/index.js`. + +```jsx +import MyStack from "./MyStack"; + +export default function main(app) { + new MyStack(app, "my-stack"); + + // Add more stacks +} +``` + +Here `app` is an instance of `sst.App`. It's a simple extension of `cdk.App`. + +Note that, setting the env for an individual stack is not allowed. + +```jsx +new MyStack(app, "my-stack", { env: { account: "1234", region: "us-east-1" } }); +``` + +It will throw this error. + +``` +Error: Do not directly set the environment for a stack +``` + +This is by design. The stacks in SST are meant to be re-deployed for multiple stages (like Serverless Framework). And so they depend on the region and AWS profile that's passed in through the CLI. If a stack is hardcoded to be deployed to a specific account or region, it can break your deployment pipeline. + +### Accessing app info + +The stage, region, and app name can be accessed through the app object. + +So in the `lib/index.js` you can access it using. + +```js +app.stage; +app.region; +app.name; +``` + +And in your stack classes (for example, `lib/MyStack.js`) you can use. + +```js +this.node.root.stage; +this.node.root.region; +this.node.root.name; +``` + +You can use this to conditionally add stacks or resources to your app. + +### Prefixing resource names + +You can optionally prefix resource names to make sure they don't thrash when deployed to different stages in the same AWS account. + +You can do so in your stacks. + +```jsx +this.node.root.logicalPrefixedName("MyResource"); // Returns "dev-my-sst-app-MyResource" +``` + +This invokes the `logicalPrefixedName` method in `sst.App` that your stack is added to. This'll return `dev-my-sst-app-MyResource`, where `dev` is the current stage and `my-sst-app` is the name of the app. + +## `sst.Function` + +A replacement for the [`cdk.lambda.NodejsFunction`](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-nodejs-readme.html) that allows you to develop your Lambda functions locally while using [`sst start`](packages/cli.md#start). Supports ES and TypeScript out-of-the-box. + +Takes props (`sst.FunctionProps`) that extends [`cdk.lambda.FunctionOptions`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.FunctionOptions.html) and adds the following props to it: + +### `entry` + +Relative path to the entry point of the function. Either based of the project root or the `srcPath`. A `.js` or `.ts` file. + +### `handler` + +The exported function in the entry file. + +Defaults to `"handler"`. + +### `bundle` + +Bundles your Lambda functions with [esbuild](https://esbuild.github.io). Turn this off if you have NPM packages that cannot be bundled. + +Defaults to `true`. + +### `srcPath` + +The source directory where the entry point file is located. If the `bundle` option is turned off, SST zips up the entire `srcPath` directory and uses it as the Lambda function package. + +Defaults to `""`, the project root. + +### `runtime` + +The runtime environment. Only runtimes of the Node.js family are supported. + +Defaults to `lambda.NODEJS_12_X`. diff --git a/www/docs/working-locally.md b/www/docs/working-locally.md new file mode 100644 index 0000000000..8d356cd565 --- /dev/null +++ b/www/docs/working-locally.md @@ -0,0 +1,81 @@ +--- +id: working-locally +title: Working Locally +--- + +SST comes with a great local Lambda development environment that allows you to work and test your functions live. + +## Local environment + +Let's start the local development environment. + +```bash +# With npm +npx sst start +# Or with Yarn +yarn sst start +``` + +The first time you run this, it'll deploy your app and a stack that sets up the debugger. This can take a couple of minutes. + +## Making changes + +The sample stack will deploy a Lambda function with an API endpoint. You'll see something like this in the output. + +```bash +Outputs: + ApiEndpoint: https://s8gecmmzxf.execute-api.us-east-1.amazonaws.com +``` + +If you head over to the endpoint, it'll invoke the Lambda function in `src/lambda.js`. You can try changing this file and hitting the endpoint again. You should **see your changes reflected right away**! + +## Building your app + +Once you are ready to build your app and convert your CDK code to CloudFormation, run the following from your project root. + +```bash +# With npm +npx sst build +# Or with Yarn +yarn sst build +``` + +This will compile your ES (or TS) code to the `.build/` directory in your app. And the synthesized CloudFormation templates are outputted to `.build/cdk.out/`. Note that, you shouldn't commit the `.build/` directory to source control and it's ignored by default in your project's `.gitignore`. + +## Testing your app + +You can run your tests using. + +```bash +# With npm +npm test +# Or with Yarn +yarn test +``` + +Internally, SST uses [Jest](https://jestjs.io/). You'll just need to add your tests to the `test/` directory. + +## Package scripts + +The above commands (`start`, `build`, `deploy`, and `remove`) are also available in your `package.json`. So you can run them using. + +```bash +# With npm +npm run +# Or with Yarn +yarn run +``` + +Just note that for `npm run`, you'll need to use an extra `--` for the options. For example: + +```bash +npm run build -- --stage alpha +``` + +## Linting, type checking + +Your code is automatically linted when building or deploying. If you'd like to customize the lint rules, add a `.eslintrc.json` in your project root. If you'd like to turn off linting, add `*` to an `.eslintignore` file in your project root. + +If you are using TypeScript, SST also runs a separate TypeScript process to type check your code. It uses the `tsconfig.json` in your project root for this. + +Note that, this applies to the Lambda functions in your app as well. diff --git a/www/docusaurus.config.js b/www/docusaurus.config.js new file mode 100644 index 0000000000..82915210ba --- /dev/null +++ b/www/docusaurus.config.js @@ -0,0 +1,129 @@ +const config = require("./config"); + +module.exports = { + title: "My Site", + tagline: "The tagline of my site", + url: "https://docs.serverless-stack.com", + baseUrl: "/", + onBrokenLinks: "throw", + onBrokenMarkdownLinks: "warn", + favicon: "img/favicon.ico", + organizationName: "serverless-stack", // Usually your GitHub org/user name. + projectName: "serverless-stack", // Usually your repo name. + stylesheets: [ + "https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@400;700&family=Source+Code+Pro:wght@400;700&family=Source+Sans+Pro:wght@300;400;700&display=swap", + ], + themeConfig: { + sidebarCollapsible: false, + navbar: { + title: "", + logo: { + alt: "SST Logo", + src: "img/logo.svg", + }, + items: [ + { + href: config.slack, + label: "Slack", + position: "right", + }, + { + href: config.forums, + label: "Forums", + position: "right", + }, + { + href: "https://github.com/serverless-stack/serverless-stack", + label: "GitHub", + position: "right", + }, + ], + }, + footer: { + style: "dark", + links: [ + { + title: "Docs", + items: [ + { + label: "Installation", + to: "installation", + }, + { + label: "Working Locally", + to: "working-locally", + }, + { + label: "@serverless-stack/cli", + to: "packages/cli", + }, + { + label: "@serverless-stack/resources", + to: "packages/resources", + }, + ], + }, + { + title: "Community", + items: [ + { + label: "Slack", + href: config.slack, + }, + { + label: "Twitter", + href: "https://twitter.com/ServerlessStack", + }, + { + label: "Forums", + href: config.forums, + }, + { + label: "Stack Overflow", + href: "https://stackoverflow.com/questions/tagged/sst", + }, + ], + }, + { + title: "More", + items: [ + { + label: "GitHub", + href: config.github, + }, + { + label: "About Us", + href: "https://anoma.ly/", + }, + { + label: "Newsletter", + href: config.newsletter, + }, + { + label: "Brand Guide", + href: "https://github.com/serverless-stack/identity", + }, + ], + }, + ], + copyright: `© ${new Date().getFullYear()} Anomaly Innovations`, + }, + }, + presets: [ + [ + "@docusaurus/preset-classic", + { + docs: { + routeBasePath: "/", + sidebarPath: require.resolve("./sidebars.js"), + // Please change this to your repo. + editUrl: + "https://github.com/serverless-stack/serverless-stack/edit/master/www/", + }, + theme: { + customCss: require.resolve("./src/css/custom.css"), + }, + }, + ], + ], +}; diff --git a/docs/package.json b/www/package.json similarity index 99% rename from docs/package.json rename to www/package.json index feb8ea29c4..96e0435e2d 100644 --- a/docs/package.json +++ b/www/package.json @@ -31,4 +31,4 @@ "last 1 safari version" ] } -} \ No newline at end of file +} diff --git a/www/sidebars.js b/www/sidebars.js new file mode 100644 index 0000000000..fb2b6fda61 --- /dev/null +++ b/www/sidebars.js @@ -0,0 +1,21 @@ +module.exports = { + docs: [ + { Introduction: ["about", "background"] }, + { + Usage: [ + "installation", + "working-locally", + "deploying-your-app", + "migrating-from-cdk", + "known-issues", + ], + }, + { + Packages: [ + "packages/cli", + "packages/create-serverless-stack", + "packages/resources", + ], + }, + ], +}; diff --git a/docs/src/css/custom.css b/www/src/css/custom.css similarity index 93% rename from docs/src/css/custom.css rename to www/src/css/custom.css index 597be72dd6..7775c56c2e 100644 --- a/docs/src/css/custom.css +++ b/www/src/css/custom.css @@ -74,6 +74,13 @@ h1 { font-family: var(--ifm-heading-font-family); } +.menu > ul.menu__list > li.menu__list-item > a:first-child { + opacity: 0.75; + font-size: 0.9em; + font-weight: 700; + text-transform: uppercase; +} + .footer--dark { background-color: #395C6B; } diff --git a/docs/static/.nojekyll b/www/static/.nojekyll similarity index 100% rename from docs/static/.nojekyll rename to www/static/.nojekyll diff --git a/docs/static/img/favicon.ico b/www/static/img/favicon.ico similarity index 100% rename from docs/static/img/favicon.ico rename to www/static/img/favicon.ico diff --git a/www/static/img/logo.svg b/www/static/img/logo.svg new file mode 100644 index 0000000000..ac5e0a84e2 --- /dev/null +++ b/www/static/img/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/yarn.lock b/www/yarn.lock similarity index 100% rename from docs/yarn.lock rename to www/yarn.lock From e016ba1b04f83ed5aceca26552b4149227d145ae Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 15 Jan 2021 22:46:21 -0500 Subject: [PATCH 270/481] Updating READMEs --- README.md | 41 +---------- packages/core/README.md | 2 +- packages/resources/README.md | 130 +---------------------------------- 3 files changed, 4 insertions(+), 169 deletions(-) diff --git a/README.md b/README.md index ceb048909a..8575728f2a 100644 --- a/README.md +++ b/README.md @@ -25,40 +25,9 @@ $ npx sst start sst start

-## Table of Contents - -- [Background](#background) -- [Usage](#usage) - - [Creating an app](#creating-an-app) - - [Working on your app](#working-on-your-app) - - [Developing locally](#developing-locally) - - [Building your app](#building-your-app) - - [Testing your app](#testing-your-app) - - [Deploying your app](#deploying-your-app) - - [Removing an app](#removing-an-app) - - [Package scripts](#package-scripts) - - [Linting, type checking](#linting-type-checking) -- [Example Project](#example-project) -- [Migrating From CDK](#migrating-from-cdk) -- [Known Issues](#known-issues) -- [Future Roadmap](#future-roadmap) -- [Contributing](#contributing) -- [Running Locally](#running-locally) -- [References](#references) - - [`@serverless-stack/cli`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/cli) - - [`create-serverless-stack`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/create-serverless-stack) - - [`@serverless-stack/resources`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/resources) -- [Community](#community) +## Documentation ---- - -## Background - -## Usage - -## Migrating From CDK - -## Known Issues +[**View the SST docs**](https://docs.serverless-stack.com) ## Contributing @@ -83,12 +52,6 @@ Run all the tests. $ yarn test ``` -## References - -- [`@serverless-stack/cli`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/cli) -- [`create-serverless-stack`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/create-serverless-stack) -- [`@serverless-stack/resources`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/resources) - ## Community [Follow us on Twitter](https://twitter.com/ServerlessStack), [join us on Slack][slack], [post on our forums](https://discourse.serverless-stack.com), and [subscribe to our newsletter](https://emailoctopus.com/lists/1c11b9a8-1500-11e8-a3c9-06b79b628af2/forms/subscribe). diff --git a/packages/core/README.md b/packages/core/README.md index 6ecb4b68eb..63ec3db433 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -2,4 +2,4 @@ Part of the **[Serverless Stack Toolkit](https://github.com/serverless-stack/serverless-stack)**. -Includes [a forked version of AWS CDK](https://github.com/serverless-stack/sst-cdk) programmatically to deploy and destroy CDK stacks in parallel. +Uses [a lightweight fork of AWS CDK](https://github.com/serverless-stack/sst-cdk) to programmatically invoke the CDK commands. diff --git a/packages/resources/README.md b/packages/resources/README.md index 3e5f0b26d7..0a6f9bf04d 100644 --- a/packages/resources/README.md +++ b/packages/resources/README.md @@ -1,131 +1,3 @@ # @serverless-stack/resources [![npm](https://img.shields.io/npm/v/@serverless-stack/resources.svg)](https://www.npmjs.com/package/@serverless-stack/resources) -Part of the **[Serverless Stack Toolkit](https://github.com/serverless-stack/serverless-stack)**. Provides a couple of simple AWS CDK Constructs: - -- `sst.App` (used internally) -- `sst.Stack` -- `sst.Function` - -## `sst.Stack` - -The `sst.Stack` and `sst.App` constructs allow you to: - -- Automatically prefix stack names with the stage -- Optionally prefix resource names with the stage -- Deploy the entire app using the same AWS profile and region - -### Creating a new stack - -Create a new stack by adding this in `lib/MyStack.js`. - -```jsx -import * as sst from "@serverless-stack/resources"; - -export default class MyStack extends sst.Stack { - constructor(scope, id, props) { - super(scope, id, props); - - // Define your stack - } -} -``` - -Here `sst.Stack` is a simple extension of `cdk.Stack` that prefixes the stack name with the stage and enforces using the global region and AWS profile. - -### Adding to an app - -Add it to your app in `lib/index.js`. - -```jsx -import MyStack from "./MyStack"; - -export default function main(app) { - new MyStack(app, "my-stack"); - - // Add more stacks -} -``` - -Here `app` is an instance of `sst.App`. It's a simple extension of `cdk.App`. - -Note that, setting the env for an individual stack is not allowed. - -```jsx -new MyStack(app, "my-stack", { env: { account: "1234", region: "us-east-1" } }); -``` - -It will throw this error. - -``` -Error: Do not directly set the environment for a stack -``` - -This is by design. The stacks in SST are meant to be re-deployed for multiple stages (like Serverless Framework). And so they depend on the region and AWS profile that's passed in through the CLI. If a stack is hardcoded to be deployed to a specific account or region, it can break your deployment pipeline. - -### Accessing app info - -The stage, region, and app name can be accessed through the app object. - -So in the `lib/index.js` you can access it using. - -```js -app.stage; -app.region; -app.name; -``` - -And in your stack classes (for example, `lib/MyStack.js`) you can use. - -```js -this.node.root.stage; -this.node.root.region; -this.node.root.name; -``` - -You can use this to conditionally add stacks or resources to your app. - -### Prefixing resource names - -You can optionally prefix resource names to make sure they don't thrash when deployed to different stages in the same AWS account. - -You can do so in your stacks. - -```jsx -this.node.root.logicalPrefixedName("MyResource"); // Returns "dev-my-sst-app-MyResource" -``` - -This invokes the `logicalPrefixedName` method in `sst.App` that your stack is added to. This'll return `dev-my-sst-app-MyResource`, where `dev` is the current stage and `my-sst-app` is the name of the app. - -## `sst.Function` - -A replacement for the [`cdk.lambda.NodejsFunction`](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-nodejs-readme.html) that allows you to develop your Lambda functions locally while using [`sst start`](https://github.com/serverless-stack/serverless-stack/tree/master/packages/cli#start). Supports ES and TypeScript out-of-the-box. - -Takes props (`sst.FunctionProps`) that extends [`cdk.lambda.FunctionOptions`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.FunctionOptions.html) and adds the following props to it: - -### `entry` - -Relative path to the entry point of the function. Either based of the project root or the `srcPath`. A `.js` or `.ts` file. - -### `handler` - -The exported function in the entry file. - -Defaults to `"handler"`. - -### `bundle` - -Bundles your Lambda functions with [esbuild](https://esbuild.github.io). Turn this off if you have NPM packages that cannot be bundled. - -Defaults to `true`. - -### `srcPath` - -The source directory where the entry point file is located. If the `bundle` option is turned off, SST zips up the entire `srcPath` directory and uses it as the Lambda function package. - -Defaults to `""`, the project root. - -### `runtime` - -The runtime environment. Only runtimes of the Node.js family are supported. - -Defaults to `lambda.NODEJS_12_X`. +Part of the **[Serverless Stack Toolkit](https://github.com/serverless-stack/serverless-stack)**. From 73aac08a674b5c95e659d5b87394a0b6102338e1 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 15 Jan 2021 23:06:29 -0500 Subject: [PATCH 271/481] Fix docs config --- www/docusaurus.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/docusaurus.config.js b/www/docusaurus.config.js index 82915210ba..fad6b7063d 100644 --- a/www/docusaurus.config.js +++ b/www/docusaurus.config.js @@ -1,8 +1,8 @@ const config = require("./config"); module.exports = { - title: "My Site", - tagline: "The tagline of my site", + title: "Serverless Stack Toolkit", + tagline: "Serverless Stack Toolkit Docs", url: "https://docs.serverless-stack.com", baseUrl: "/", onBrokenLinks: "throw", From cba7b1ea2f44b6eeab43a11c0d7ef8784c1e6134 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 15 Jan 2021 23:20:47 -0500 Subject: [PATCH 272/481] Fixing footer color for dark mode --- www/src/css/custom.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/src/css/custom.css b/www/src/css/custom.css index 7775c56c2e..97ad3117de 100644 --- a/www/src/css/custom.css +++ b/www/src/css/custom.css @@ -81,6 +81,6 @@ h1 { text-transform: uppercase; } -.footer--dark { - background-color: #395C6B; +html[data-theme='light'] .footer { + --ifm-footer-background-color: #395C6B; } From dbe2fa633827338b72c8d9d46829b2ad05519558 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 15 Jan 2021 23:44:00 -0500 Subject: [PATCH 273/481] Fixing broken link in docs --- www/docs/about.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/docs/about.md b/www/docs/about.md index a46c4bbcb9..89ec9464d0 100644 --- a/www/docs/about.md +++ b/www/docs/about.md @@ -9,7 +9,7 @@ import config from "../config"; Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.com/cdk/) that: -- Includes a complete [local development environment for Lambda](#local-lambda-development) +- Includes a complete [local development environment for Lambda](working-locally.md) - Supports remotely invoking local functions - Zero-config ES and TypeScript support using [esbuild](https://esbuild.github.io) - Allows you to use [CDK with Serverless Framework](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html) From 277b93aaea80d5d5e98f0e500f2b0810f7b1bd96 Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 16 Jan 2021 19:16:26 -0500 Subject: [PATCH 274/481] Update README.md --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 8575728f2a..2af4b0f6ca 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,10 @@ $ npx sst start [**View the SST docs**](https://docs.serverless-stack.com) +## Future Roadmap + +SST is being actively developed. Check out the [public SST roadmap here](https://github.com/serverless-stack/serverless-stack/milestones?direction=asc&sort=due_date&state=open). And make sure to **star the repo** and subscribe to updates. + ## Contributing Check out our [roadmap][roadmap] and [join our Slack][slack] to get started. @@ -52,6 +56,13 @@ Run all the tests. $ yarn test ``` +To run the docs site. + +``` bash +$ cd www +$ yarn start +``` + ## Community [Follow us on Twitter](https://twitter.com/ServerlessStack), [join us on Slack][slack], [post on our forums](https://discourse.serverless-stack.com), and [subscribe to our newsletter](https://emailoctopus.com/lists/1c11b9a8-1500-11e8-a3c9-06b79b628af2/forms/subscribe). From 6ff6c8a08f2e1f44ed3e2b70afa201b8420dff64 Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 16 Jan 2021 19:31:55 -0500 Subject: [PATCH 275/481] Fixing links --- www/docs/about.md | 9 +++++---- www/docs/background.md | 2 +- www/docs/installation.md | 2 +- www/docs/packages/cli.md | 2 +- www/src/css/custom.css | 1 + 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/www/docs/about.md b/www/docs/about.md index a46c4bbcb9..7319c83e9d 100644 --- a/www/docs/about.md +++ b/www/docs/about.md @@ -34,10 +34,11 @@ We use SST as a part of the [Serverless Stack guide](https://serverless-stack.co ## Future roadmap -Check out <>the public SST roadmap here. +SST is being actively developed. Check out the the public SST roadmap here. And make sure to **star the repo** and subscribe to updates. + ## Getting help -- <>Slack -- <>GitHub -- <>Forums +- Slack +- GitHub +- Forums diff --git a/www/docs/background.md b/www/docs/background.md index 91f6fc3bd5..1cd23e17d0 100644 --- a/www/docs/background.md +++ b/www/docs/background.md @@ -63,4 +63,4 @@ SST also comes with a few other niceties: - Automatically lints your code using [ESLint](https://eslint.org/) - Runs your unit tests using [Jest](https://jestjs.io/) -Behind the scenes, SST uses <>a lightweight fork of AWS CDK to programmatically invoke the various CDK commands. +Behind the scenes, SST uses a lightweight fork of AWS CDK to programmatically invoke the various CDK commands. diff --git a/www/docs/installation.md b/www/docs/installation.md index c0564a1e13..a4860951d7 100644 --- a/www/docs/installation.md +++ b/www/docs/installation.md @@ -5,7 +5,7 @@ title: Installation import config from "../config"; -SST is a collection of <>npm packages. +SST is a collection of npm packages. ## Requirements diff --git a/www/docs/packages/cli.md b/www/docs/packages/cli.md index c3417b6fee..cb51182547 100644 --- a/www/docs/packages/cli.md +++ b/www/docs/packages/cli.md @@ -99,7 +99,7 @@ Runs your tests using Jest. Takes all the [Jest CLI options](https://jestjs.io/d ### `cdk` -The sst CLI comes with <>a forked version of AWS CDK that it uses internally. This command gives direct access to it. To use this command you'll need to pass in the location of the CDK app. In our cases this is going to be generated in `build/run.js`. For example, to run the CDK `list` command you'll need to. +The sst CLI comes with a forked version of AWS CDK that it uses internally. This command gives direct access to it. To use this command you'll need to pass in the location of the CDK app. In our cases this is going to be generated in `build/run.js`. For example, to run the CDK `list` command you'll need to. ```bash npx sst cdk --app=build/run.js list diff --git a/www/src/css/custom.css b/www/src/css/custom.css index 97ad3117de..b591d9b3b8 100644 --- a/www/src/css/custom.css +++ b/www/src/css/custom.css @@ -74,6 +74,7 @@ h1 { font-family: var(--ifm-heading-font-family); } +.footer__title, .menu > ul.menu__list > li.menu__list-item > a:first-child { opacity: 0.75; font-size: 0.9em; From 1618324a5a1538f3738c18cb7a0bd51db65951ce Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 16 Jan 2021 19:49:52 -0500 Subject: [PATCH 276/481] Fixing og image and desc --- www/docs/about.md | 7 +++++-- www/docs/background.md | 1 + www/docs/deploying-your-app.md | 1 + www/docs/installation.md | 1 + www/docs/known-issues.md | 1 + www/docs/migrating-from-cdk.md | 1 + www/docs/packages/cli.md | 1 + www/docs/packages/create-serverless-stack.md | 1 + www/docs/packages/resources.md | 1 + www/docs/working-locally.md | 1 + www/docusaurus.config.js | 2 ++ www/static/img/og-image.png | Bin 0 -> 15693 bytes 12 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 www/static/img/og-image.png diff --git a/www/docs/about.md b/www/docs/about.md index 9f08a003ee..f34c22adef 100644 --- a/www/docs/about.md +++ b/www/docs/about.md @@ -1,12 +1,16 @@ --- id: about -title: Serverless Stack Toolkit +title: About +hide_title: true sidebar_label: About +description: Serverless Stack Toolkit (SST) Docs slug: / --- import config from "../config"; +

Serverless Stack Toolkit

+ Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.com/cdk/) that: - Includes a complete [local development environment for Lambda](working-locally.md) @@ -36,7 +40,6 @@ We use SST as a part of the [Serverless Stack guide](https://serverless-stack.co SST is being actively developed. Check out the the public SST roadmap here. And make sure to **star the repo** and subscribe to updates. - ## Getting help - Slack diff --git a/www/docs/background.md b/www/docs/background.md index 1cd23e17d0..cd804b2d88 100644 --- a/www/docs/background.md +++ b/www/docs/background.md @@ -1,6 +1,7 @@ --- id: background title: Background +description: Why we created the Serverless Stack Toolkit --- import config from "../config"; diff --git a/www/docs/deploying-your-app.md b/www/docs/deploying-your-app.md index 5e80087b24..662b240f58 100644 --- a/www/docs/deploying-your-app.md +++ b/www/docs/deploying-your-app.md @@ -1,6 +1,7 @@ --- id: deploying-your-app title: Deploying Your App +description: "How to deploy your Serverless Stack Toolkit (SST) app" --- Once your app has been built and tested successfully. You are ready to deploy it to AWS. diff --git a/www/docs/installation.md b/www/docs/installation.md index a4860951d7..8032a2ff18 100644 --- a/www/docs/installation.md +++ b/www/docs/installation.md @@ -1,6 +1,7 @@ --- id: installation title: Installation +description: "Creating a new Serverless Stack Toolkit (SST) app" --- import config from "../config"; diff --git a/www/docs/known-issues.md b/www/docs/known-issues.md index 99b7d26865..f4e0abec23 100644 --- a/www/docs/known-issues.md +++ b/www/docs/known-issues.md @@ -1,6 +1,7 @@ --- id: known-issues title: Known Issues +description: "Known issues with AWS CDK and Serverless Stack Toolkit (SST)" --- There is a known issue in AWS CDK when using mismatched versions of their NPM packages. This means that all your AWS CDK packages in your `package.json` should use the same exact version. And since SST uses a forked version of AWS CDK internally, this means that your app needs to use the same versions as well. diff --git a/www/docs/migrating-from-cdk.md b/www/docs/migrating-from-cdk.md index 12e48c383d..ae29f16e63 100644 --- a/www/docs/migrating-from-cdk.md +++ b/www/docs/migrating-from-cdk.md @@ -1,6 +1,7 @@ --- id: migrating-from-cdk title: Migrating From CDK +description: "Migrating from AWS CDK to Serverless Stack Toolkit (SST)" --- It's fairly simple to move a CDK app to SST. There are a couple of small differences between the two: diff --git a/www/docs/packages/cli.md b/www/docs/packages/cli.md index cb51182547..3aade78f32 100644 --- a/www/docs/packages/cli.md +++ b/www/docs/packages/cli.md @@ -1,6 +1,7 @@ --- id: cli title: "@serverless-stack/cli" +description: "Docs for the @serverless-stack/cli package" --- import config from "../../config"; diff --git a/www/docs/packages/create-serverless-stack.md b/www/docs/packages/create-serverless-stack.md index d4714e2a9d..4ad7f6cc74 100644 --- a/www/docs/packages/create-serverless-stack.md +++ b/www/docs/packages/create-serverless-stack.md @@ -1,6 +1,7 @@ --- id: create-serverless-stack title: create-serverless-stack +description: "Docs for the create-serverless-stack package" --- A simple CLI (`create-serverless-stack`) that helps you create your Serverless Stack projects. diff --git a/www/docs/packages/resources.md b/www/docs/packages/resources.md index cf1bdb4d87..4642a71b43 100644 --- a/www/docs/packages/resources.md +++ b/www/docs/packages/resources.md @@ -1,6 +1,7 @@ --- id: resources title: "@serverless-stack/resources" +description: "Docs for the @serverless-stack/resources package" --- The `@serverless-stack/resources` package provides a couple of simple AWS CDK Constructs: diff --git a/www/docs/working-locally.md b/www/docs/working-locally.md index 8d356cd565..c98f50a528 100644 --- a/www/docs/working-locally.md +++ b/www/docs/working-locally.md @@ -1,6 +1,7 @@ --- id: working-locally title: Working Locally +description: "Working on Lambda function Locally using Serverless Stack Toolkit (SST)" --- SST comes with a great local Lambda development environment that allows you to work and test your functions live. diff --git a/www/docusaurus.config.js b/www/docusaurus.config.js index fad6b7063d..b68fb200ad 100644 --- a/www/docusaurus.config.js +++ b/www/docusaurus.config.js @@ -15,6 +15,8 @@ module.exports = { ], themeConfig: { sidebarCollapsible: false, + image: "img/og-image.png", // used for meta tag, in particular og:image and twitter:image + metaImage: "img/og-image.png", navbar: { title: "", logo: { diff --git a/www/static/img/og-image.png b/www/static/img/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..31df23d993f9025f8f0867f678c3a3779e273639 GIT binary patch literal 15693 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 literal 0 HcmV?d00001 From d17c526520b2fc8adfcdba28735b4ef95cc9e21a Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 18 Jan 2021 03:19:38 -0500 Subject: [PATCH 277/481] Add tests for sst.Api --- package.json | 2 +- .../lambda-override-tsconfig/package.json | 4 +- packages/cli/test/start-guide/lib/ApiStack.js | 87 ++--- packages/cli/test/start-guide/lib/index.js | 4 +- packages/cli/test/start-guide/package.json | 6 +- .../.build/.esbuild.test-lambda-handler.json | 25 ++ packages/resources/.build/lambda.js | 16 + packages/resources/.build/lambda.js.map | 7 + .../resources/.build/test-lambda-handler.zip | Bin 0 -> 459134 bytes packages/resources/jest.config.js | 12 + packages/resources/package.json | 7 +- packages/resources/src/Api.ts | 209 +++++++----- packages/resources/src/Function.ts | 6 +- packages/resources/src/NodejsFunction.ts | 43 --- packages/resources/src/index.ts | 2 +- packages/resources/test/Api.test.js | 321 ++++++++++++++++++ packages/resources/test/lambda.js | 3 + yarn.lock | 63 ---- 18 files changed, 552 insertions(+), 265 deletions(-) create mode 100644 packages/resources/.build/.esbuild.test-lambda-handler.json create mode 100644 packages/resources/.build/lambda.js create mode 100644 packages/resources/.build/lambda.js.map create mode 100644 packages/resources/.build/test-lambda-handler.zip create mode 100644 packages/resources/jest.config.js delete mode 100644 packages/resources/src/NodejsFunction.ts create mode 100644 packages/resources/test/Api.test.js create mode 100644 packages/resources/test/lambda.js diff --git a/package.json b/package.json index a7cc3cbe95..5a4fd98897 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "release-alpha": "lerna publish --force-publish --dist-tag alpha", "clean": "lerna run clean", "postinstall": "lerna run prepare --scope='{@serverless-stack/resources,@serverless-stack/cli,create-serverless-stack}'", - "test": "lerna run test --stream --scope=@serverless-stack/cli" + "test": "lerna run test --stream --scope='{@serverless-stack/resources,@serverless-stack/cli}'" }, "repository": { "type": "git", diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json index c1c29b344b..014844cd5e 100644 --- a/packages/cli/test/lambda-override-tsconfig/package.json +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -12,8 +12,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/start-guide/lib/ApiStack.js b/packages/cli/test/start-guide/lib/ApiStack.js index f4892a472e..a06a012afa 100644 --- a/packages/cli/test/start-guide/lib/ApiStack.js +++ b/packages/cli/test/start-guide/lib/ApiStack.js @@ -1,39 +1,27 @@ import * as cdk from "@aws-cdk/core"; import * as iam from "@aws-cdk/aws-iam"; -import { Stack, Api } from "@serverless-stack/resources"; +import * as sst from "@serverless-stack/resources"; + +export default class ApiStack extends sst.Stack { + + httpApi; -export default class ApiStack extends Stack { constructor(scope, id, props) { super(scope, id, props); - const { tableName } = props; + const { tableName, tableArn } = props; // Create API - const srcPath = 'services/notes'; - const handler = 'main'; - const environment = { tableName }; - const initialPolicy = [ new iam.PolicyStatement({ - actions: [ - "dynamodb:Scan", - "dynamodb:Query", - "dynamodb:GetItem", - "dynamodb:PutItem", - "dynamodb:UpdateItem", - "dynamodb:DeleteItem", - "dynamodb:DescribeTable", - ], - effect: iam.Effect.ALLOW, - resources: [ dbStack.table.tableArn ], - }) ]; - - const api = new Api(this, "Api", { + const apiRet = new sst.Api(this, "Api", { routes: { - "GET /notes": "path/to/file.main", + "GET /notes": "list.main", + "POST /notes": "create.main", + "GET /notes/{id}": "get.main", + "PUT /notes/{id}": "update.main", + "DELETE /notes/{id}": "delete.main", }, - }); - - const api = new Api(this, "Api", { + defaultAuthorizationType: 'AWS_IAM', defaultLambdaProps: { srcPath: 'services/notes', environment: { tableName }, @@ -48,47 +36,20 @@ export default class ApiStack extends Stack { "dynamodb:DescribeTable", ], effect: iam.Effect.ALLOW, - resources: [ dbStack.table.tableArn ], - }) ]; - }, - defaultAuthorizationType: 'AWS_IAM', - routes: { - "GET /": "path/to/list.main", - "GET /notes": "path/to/get.main", + resources: [ tableArn ], + }) ] }, }); + this.httpApi = apiRet.httpApi; - const api = new Api(this, "Api", { - routes: { - "GET /notes": { - authorizationType: "AWS_IAM", - lambdaProps: { srcPath, handler: "path/to/list.main", environment, initialPolicy }, - }, - { - path: "/notes", - method: "POST", - authorizationType: "AWS_IAM", - lambdaProps: { srcPath, entry: "create.js", handler, environment, initialPolicy }, - }, - { - path: "/notes/{id}", - method: "GET", - authorizationType: "AWS_IAM", - lambdaProps: { srcPath, entry: "get.js", handler, environment, initialPolicy }, - }, - { - path: "/notes/{id}", - method: "PUT", - authorizationType: "AWS_IAM", - lambdaProps: { srcPath, entry: "update.js", handler, environment, initialPolicy }, - }, - { - path: "/notes/{id}", - method: "DELETE", - authorizationType: "AWS_IAM", - lambdaProps: { srcPath, entry: "delete.js", handler, environment, initialPolicy }, - }, - }, + // set API endpoint as stack output + new cdk.CfnOutput(this, `ApiEndpoint`, { + value: this.httpApi.apiEndpoint, + }); + + // set log group name as stack output + new cdk.CfnOutput(this, `AccessLogGroupName`, { + value: apiRet.accessLogGroup.logGroupName, }); } } diff --git a/packages/cli/test/start-guide/lib/index.js b/packages/cli/test/start-guide/lib/index.js index 23be397358..ea11dfef87 100644 --- a/packages/cli/test/start-guide/lib/index.js +++ b/packages/cli/test/start-guide/lib/index.js @@ -2,7 +2,6 @@ import S3Stack from "./S3Stack"; import CognitoStack from "./CognitoStack"; import DynamoDBStack from "./DynamoDBStack"; import ApiStack from "./ApiStack"; -import * as iam from "@aws-cdk/aws-iam"; // Add stacks export default function main(app) { @@ -12,10 +11,11 @@ export default function main(app) { const apiStack = new ApiStack(app, "api", { tableName: dbStack.table.tableName, + tableArn: dbStack.table.tableArn, }); new CognitoStack(app, "cognito", { - apiId: apiStack.api.httpApiId, + apiId: apiStack.httpApi.httpApiId, bucketArn: s3Stack.bucket.bucketArn, }); } diff --git a/packages/cli/test/start-guide/package.json b/packages/cli/test/start-guide/package.json index 71a6a57a95..b44e1e99bc 100644 --- a/packages/cli/test/start-guide/package.json +++ b/packages/cli/test/start-guide/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-guide", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.5.0", "scripts": { "postinstall": "node ../helpers/copy-symlinks.js", "add-package": "sst add-package", @@ -20,8 +20,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } diff --git a/packages/resources/.build/.esbuild.test-lambda-handler.json b/packages/resources/.build/.esbuild.test-lambda-handler.json new file mode 100644 index 0000000000..a47abea546 --- /dev/null +++ b/packages/resources/.build/.esbuild.test-lambda-handler.json @@ -0,0 +1,25 @@ +{ + "inputs": { + "test/lambda.js": { + "bytes": 60, + "imports": [] + } + }, + "outputs": { + ".build/lambda.js.map": { + "imports": [], + "inputs": {}, + "bytes": 223 + }, + ".build/lambda.js": { + "imports": [], + "exports": [], + "inputs": { + "test/lambda.js": { + "bytesInOutput": 102 + } + }, + "bytes": 428 + } + } +} diff --git a/packages/resources/.build/lambda.js b/packages/resources/.build/lambda.js new file mode 100644 index 0000000000..5f859ba99d --- /dev/null +++ b/packages/resources/.build/lambda.js @@ -0,0 +1,16 @@ +var __defProp = Object.defineProperty; +var __markAsModule = (target) => __defProp(target, "__esModule", {value: true}); +var __export = (target, all) => { + __markAsModule(target); + for (var name in all) + __defProp(target, name, {get: all[name], enumerable: true}); +}; + +// test/lambda.js +__export(exports, { + handler: () => handler +}); +async function handler() { + return "Hello World"; +} +//# sourceMappingURL=lambda.js.map diff --git a/packages/resources/.build/lambda.js.map b/packages/resources/.build/lambda.js.map new file mode 100644 index 0000000000..376b3826dc --- /dev/null +++ b/packages/resources/.build/lambda.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../test/lambda.js"], + "sourcesContent": ["export async function handler() {\n return \"Hello World\";\n}\n"], + "mappings": ";;;;;;;;;AAAA;AAAA;AAAA;AAAA;AACE,SAAO;AAAA;", + "names": [] +} diff --git a/packages/resources/.build/test-lambda-handler.zip b/packages/resources/.build/test-lambda-handler.zip new file mode 100644 index 0000000000000000000000000000000000000000..f412a5134fa5d408411169811cdf276d22ab7771 GIT binary patch literal 459134 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

ah^x5o@L01JS2p;0Hk$7|_|Fp+ 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

m=fWOX1p?P86JM1j!P)Z7$AO{$_tEg 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 e2" + ], + "testMatch": [ + "**/__tests__/**/*.+(ts|tsx|js)", + "**/?(*.)+(spec|test).+(ts|tsx|js)" + ], + "transform": { + "^.+\\.(ts|tsx)$": "ts-jest" + }, +} diff --git a/packages/resources/package.json b/packages/resources/package.json index 2d30185563..f997b2faa2 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -9,7 +9,9 @@ "watch": "tsc --watch --rootDir src --outDir dist", "build": "tsc --rootDir src --outDir dist && cd lambda/stub && yarn && zip -r ../../dist/stub.zip .", "clean": "rm -rf dist", - "prepare": "./bin/aws-cdk-version-check.js && npm run build" + "prepare": "./bin/aws-cdk-version-check.js && npm run build", + "jest-clear-cache": "jest --clearCache", + "test": "jest" }, "author": { "name": "Anomaly Innovations", @@ -29,10 +31,13 @@ "@aws-cdk/aws-lambda-nodejs": "1.79.0", "@aws-cdk/aws-logs": "1.79.0", "@aws-cdk/core": "1.79.0", + "@types/jest": "^26.0.7", "chalk": "^4.1.0", "esbuild": "^0.8.31", "eslint": "^7.16.0", "fs-extra": "^9.0.1", + "jest": "^26.1.0", + "ts-jest": "^26.1.4", "typescript": "^3.9.7", "zip-local": "^0.3.4" }, diff --git a/packages/resources/src/Api.ts b/packages/resources/src/Api.ts index 9441622753..76bf57d6e7 100644 --- a/packages/resources/src/Api.ts +++ b/packages/resources/src/Api.ts @@ -3,9 +3,20 @@ import * as logs from "@aws-cdk/aws-logs"; import * as apig from "@aws-cdk/aws-apigatewayv2"; import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; +import { Stack } from "./Stack"; import { Function, FunctionProps } from "./Function"; -export interface ApiProps extends apig.HttpApiProps { +const allowedMethods = [ + apig.HttpMethod.DELETE, + apig.HttpMethod.GET, + apig.HttpMethod.HEAD, + apig.HttpMethod.OPTIONS, + apig.HttpMethod.PATCH, + apig.HttpMethod.POST, + apig.HttpMethod.PUT, +]; + +export interface ApiProps { /** * Path to the entry point of the function. A .js or .ts file. */ @@ -23,7 +34,7 @@ export interface ApiProps extends apig.HttpApiProps { * * @default - Defaults to true */ - readonly accessLog?: boolean | AccessLogProps; + readonly accessLog?: boolean; /** * Default authorization type for routes. @@ -36,6 +47,11 @@ export interface ApiProps extends apig.HttpApiProps { * Default Lambda props for routes. */ readonly defaultLambdaProps?: FunctionProps; + + /** + * Default HTTP Api props. + */ + readonly httpApiProps?: apig.HttpApiProps; } /** @@ -58,145 +74,169 @@ export interface RouteProps { readonly lambdaProps?: FunctionProps; } -/** - * Props for Access log. - */ -export interface AccessLogProps { +export class Api extends cdk.Construct { /** - * Access log format. + * The created HttpApi construct. */ - readonly format: string; -} + public readonly httpApi: apig.HttpApi; -export class Api extends apig.HttpApi { - constructor(scope: cdk.Construct, id: string, props: ApiProps) { + /** + * The created Access Log Group construct. + */ + public readonly accessLogGroup?: logs.LogGroup; - const { cors, accessLog, routes, defaultAuthorizationType, defaultLambdaProps } = props; + constructor(scope: cdk.Construct, id: string, props: ApiProps) { + super(scope, id); + + const { + // convenient props + cors, + accessLog, + routes, + defaultAuthorizationType, + defaultLambdaProps, + // full functionality props + httpApiProps, + } = props; //////////////////// // Configure CORS //////////////////// - // note: If both cors and corsPreflight are set, cors takes precedence. - let corsPreflight = props.corsPreflight; - if (cors === undefined || cors === true) { - corsPreflight = { - allowHeaders: ['*'], - allowMethods: [ - apig.HttpMethod.DELETE, - apig.HttpMethod.GET, - apig.HttpMethod.HEAD, - apig.HttpMethod.OPTIONS, - apig.HttpMethod.PATCH, - apig.HttpMethod.POST, - apig.HttpMethod.PUT, - ], - allowOrigins: ['*'], - }; + // Validate input + if (cors !== undefined && httpApiProps !== undefined) { + throw new Error(`Cannot define both cors and httpApiProps.`); + } + + let apiProps; + if (httpApiProps === undefined) { + let corsPreflight; + if (cors === undefined || cors === true) { + corsPreflight = { + allowHeaders: ["*"], + allowMethods: allowedMethods, + allowOrigins: ["*"], + }; + } + apiProps = { corsPreflight }; + } else { + apiProps = { ...httpApiProps }; } //////////////////// // Create Api //////////////////// - - super(scope, id, { - ...props, - corsPreflight, - }); - - // set API endpoint as stack output - new cdk.CfnOutput(this, "ApiEndpoint", { - value: this.apiEndpoint, - }); + apiProps.apiName = apiProps.apiName || `${Stack.of(this).stackName}-${id}`; + this.httpApi = new apig.HttpApi(this, "Api", apiProps); /////////////////////////// // Configure access log /////////////////////////// + // Validate input + if (accessLog !== undefined && httpApiProps !== undefined) { + throw new Error(`Cannot define both accessLog and httpApiProps.`); + } + // note: Access log configuration is not supported by L2 constructs as of CDK v1.85.0. We // need to define it at L1 construct level. - if (accessLog !== false) { + if ( + httpApiProps === undefined && + (accessLog === undefined || accessLog === true) + ) { // create log group - const logGroup = new logs.LogGroup(this, 'LogGroup'); + this.accessLogGroup = new logs.LogGroup(this, "LogGroup"); // get log format - const logFormat = (accessLog === undefined || accessLog === true) - ? '{ "requestId":"$context.requestId", "ip": "$context.identity.sourceIp", "caller":"$context.identity.caller", "user":"$context.identity.user","requestTime":"$context.requestTime", "httpMethod":"$context.httpMethod","resourcePath":"$context.resourcePath", "status":"$context.status","protocol":"$context.protocol", "responseLength":"$context.responseLength" }' - : accessLog.format; + const logFormat = JSON.stringify({ + requestId: "$context.requestId", + ip: "$context.identity.sourceIp", + requestTime: "$context.requestTime", + httpMethod: "$context.httpMethod", + routeKey: "$context.routeKey", + path: "$context.path", + status: "$context.status", + protocol: "$context.protocol", + cognitoIdentityId: "$context.identity.cognitoIdentityId", + responseLatency: "$context.responseLatency", + responseLength: "$context.responseLength", + }); // get L1 cfnStage construct - if ( ! this.defaultStage.node.defaultChild) { + if (!this.httpApi.defaultStage?.node.defaultChild) { throw new Error(`Fail to define the default stage for Http API.`); } // set access log settings - const cfnStage = this.defaultStage.node.defaultChild as apig.CfnStage; + const cfnStage = this.httpApi.defaultStage.node + .defaultChild as apig.CfnStage; cfnStage.accessLogSettings = { format: logFormat, - destinationArn: logGroup.logGroupArn, + destinationArn: this.accessLogGroup.logGroupArn, }; - - // set log group name as stack output - new cdk.CfnOutput(this, "AccessLogGroupName", { - value: logGroup.logGroupName, - }); } - - // Set defaults - const defaultLambdaProps = props.defaultLambdaProps; - const routes = props.routes; - /////////////////////////// // Configure routes /////////////////////////// - Object.keys(routes).forEach((routeName: string) => { - let routeProps = routes[routeName]; - if (typeof routeProps === 'string') { - routeProps = { handler: routeProps }; + // Validate input + if (!routes) { + throw new Error(`Missing 'routes' in sst.Api.`); + } + const routeKeys = Object.keys(routes); + if (routeKeys.length === 0) { + throw new Error("At least 1 route is required."); + } + + routeKeys.forEach((routeKey: string) => { + let routeProps = routes[routeKey]; + if (typeof routeProps === "string") { + routeProps = { lambdaProps: { handler: routeProps } }; } // Get path and method - const routeNameParts = routeName.split(' '); + const routeNameParts = routeKey.split(/\s+/); if (routeNameParts.length !== 2) { - throw new Error(`Invalid route ${routeName}`); + throw new Error(`Invalid route ${routeKey}`); } - const method = routeNameParts[0].toUpperCase(); + const methodStr = routeNameParts[0].toUpperCase(); const path = routeNameParts[1]; - if ( ! [ apig.HttpMethod.DELETE, - apig.HttpMethod.GET, - apig.HttpMethod.HEAD, - apig.HttpMethod.OPTIONS, - apig.HttpMethod.PATCH, - apig.HttpMethod.POST, - apig.HttpMethod.PUT, - ].includes(method)) { - throw new Error(`Invalid method defined for route ${routeName}`); + const method = allowedMethods.find((per) => per === methodStr); + if (!method) { + throw new Error(`Invalid method defined for route ${routeKey}`); } if (path.length === 0) { - throw new Error(`Invalid path defined for route ${routeName}`); + throw new Error(`Invalid path defined for route ${routeKey}`); } // Get authorization type - let authorizationType = routeProps.authorizationType || defaultAuthorizationType || 'NONE'; + let authorizationType = + routeProps.authorizationType || defaultAuthorizationType || "NONE"; authorizationType = authorizationType.toUpperCase(); - if ( ! [ 'NONE', 'AWS_IAM' ].includes(authorizationType)) { + if (!["NONE", "AWS_IAM"].includes(authorizationType)) { throw new Error( `sst.Api does not support ${authorizationType} authorization type. Only 'NONE' and 'AWS_IAM' types are currently supported.` ); } // Get Lambda props - const lambdaProps = { ...defaultLambdaProps, ...routeProps.lambdaProps }; - if ( ! lambdaProps.handler) { - throw new Error(`No Lambda handler defined for route ${routeName}`); + const lambdaProps = { + ...(defaultLambdaProps || {}), + ...routeProps.lambdaProps, + } as FunctionProps; + if (!lambdaProps.handler) { + throw new Error(`No Lambda handler defined for route ${routeKey}`); } // Create route - const lambda = new Function(this, `Lambda_${method}_${path}`, lambdaProps); - const route = new apig.HttpRoute(this, `Route_${method}_${path}`, { - httpApi: this, + const lambda = new Function( + this, + `Lambda_${methodStr}_${path}`, + lambdaProps + ); + const route = new apig.HttpRoute(this, `Route_${methodStr}_${path}`, { + httpApi: this.httpApi, routeKey: apig.HttpRouteKey.with(path, method), integration: new apigIntegrations.LambdaProxyIntegration({ handler: lambda, @@ -204,12 +244,13 @@ export class Api extends apig.HttpApi { }); // Configure route authorization type - if ( ! route.node.defaultChild) { - throw new Error(`Fail to define the default route for route ${routeName}.`); + if (!route.node.defaultChild) { + throw new Error( + `Fail to define the default route for route ${routeKey}.` + ); } const cfnRoute = route.node.defaultChild as apig.CfnRoute; cfnRoute.authorizationType = authorizationType; - }); } } diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index 320cb012a6..60c29985e8 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -81,7 +81,7 @@ export class Function extends lambda.Function { ].includes(runtime) ) { throw new Error( - `sst.Function does not support ${props.runtime}. Only NodeJS runtimes are currently supported.` + `The specified runtime is not supported for sst.Function. Only NodeJS runtimes are currently supported.` ); } @@ -118,7 +118,9 @@ export class Function extends lambda.Function { } // Enable reusing connections with Keep-Alive for NodeJs Lambda function - this.addEnvironment('AWS_NODEJS_CONNECTION_REUSE_ENABLED', '1', { removeInEdge: true }); + this.addEnvironment("AWS_NODEJS_CONNECTION_REUSE_ENABLED", "1", { + removeInEdge: true, + }); // register Lambda function in app root.registerLambdaHandler({ srcPath, handler } as HandlerProps); diff --git a/packages/resources/src/NodejsFunction.ts b/packages/resources/src/NodejsFunction.ts deleted file mode 100644 index 34232c3ebb..0000000000 --- a/packages/resources/src/NodejsFunction.ts +++ /dev/null @@ -1,43 +0,0 @@ -import path from "path"; -import * as cdk from "@aws-cdk/core"; -import * as lambda from "@aws-cdk/aws-lambda-nodejs"; - -import { App } from "./App"; - -export type NodejsFunctionProps = lambda.NodejsFunctionProps; - -export class NodejsFunction extends lambda.NodejsFunction { - constructor(scope: cdk.Construct, id: string, props?: NodejsFunctionProps) { - const root = scope.node.root as App; - - if (root.local) { - let srcPath, srcHandler; - if (props && props.entry) { - const entryParts = props.entry.split("/"); - srcPath = entryParts.slice(0, -1).join("/"); - srcHandler = `${entryParts.pop()}/${props.handler || "handler"}`; - } else { - srcPath = __dirname; - srcHandler = path - .basename(__filename) - .split(".") - .splice(0, -1) - .concat([id, (props && props.handler) || "handler"]) - .join("."); - } - super(scope, id, { - ...props, - entry: path.resolve(__dirname, "../lambda/stub/index.js"), - handler: "main", - environment: { - ...((props && props.environment) || {}), - SST_DEBUG_SRC_PATH: srcPath, - SST_DEBUG_SRC_HANDLER: srcHandler, - SST_DEBUG_ENDPOINT: root.debugEndpoint || "", - }, - }); - } else { - super(scope, id, props); - } - } -} diff --git a/packages/resources/src/index.ts b/packages/resources/src/index.ts index 53295be425..c425a2595e 100644 --- a/packages/resources/src/index.ts +++ b/packages/resources/src/index.ts @@ -1,4 +1,4 @@ export * from "./App"; +export * from "./Api"; export * from "./Stack"; export * from "./Function"; -export * from "./NodejsFunction"; diff --git a/packages/resources/test/Api.test.js b/packages/resources/test/Api.test.js new file mode 100644 index 0000000000..7413655579 --- /dev/null +++ b/packages/resources/test/Api.test.js @@ -0,0 +1,321 @@ +const lambda = require("@aws-cdk/aws-lambda"); +const sst = require("../src"); + +test("api-cors-redefined", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + expect(() => { + new sst.Api(stack, "Api", { + cors: true, + routes: { + "GET /": "test/lambda.handler", + }, + httpApiProps: {}, + }) + }).toThrow(/Cannot define both cors and httpApiProps/); +}); + +test("api-cors-default", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + const { httpApi } = new sst.Api(stack, "Api", { + routes: { + "GET /": "test/lambda.handler", + }, + }); + expect(httpApi.node.defaultChild.corsConfiguration).toMatchObject({ + "allowHeaders": [ "*" ], + "allowMethods": [ "DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT" ], + "allowOrigins": [ "*" ], + }); +}); + +test("api-cors-true", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + const { httpApi } = new sst.Api(stack, "Api", { + cors: true, + routes: { + "GET /": "test/lambda.handler", + }, + }); + expect(httpApi.node.defaultChild.corsConfiguration).toMatchObject({ + "allowHeaders": [ "*" ], + "allowMethods": [ "DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT" ], + "allowOrigins": [ "*" ], + }); +}); + +test("api-cors-false", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + const { httpApi } = new sst.Api(stack, "Api", { + cors: false, + routes: { + "GET /": "test/lambda.handler", + }, + }); + expect(httpApi.node.defaultChild.corsConfiguration).toBeUndefined(); +}); + +test("api-access-log-redefined", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + expect(() => { + new sst.Api(stack, "Api", { + accessLog: true, + routes: { + "GET /": "test/lambda.handler", + }, + httpApiProps: {}, + }) + }).toThrow(/Cannot define both accessLog and httpApiProps/); +}); + +test("api-access-log-default", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + const { httpApi, accessLogGroup } = new sst.Api(stack, "Api", { + routes: { + "GET /": "test/lambda.handler", + }, + }); + expect(accessLogGroup.logGroupArn).toContain('TOKEN'); + expect(httpApi.defaultStage.node.defaultChild.accessLogSettings).toMatchObject({ + "format": "{\"requestId\":\"$context.requestId\",\"ip\":\"$context.identity.sourceIp\",\"requestTime\":\"$context.requestTime\",\"httpMethod\":\"$context.httpMethod\",\"routeKey\":\"$context.routeKey\",\"path\":\"$context.path\",\"status\":\"$context.status\",\"protocol\":\"$context.protocol\",\"cognitoIdentityId\":\"$context.identity.cognitoIdentityId\",\"responseLatency\":\"$context.responseLatency\",\"responseLength\":\"$context.responseLength\"}", + "destinationArn": accessLogGroup.logGroupArn, + }); +}); + +test("api-access-log-true", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + const { httpApi, accessLogGroup } = new sst.Api(stack, "Api", { + accessLog: true, + routes: { + "GET /": "test/lambda.handler", + }, + }); + expect(accessLogGroup.logGroupArn).toContain('TOKEN'); + expect(httpApi.defaultStage.node.defaultChild.accessLogSettings).toMatchObject({ + "format": "{\"requestId\":\"$context.requestId\",\"ip\":\"$context.identity.sourceIp\",\"requestTime\":\"$context.requestTime\",\"httpMethod\":\"$context.httpMethod\",\"routeKey\":\"$context.routeKey\",\"path\":\"$context.path\",\"status\":\"$context.status\",\"protocol\":\"$context.protocol\",\"cognitoIdentityId\":\"$context.identity.cognitoIdentityId\",\"responseLatency\":\"$context.responseLatency\",\"responseLength\":\"$context.responseLength\"}", + "destinationArn": accessLogGroup.logGroupArn, + }); +}); + +test("api-access-log-false", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + const { httpApi, accessLogGroup } = new sst.Api(stack, "Api", { + accessLog: false, + routes: { + "GET /": "test/lambda.handler", + }, + }); + expect(accessLogGroup).toBeUndefined(); + expect(httpApi.defaultStage.node.defaultChild.accessLogSettings).toBeUndefined(); +}); + +test("api-default-authorization-type-invalid", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + expect(() => { + new sst.Api(stack, "Api", { + routes: { + "GET /": "test/lambda.handler", + }, + defaultAuthorizationType: 'ABC', + }) + }).toThrow(/sst.Api does not support ABC authorization type. Only 'NONE' and 'AWS_IAM' types are currently supported./); +}); + +test("api-default-authorization-type-iam", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + new sst.Api(stack, "Api", { + routes: { + "GET /": "test/lambda.handler", + }, + defaultAuthorizationType: 'AWS_IAM', + }); + const route = Object.values(stack._toCloudFormation().Resources).find(resource => + resource.Type === 'AWS::ApiGatewayV2::Route' + ); + expect(route.Properties.AuthorizationType).toContain('AWS_IAM'); +}); + +test("api-default-authorization-type-none", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + new sst.Api(stack, "Api", { + routes: { + "GET /": "test/lambda.handler", + }, + defaultAuthorizationType: 'NONE', + }); + const route = Object.values(stack._toCloudFormation().Resources).find(resource => + resource.Type === 'AWS::ApiGatewayV2::Route' + ); + expect(route.Properties.AuthorizationType).toContain('NONE'); +}); + +test("api-default-authorization-type-default", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + new sst.Api(stack, "Api", { + routes: { + "GET /": "test/lambda.handler", + }, + }); + const route = Object.values(stack._toCloudFormation().Resources).find(resource => + resource.Type === 'AWS::ApiGatewayV2::Route' + ); + expect(route.Properties.AuthorizationType).toContain('NONE'); +}); + +test("api-default-lambda-props", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + new sst.Api(stack, "Api", { + routes: { + "GET /": "test/lambda.handler", + }, + defaultLambdaProps: { + runtime: lambda.Runtime.NODEJS_8_10, + }, + }); + const route = Object.values(stack._toCloudFormation().Resources).find(resource => + resource.Type === 'AWS::Lambda::Function' + ); + expect(route.Properties.Runtime).toMatch('nodejs8.10'); +}); + +test("api-routes-undefined", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + expect(() => { + new sst.Api(stack, "Api", { + }) + }).toThrow(/Missing 'routes' in sst.Api./); +}); + +test("api-routes-empty", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + expect(() => { + new sst.Api(stack, "Api", { + routes: { + }, + }) + }).toThrow(/At least 1 route is required./); +}); + +test("api-route-invalid", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + expect(() => { + new sst.Api(stack, "Api", { + routes: { + "GET / 1 2 3": "test/lambda.handler", + }, + }) + }).toThrow(/Invalid route GET \/ 1 2 3/); +}); + +test("api-route-invalid-method", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + expect(() => { + new sst.Api(stack, "Api", { + routes: { + "ANY /": "test/lambda.handler", + }, + }) + }).toThrow(/Invalid method defined for route ANY \//); +}); + +test("api-route-invalid-path", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + expect(() => { + new sst.Api(stack, "Api", { + routes: { + "GET ": "test/lambda.handler", + }, + }) + }).toThrow(/Invalid path defined for route GET /); +}); + +test("api-route-authorization-type-invalid", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + expect(() => { + new sst.Api(stack, "Api", { + routes: { + "GET /": { + lambdaProps: { + handler: "test/lambda.handler", + }, + authorizationType: 'ABC', + }, + }, + }) + }).toThrow(/sst.Api does not support ABC authorization type. Only 'NONE' and 'AWS_IAM' types are currently supported./); +}); + +test("api-route-authorization-type-override-by-default", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + new sst.Api(stack, "Api", { + defaultAuthorizationType: 'AWS_IAM', + routes: { + "GET /": { + lambdaProps: { + handler: "test/lambda.handler", + }, + authorizationType: 'NONE', + }, + }, + }) + const route = Object.values(stack._toCloudFormation().Resources).find(resource => + resource.Type === 'AWS::ApiGatewayV2::Route' + ); + expect(route.Properties.AuthorizationType).toContain('NONE'); +}); + +test("api-route-handler-undefined", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + expect(() => { + new sst.Api(stack, "Api", { + routes: { + "GET /": { + lambdaProps: { } + }, + }, + }) + }).toThrow(/No Lambda handler defined for route GET \//); +}); + +test("api-route-handler-override-by-default", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + new sst.Api(stack, "Api", { + defaultLambdaProps: { + runtime: lambda.Runtime.NODEJS_8_10, + }, + routes: { + "GET /": { + lambdaProps: { + handler: "test/lambda.handler", + runtime: lambda.Runtime.NODEJS_10_X, + }, + }, + }, + }) + const route = Object.values(stack._toCloudFormation().Resources).find(resource => + resource.Type === 'AWS::Lambda::Function' + ); + expect(route.Properties.Runtime).toMatch('nodejs10.x'); +}); + diff --git a/packages/resources/test/lambda.js b/packages/resources/test/lambda.js new file mode 100644 index 0000000000..273fe65a6c --- /dev/null +++ b/packages/resources/test/lambda.js @@ -0,0 +1,3 @@ +export async function handler() { + return "Hello World"; +} diff --git a/yarn.lock b/yarn.lock index b489679cbf..e9a36f1462 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2810,69 +2810,6 @@ "@octokit/openapi-types" "^2.2.0" "@types/node" ">= 8" -"@serverless-stack/cli@^1.0.0-alpha.12": - version "1.0.0-alpha.12" - resolved "https://registry.yarnpkg.com/@serverless-stack/cli/-/cli-1.0.0-alpha.12.tgz#ab45369f9cb10a90f100e3354cb57894bddca223" - integrity sha512-6L9ELJHWHlVJDSnBqkeCfYqtQbU8aHMr6GqER05EHQABaW3UeoyMH5oEaK1nb1o9KFiaE+YqZ+0og2CsA7+g2g== - dependencies: - "@aws-cdk/aws-apigatewayv2" "1.79.0" - "@aws-cdk/aws-dynamodb" "1.79.0" - "@aws-cdk/aws-iam" "1.79.0" - "@aws-cdk/aws-lambda" "1.79.0" - "@aws-cdk/core" "1.79.0" - "@babel/core" "^7.10.5" - "@babel/eslint-parser" "^7.11.3" - "@babel/eslint-plugin" "^7.11.3" - "@babel/plugin-proposal-class-properties" "^7.10.4" - "@babel/preset-env" "^7.10.4" - "@serverless-stack/core" "^1.0.0-alpha.12" - "@serverless-stack/resources" "^1.0.0-alpha.12" - "@types/jest" "^26.0.7" - "@types/node" "^14.0.27" - "@typescript-eslint/eslint-plugin" "^3.9.1" - "@typescript-eslint/parser" "^3.9.1" - aws-cdk "1.79.0" - chalk "^4.1.0" - chokidar "^3.4.3" - core-js "^3.6.5" - cross-spawn "^7.0.3" - esbuild "^0.8.31" - eslint "^7.16.0" - fast-safe-stringify "^2.0.6" - fs-extra "^9.0.1" - jest "^26.1.0" - promise.allsettled "^1.0.2" - source-map-support "^0.5.19" - ts-jest "^26.1.4" - typescript "^3.9.7" - ws "^7.4.0" - yargs "^15.4.1" - -"@serverless-stack/core@^1.0.0-alpha.12": - version "1.0.0-alpha.12" - resolved "https://registry.yarnpkg.com/@serverless-stack/core/-/core-1.0.0-alpha.12.tgz#b7c0103a6c975d87fc65f9ad9616d9ab3b919bf7" - integrity sha512-AZrN3cPU0JBapmLrJwR7g4kv4Bwcbo8qZAjMUfNjLLJVRBR6WI17GdNQli4n7qQ02j82WHd03qWl2THoPW6QeA== - dependencies: - aws-sdk "^2.761.0" - chalk "^4.1.0" - sst-cdk "1.79.0-rc.1" - winston "^3.3.3" - -"@serverless-stack/resources@^1.0.0-alpha.12": - version "1.0.0-alpha.12" - resolved "https://registry.yarnpkg.com/@serverless-stack/resources/-/resources-1.0.0-alpha.12.tgz#368fb101242c3e61a7f2ed7a0e7b87055cdbe377" - integrity sha512-PfxvbMDNnkv6SGxhWBqjNfy2bL2nftlpJq5xeNpgw3gKD0r6H+UOFJ7DnQ86rLljclNSg0BnJ5g5yKoYzGOfag== - dependencies: - "@aws-cdk/aws-lambda" "1.79.0" - "@aws-cdk/aws-lambda-nodejs" "1.79.0" - "@aws-cdk/core" "1.79.0" - chalk "^4.1.0" - esbuild "^0.8.31" - eslint "^7.16.0" - fs-extra "^9.0.1" - typescript "^3.9.7" - zip-local "^0.3.4" - "@sinonjs/commons@^1.7.0": version "1.8.1" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" From 83d808236103c97beb80ab9872f15c4c31835e60 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 18 Jan 2021 03:40:44 -0500 Subject: [PATCH 278/481] Fix tests --- packages/cli/test/lambda-override-tsconfig/lib/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/test/lambda-override-tsconfig/lib/index.ts b/packages/cli/test/lambda-override-tsconfig/lib/index.ts index b92d1fbed9..5f8bd50dd4 100644 --- a/packages/cli/test/lambda-override-tsconfig/lib/index.ts +++ b/packages/cli/test/lambda-override-tsconfig/lib/index.ts @@ -13,7 +13,7 @@ class ApiStack extends sst.Stack { // Create a Lambda function triggered by an HTTP API const lambda = new sst.Function(this, "Lambda", { - entry: "lambda.ts", + handler: "lambda.handler", srcPath: "src", }); From 3836cd0bb07c405bcd17cc7ba302cda220b5a34d Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 18 Jan 2021 03:52:34 -0500 Subject: [PATCH 279/481] Add tests for sst.Function --- .../resources/.build/test-lambda-handler.zip | Bin 459134 -> 500790 bytes packages/resources/test/Function.test.js | 22 ++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 packages/resources/test/Function.test.js diff --git a/packages/resources/.build/test-lambda-handler.zip b/packages/resources/.build/test-lambda-handler.zip index f412a5134fa5d408411169811cdf276d22ab7771..c2d03144659bfba49a644e998bdf3178e6fbb63f 100644 GIT binary patch delta 424464 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%0AI<~Bbs8ja0W+GfDaZe#xy%S_{D1{*wgE;{9q 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%0DH%`u}|&EH!~ZEfrr}y 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 YjZY__2LKD82bVqp2Ra5CqXz&00NgvouK)l5 delta 382350 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𝔠ByKynZV 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

(_v zBjtwrhLsDiDD~ZI)Mmm3bIua7vho_rGk^THsj}+t(m(2`v32c7Z%>wb;!+igzr-|Z zYiT*pBq)daw0ZduHm?*rE-fLrP*+`RBy6}@FI%g1a>jjbkr;_gM?q7TWYc#z*cJ`Q zkAn(l&Zx_Va8#^oA)nF+em#NVB3njHXR81pt zJ|=*?f08HVz(NF6Nk$CYApx<`qbfDYhweR%(yBDpgH#s(FZZb&nxjIpOxN;+g?+D( zxS>jCCF@d%_Twn+Wm*Grg`CCOvKEc*7lHJGAFRW)1SjlVirWb~w}RP3?eK8`Le;#^ zINH2$F_Dpfp&eYnDO?k1p0$8~qKR=Glj3iVCAfd z{E}*Fj|Iz5bT+I?Xrd4KKUsI6t)%P9F;%_I0sBL18y)0^QRUw1+sSSvVB;WA~n{V@p-9NVS_JbusCuC*NYwrga-H4+Xvh|MGj03T<>DSeUZAW#6^Tx90AfQ;Aen_#Vb!sN9MFj zC9Erd?;Clw7Fr42z+itk8H@P3ZrU%xyKzY55Ws`HfcVx?JoNB=gw?Wsv@(dgX`SXO zQ%)Bx;uC@3RHQn{HiW*|!r`8gC0g%nKpnMV7CR&n+@w;BTp6z&6={sF2L)aqSSa)b zIPSa_#GkiKFT{?YmnO`zE%nV?q@5a}EeW}ESq$AgAbE{6ZFcGV)=dXjYGojPI zFGY6-oiw9M7E!t~yvB0t!1U~J$2li<7w}1U8Rl+ka4i6s#{()eMfW?O{OIudT!exkbyxSltoH957FSB^RmFtd(kNlk7bC~Awxkq!NhvTw zo*0Q!4)x@}-oFsZOs3t^rF0!DtS2~Zg@>L`HQaPvouJ5AiuhK z0Bb;$zuQrnT4Ud%>TspFfQbeK1__)eA+)k5@JkdM~i=i#bVOwe8@~l@v zr02~GeU24-H4)R-@K+_umpc92f3Gb|P)E`iYTWW)C-LMVGO$#UwYV{wqo=uonR=0( z|GcssMS7r%up5<6H)L{$KbK0why(Mt!$^i)=l^@cEpl7jpOOjitA9&P#hWD)?+EIY zdJ@1~HcP4jbM!gAu42%A>pwn+zC-r;R|ki_G@J))jN+Qgc5+ohJZau#e=pKUK>BmZ zU9%bRRFcn{a(SZ`n|>%-BrARTIm*CHHiIPzWa1{vhsq56X`rFk*O0MD&ifb?7=7v? z#uFc=NCS?^lhBg1jp;43{GWy6p`QiPX5;|19ouPu)@^?eTaD0#0=<|9;{0cbh3R4} z>x}2;MwbIdB{o5=3?Wi0e;#0rEs9EOB<@__yLg`RFm{q$w#LMqMCELLM_<{jSypdZ zFtoaD%j6LQm%G>MEdA}Va#0s8nZ-pcLK61|UJ>Op(0-5`jRP{0%dJgl*+js9NpYI< zT|KaSf;41=`-Y(hA$bUPcrBM?6VCq&mxx%p5g|lavG;Pef3)+5=)8}dka}0Z z=gNvVU*x{ZeEhAT;g$eMT2>*J@P&kK^gPAwAyH`yaXV>xZI{BlBi%M?y}7_#_IeSM zNbM)G=cV@_R9I^V&zmiQPlTNf03AbGcJ*9XHy2!4X5=n;K#8a>qb}uoj8Us!=u2Q^ z1ywe-!5fP;IBmx^e-0^}V1sXK0S>w+@8K|JpyItU8|MeqzS12sI#nW#6}f=oNWJ<~ zb)d>)Htv}9Kpq-e_j@P(IH(k1mHOr?Y^IuDkf%q5@jYY_herxhhWkk@F(@I@q$cnhkSVJJ?^NqU$2anJVA$EHfo z+YiUXAU~mUUmrJjO&h|FkBMsTvS6c&lOSyj0SwS`ppEfPfPE&CC^P6p!;O>@8i9CoF-D~rHIX%R%ItBlzXr|_ElWJ0OAV5-w|VaLWsP3tzPrBN=WWf!tiYP6fNuGk)3h za#UG&e`ekX)jm0l(`EI|_27n&06;*$zufuZH#w}Jag73+dg#psncouoyIsUgrsD5m zb=|5Sl6K2_zyGdJXALxd5EY3Bmj}Wl`SQW(!wY>NGTRCs!jO{`YXMU3>xMvL0CKb_ zy}g)7uN_Uh*J`uL+V}tME^XfIH2o%Jc)2%He|adSJa7#bDjtoGXq zCca*mM|_omDb#8(g{F2i{@byy%^u1dlAPm4WL-`ak>yMaA8wrZCO!0@=+;cv-+Fu` zBNg#Qe>K(YW;#CGN18(?(oyL6*zLNJu7r%iY}0Byb^%~2uz9mzQyA>@iMN!S3&iCb zf30vjN#!3|MH9UBw{b=WB{Ga~81k(sEjMiO-A5<2EN9FG!gU69e;94KSqM+_G*rF` z0EG{*l2r{y8#v83&r|G%A5#=oYxrEA$yW>`bia2*3BDU1cg4Kd=#TBEMuOb`G`7SE zlbBdKKau)04;tG~nsJ!i=wTK}^2<8)e~+(0Gtiw<_iag?&bqZ*{L<8>N_B}qp9#-~ z2d*q`HJ?KRC;jnJ4;>bHRFWi2jfa6#&!)tE!X4-i9(3uVNb){=w1KAv@qn zn40<8Q#wuNGN0I@fNW8bWxs2g83qPBvBTYlqluW&az>$qsN$HwQ-e>~_S zcN&Y206{>$zp_j$iQtFIWBsk1aaC_w3lL602nNF7A>IMS-zw9qO!rhoS*f=J2>i$z zT+NX{0ouFn+R|U7meGm=61hB10-;qB3L(ZYqVyJ@Qs+vGt3KXN!{djpS{)T@MWkHQ zK}nz9-8BNn-n;nijf|;y&i81(YCFXiy9$(C_ zLP59*6kp#>#a4rEU*F{t3-ylS_06hCnz+>2>?oUNYnknPzyd;9^a%l;w6) z5Kqgt!tD8@#STZNIU?w}aJ^h4>V4(ukD22aWls%@F4jmy zAQUwzAwmG+a%TLp-q+{ye^NBy8Chpw{`um>#JY)j=-vQs{lHKpH2M_$*6*=1$Dd4d zy5~vZxukD%b-q`@p!-5W@Rvrfr2bhA7_D+oQl&*ot^@=E0P*X*QZ#}hoRTX zI}sp*Kr~-UKKDWqw-q=2f*io)>XfMVSEf-NoYXx$i-R<~YBpuNe~<~|3qylsWu`Uf zBF)dC&!(?ho$z{X=S_e|k4SX9&)F+?|Fs9IQyn4BY1$MN+81%&?0W*EL&U+E*B&f9 zsJ8yvVU>w}%L|h7;P&~7?+Lez`jkS3d797f9N~EUrX&t!W2SAF&{2JW{(em~Yn43U zdcod#AtssI3Jhpoe^939BY5YZtutz(gD~(f=y;GPYzUSALVD}`<%dw!5(}ZYGhjDq z=bZAc=xJfhR4YhFsPNklO?Nud*);@}T!-$0A!BK0}Ghc^i;Y{NNQiB&o zD{m{+oI6#~TchcrUQg{sI4H7s069R$zr7=rM;*>RlkiFAe}nU>Q*4vhQ3AE?Rxf5C9o^u;Pwkc& zVKmRPM6&V&>3~wZb=MqPp6CHeX6&Kk#lv1*K!(DKB?HzoIbc*UMc>3W#mu5(a2d`)MHyNZT;eAKhl3jgQy@L)tRkDC!TH&j744X5X2(1xo{7Jo_;Z zh24mTo7tUis5C*-`(;9joAIQ4{ka;0_Sj5Z11Ef1bdm3R<8h?*yg~?|Vi#5Db84bvuQ* z01oCIB&H7>Lqn3R8u@874}6Df$MuEte?Eh~OqU0Zs?(8q$(HC5=7jQOgYr;QjS?03 zed9Vv`dUr>>1d1&ManHzmLg%)wNZx!wA@cc)Bk9+ic|^Cy+Tn1^mW}Qp+w>aEKn&K ze>#r3=+aw!hoL7C^)tlyUc)ZUg+J@0dlSONWXH#peTlJgHJw56gha4UJ8SSud{eka zeumyJ_1G<%Ozzt(a=`!6ilr99ouh#qfavDpQx;<^08|mMna2Npd(QwdK+eAwXe7PW zT5|q5YCk_C4Xvww?W31iGwuct2Bko6f43ETKJ zJ2_zT)=|7!7VrqJWL?-gfl^}d$;L0r5!ZonF}g2|?aD=dyR)+~Y~T|e)(^bMe;-+W z>rQWRWVc3d<3H|$_BDFjqEJd>T@}$IW;q9QyTq$nb{DgM#S<8JKgrY=wZS|26@{tY zDBz37UGM?w_B<9rW+sGm;03BrjL(iHWe#{sf-?#tirTQV!wCc{vc`&B2rQNWKS030 z*Cf&4d)+6H+o2k#A>8!)A4GFvjR7HA=}R{q#od zc-D3;Q#~gvYeyg6s6r0zjT2Rf4hx!aIZ~;s%NT-7RM3fSPc%rRr#t)i1+X@#;Kt2i2)ag>L;bw&lCdrWcJ-6 z$0e70<=Bc2_rvMZtdD^0NpS*&=L@rJSyYSFXo!4~iCE{5pc=$V@+2lr0Zd1vI<#|P z_}+A_1OMd&XINpAGG+ccf1OID2WX#qY|uNYB$Xe4ZvCEeEf26o5=k$$X`8Bf;UO0} z2k;~bUSL!x>W3}jL#RDggwppFk*N#V#z2sK{QBxd8{X*jHtc$g&m%5zM)unXnQuxg zcxg6+#|={+D+qwSC@|6*k{iF?pINO>z$Q0Tb@^BPScBaKWFm~Af1~3yZoM!;-|aY+ zjd{^Tu|Z|moZ&^CV;Io=okIDJQzQ>ZFpjv9%*LreO1u_Q@9hZ@ibuR9U-=Cov^&S( zt^(&fYJ9(n6u1JJyZ|Xc*1s=Y(<j37-D_lN;1pRudROX~ zs<~y79|QuR*Ji;)l)EBg`+tvsDj&EYp3ZFa&7Rd{8|+z37JhlXW5b9?&E|ARZ8r}~ zeI!7Peoa16rU3!H1TYdy5LJ(n(A&-cJ3z$0WLKW8emzhW8-9_^EP&x8THs`db<%ZjZG z3$Bqt!=t$dHl?e!ywN5Kz|uHn`XBcd*he)aD!?|orw$y#(A)V<2Z1H_kfv>Fs~sPZ z?oU83e-!os)J+2IvEO<{IC*=orJjLmN$PvHfOU_!$^Fs( z3Ux{8_h5)`kR;{<+XzX#Cg6PkA6_1iX}pd52F6yB$7Z^a9NmIAO&rGeVTJ%BK-|9~ z1D=VtpNPlH0d%+2V<;)bB1s~(5DFSgH^Q?%Y$W?dv|HfG9}EBd4-0aWAgYvGD){@H zfAV4s(=u&EG_R*)0c{^0)5ajQ3s+IJ0{uAHpXTgLYiuc{#!^=Ic+G>!)x*{tuXddWQx`d z?{gi~Rxi*;@r?!3Y%x#iOk<*yf~a-NV;JP7p*3D7hOi;awPTC4F+3&7o+e=alfE06 zCgMzTJBKrNuCc2pclL2)^!R)te-4SwJ^XsPqw!&3Km2(;G<+Yp4ygH$(-x>?hYK|j zU(|i;I^?Nq>+t)DiW*w{3#MECdR`!yn37!PR)T~ytU?SmhjFSGR^_$O#l|m6U3XV_ z{#m|V2yNz_VfPe&1W}+9-r*GPI=CN8=szcFmXl(%g-xlidTuNcQ=TBBe-P6~pCvj3 z9R@N?u&^G)Hie>tXe57#nYo_F0i z2S_m@aV4IBL6El-k=@U4fRA7d97IwPZM=+B+5GrQTuLVvcYoEHUnbgxS8zWU0)@Kk z*pitrY&Lq3r{5w07NdIKHMVU;gRp34j|^ZDOaCYJt{pF~xOO^ueJ>ccCNRMx044mk z%0)=rEl;10IX6nHe>Q@uc3PNGA-YeyT+X{Mm|^zRulfsB>I>NJuJZ0Fw*d?`WNaT8 z*KZNhL3O@oqW0j_6^ttw0zIke%rj2V3=!=S~ctP20Re_r~iJ-Q3;9M?(7hohz?=3nt^7pehj%>Hd9gd0HOh( zvnxM^viXk#j*)9De@bu0Rd){HS1y<3Og^M#SQC}iye`uo&W=(vMRYCLe1pwa>rDpF z|M_!z*Xgf~f0vzFZ;?!fwp1}~y>!1OlZ(7_-mWb$v1&tr&vS1whb}+MF`XD{=&k2Vf9C|kiqHR0 z+*^td5r>qYuK)MHYMAZ+y{PJNaZexmicYmd+{{EyFd|9^ z*HL;@%m{~5keSHQzF8ytNN3;E93TTWiOYy#E%0$q)wii@VRhn)ubSZZ>-Xl`Qqd&B z<-&g!JXsp2ZxIlB)sXb@W&MJYfL1_pK~fWO9~_ACqwZbHA>#n}B}!0t&^W=z#)0Hr z$a5I|e-y$ykRBI8!a0DJK_ALMLFgF1l1~_wj82!j*M$HdK;XZhACcWF*b1SMqsLSQ z9C7nm8(ku}(NUvDI6*-8n0@SEv0F^MRu^+;D{*UBaSXQj=n(EeztoUtOx69{C|@=N z+OoD-T~;EqI!zEV(V6DEbU-X6ntAV}r<=9ye=LLtz!hIK4||n55=k zO}LSeL`{fR1n+r2z}S&36LymPytu-rr8TW(dlW)+jN8D{EwO`yBXbDuUu&-bSCr3}LUlg=_vf6y1|tTX5Cb*gZgOP=ygeKtmnr$&7JIY{J1+l#u#z z7Gv9dekFd#^Z|O+9iAjDrU7MdKgfZ@J9%{7CbYq9Cr4G#Qc~7s^c$B87nZV?f0Y8$ z2Ve+<>*H$&<0tPIxE5yA4-N1K+V70_tJ=@G&E@ug@Y|F<>KW4{{HUm;P3D(CHl7Af0`Q5 z&mI?o1v@AqF83e)WeLSrz|+Are@|V>yG(qXPlZBgv#(U#XbS&4+oP0VT1QE!P``=T zurnR|HRq;-C!g&ZNh>BQdn)@aFIi6uV^YDGLW9hxG2Q7&BEEB>9dl@cFf3kc*}J%E zO?fML{xkezMMes`x#`*cc_dLxg*gu2Vj@Xph|8wmQItCU+_3b1(uEX5e?5ML^4JJR zbaiP|{rP^PCBX^^Znb`%a{H6d zV!BVaYH$NA+HLE(Z4Y2s{8oK)k;J zNrZt$LnOWKYDW6hf9t9Mq$Nmq_gMtLE$%@9;nHONUpmoKaIdGJ7y6{DaR1DraHFep zd37B%jrQarIqjVSOsxs5!sh*P>h569_*YJlvAO%WB#2xRK0sbO0ywiPO5t4`vo^tt z^}^e>%qlj?(A=)2qg;q!ep8ePm0cWPj%$9!ycqARXExB{e`#Vkd*94~vaU?a2=B%2bQ%;7W3BrBRd0{2;`q@Ark{4jkQ4bbP^e#9-bA|LYkYuO~%0 z>AFsPn55$e`UGu?r3qN?O7WAB%Q-MsnDkThhH>wgctE4e6ZaL9vB^nET7SJj2^yoK zq_qPn)7(P5bM|KZE9M{N#wFGSLp(1#HLM0i)K zlVH9{e`@i(G`J=J==6+6O40{B5=OX>LN`KZZJrdmblKCDZkCEju=;3>@)>+ft6-N(9sQ0%=~F$O~yNR+i>;kWV?}dw$MB z8O=*AKbEo!kW{PsG3eT*lo{aQVUtIHb=1JF?)Sa?a{rW;?(>b%i2S5=fVwmLyS1w0 z&$=&iTnJB5%Rx^tyqf?&K)}Bg#DxU2f(a=1O&RAkl>>gqH9%IaDOA)3pB4cGgfqQH zfAV2-Q2@CwF7V_RxfYfEQ2M)(o&$)*$&C zx`_iKCswBWt)MEPOQJv$g{z(&LkKx!fPW0v zK)`@iJfAk&!b-XYj=0<5=1^KY7s8lcp*B?z}X@TFc3R*RG3dbFMU@4Tw-A{BGnw$~wNf8&3` zF@7~-dcmOJ#m zzM_h2iZ(XJe3@+mlKZlR-sVy0C!J-)7*X;0!KU&N2W@;aCF+1UON5P5ykAW?zFeipIVmR8xx7uwi3zgqbd?k|x zTB@Z#&wmgV#jymxj+IWwCG^b#4Qn>dm&PAKQl6^Be6vyH7UUQnG%v!Cf8HLvYlxpQ z2|zP|C0GYa-bkdcY0*lztg1YqF??kEy8>84S|BYw{=#Hjen2!&#}V{Rb$&p~h}Aq^5x z^PBh04X2`@)4kw8-LKYhv@q|GIZppTJ(R}ak8VOB1xja;MtLMhiqI< zUc>8!v*pqK@ipYPA<44xMB+kd!(<3nL2Y&foYw1lmwY*&Q7Sm$etK8{j9p~TQql_q zXj28A414T&@c9}Be?Q_Q(;97&_dvw!BG69z@v>xnK!hHl&(wD=^m7ggALMD%gUwz; zGT=>Kia`|zbWXG9wyQZqM2``Gw8p8GeoT&L#-bf zjEL=$EJf73p+zY?J!To#Vy3^kfeZ|dFtY7z+>y6U<~>F;e+GQ7CxCE&<~-SWJ#TCy zrw~WU2=gPLCHLC(`2ooOEcGP|(8`f>R!+g%68^HDP|sp^CLB3EN12DPQ$l-}#eh(k z5DP&%j;OESg$q(| z&CNM))J4vjf8T-=97bILR0OK}n2fcNI~K<;R0;YRp6CZsu zdpgu>%&n}!0~P%-UyRvVUHg9CH&*~Zuu`UU9C8Lvx%%r)<)6B5=5r*blz8;U^OB3A za$Cj=ue2x5=GHm!ST@S@T9hwmS{{wv-WCl)G2CNie@5bYO{v8`L3OM_I8=-(xzwpF z@z`gBLZs~aoTIY~rY>qu-pfl;U91*fgZiiJIWPNW&v(9;kU^()(xm5uRfnNi_(9u# zXBDlWB%7}iDrG~*@s#zT47hSyjUq#JUA#_c!W(rmY}Sm^tYG3)I{ElZ$UgAN?K)!} zU1P-ze;YsE70?*8PW=|h1FKGc4u#o#08V~NJBY;5lP`;m_(aRCB@65-v1PDy-;u}y zLpx1|?3b(~5s!T~ul>B#<0+<7GWVg7CI{=8@7-^?88rxQ4uWcEQvWGtbIWg6n_YO{ zSicQ|&40rX+};-?1vNRQ)VPJgwCTZ{)t2BwEJ$%T9`#&~ zWErW^*pF%2yv3Q!E-LhkGTUAQ@inBs<)y86&lK1_F3 zN!=i$pG6JA?If7X7OIG-MQq;Lo0m(3675LDAV8N3mdhJ5zNLfAOis`Z?lTQj>2cO6 zi}y-O%qcIO3`R$qZ*6$+Seu%H>;D}oqizmCcGPB5s`&u3#w|P|i&j7(UpqQOfBNCg z$h)dk0t=%aDZZDwg0`E`!z#n=S`pX=LZM}`mZUh)8{JJ_P1I__L^gD+JXo$T=$(6& z(Ct8fN;L*?MOPrFsRJko)b&{~rO^t7prv5JBKwMi3eL|2M*vWgt;qjAkB?@$hEeWK z(gOWhwxlx)-=L0%5A+B}(lrche_xI6)vkJU;4{k9h&^8=9Z)nX!l9M)H8;rie4T3d>YuLP|N!- zB3)vw_C;4s1VN#*2kaT9w8CTTAa9U$|KqXLtd8P(+D%-m#*6@Of8+3@uY&v+iVOjh z*2os_G^Ja-i+p^SU3|xoN&WZF!ieua*ySdKgS3eHAk`MC@JO<2uZmgu_Q6R{@|P$I z%vIPwE+lEDnfmVO@PjM4q>$+kLsqzGbY}frUD(BE2z6e84bvZil??ig|7yr84)tC# zAj%7=Q1^wTep5GQe|NsBK$vWdX-~V(jj8=nMAVyvQ!o}Kp<&RLO}mCw_79uDwjrnX z_`Ra8c$v$&;0H^kZfyUmHPsmp20Q8kn}~prkPtrk#DewGU5K3mG_?>VI4k@u!7i}x z&X20u#G=1NaqO`*0)p@O$f>oWa32(ZF?^$y=QaaqgnzT?fA*%E6bXm}MqGg zL#ud@#mT*r7KuQ!4*pY2s`f#eQfvDZRH5Etw0dZIx@B+cKhksHe|03PeBq1nXLk*K zYK(=Y)@&J=hl`p>SfpicLI>FB-Sk!_vgp)HTQq&1za~EPF`7v1r-w#K za>t!lumBt}n#!z>47r!>cZ7LZxZoX_%oO1M2A>OBxfaoY&b!d~=_tz!E_JVd2+_q^ zmiLfESKngV=mxYHz3>{n0{C!$-@&dOF(pKyz5vKbf3%!rYiKIlVP8bw>(k#%q23$J zV9V}lf4-bZELGuCyAr|a{^1#Y2k6nJJ6*FR0D|hkZf0btR|Dwv5nn8LUC`k4$gP0c z0g!sQornMB8UpDu4zo7=fO8tM`B&2Hy6n2GvtLXT;-9X(Ohf6u;dL>cagn5Jgb8!;&ONb9K_hMeIu$Og{fJMD3}W0-oV9I7YvXG=PyfX zkGNa;4vwZ{fb#YanSF56`W;I@0;Z8v5&0^%G!TqovN!Qj$By&(E$LV4vr69m^EyB7 ze?=RG@vo~PztB~43F=zfwobYfAyp#dTT$L9xCEwrd1Jcua|F9Fy zcy)$hi@@8999hk_$0V9>T@3-&dEHn8DCX$|MnKvLp0!^m8VkHgw z_@R54(m`e73n(<1{?URexO;UTfAX>%6IDsA|LAjp_G!K6nQwGnrTaP}DDCYf`Umf* zslFVf3cR25)QWg+G?tg#jA|4f(N7FTrPjBxcwIo-?;D$x!fmrk4o(Z#cSRH|h*5AR z%LNpss#@n)73Qdx<7jB_V7zaz8vkqV_u(d0)VffC#&{U+j4s9H;x0iuf9EMdlg{aG zm4R0+Ak*%*CLT(HlU0Aj>*VhhHP2LoQ{8;Xx`b*SgDBBEv@|dw;kZ%!Z^j$yxM6n_ zeXgA0#Wve+F3-Ib!g-$~jtS+ImBN`@k$Szt)GUkA%K1_7sRnTZ8AU=&1w8}wuK-!Rv$xRv6(?R5?dhRyhS8UIOcfi%-!4CHYnWvEwXcJcu7f~@0Qv z%jzd>U#Q+#42E%DS7Hjbnfh^@zD;p08crJO20l_nzRTldf5yVf|AZ9{ra_qR=>U>4 zy!MPH^{);PG)MRAEsts zu(_V2Clhr5e??KObRMdX5EV{z!$2IyiP!FVs#Ykk6B(Y97?&ZbnSph(H-oXcu71R1 z!iPXz9g#KMuNqg}9AJw;gFqz{ACA`@(F$*kUoAlt?xiq~B#(Ni#c=}NvB_O};LO&k zPc7gfWUUFuKBPmL>jHh<%x578uEAUGGL4ymxC{8Of4C+epMvtdY6haYP~EjV@wpK8 zz02f}9j)9fd;mc!eAD2}5T$3!3otDZ2%YrF?N zc@$`=vXv2vh=XT$#iez(2{#<$`h$du#yXz@k%+jGbCet-iaxVI{ob=-@r2>do|tDm z7bq`SOga8lYP{nfX$!=NHv+gv!PTL_q>Plxe-z_*{XM(_;KBe6zk}&fXt!F5^l6Gy zd8Ak;^q+e(+$qv^J>3hi$UB6f<&ps=mK9Kc=wuo^8Eh$MTwSr+J{<*f<-#sb5_j0&V0aZs zYxPp><2xq~hSc#Xv>;sIhE^+x%tliuD-i0My3BL;7B_s9RcF)ASREimS22TPf6}DP zgY$ftN6^YT89!JceBX+j5|G#Gk>KGxf#%`4Z#AmkY)hUy%f;ae70` zM!A;4ux|k!@{+xG_Y(zZ+o%mA7mrgh=gz>T1Vb=;Hn6IAY>7LnDosU^f1Dt-I(r@A zTI5&GPHugK@P`mR!!;6RN&}e%Ep>tqc*g^M38}{r-m#b?r=&=uWG0M+Qb%9sX%Qo2 z+5s7mo#N)*t_~P+Ok8&3wW$c6q9Ndk4Yu?4C16VBZ9|)uR>m1S4Q8e0n6=vwp}))O zlbI<3s{%SI7*n%7D4SfSf9f@x5@K=yqkbCtWKvJ!E5tI(P2N{Gb0q5n`E90!q6sZ8yLJ)7b@VZv|aGq#732xOY)h zx>z3=i@UgGj&i?1Y`+Z&h^+Qt~C-3fj$_@Y!!5E8n8gbKJ$(e)g;3^lX(&vp>e2b`Q>%*qIzrw ztFuxZ2GBgNLSSw^Vkt<#m3+mL>__Y@5Hy-g525M&vQDpte?7@68>oNU8m5cq4IWnL zR~|l-Xt;-?XfEF?RW2gR?@!dnqkzuOSFhM;eI0FLH4Op1SoV8fWq{CN4?vW7M)Una zWlP`WWCz+GF|`tAs-wAW-p`G*wMzjdT~s4zl5lMlMME~os^(r_DIB45dpLj_hMfUV z4DAh9(}>U~e}b2%Ea54kn}B2#0>xk_NA>dCNlva+pg&Mte)jMG$(u{uVb>N>R+TqQ zErQQ#MTB2f`dbGkz`1Q^d%RjI8D{@rCq=}rEZ!P1wbW2b{i7@{N2a`>SmZJX1@4L2AHn{4XB zR3AksJHSs;O0B7o3Xr3Rh~U~Md`Joe-~0*qj5Bc6Gb(>t9e?R0fr0aiWn3)OGQkTv zdWR$7!dTJ!HX@zL7;S}w&f(oG!(m>V#>tVQ#hGvR7|)xBio^5bSSHQpsbi7onA%)4 zTe}~Ve-*JCNDPsg(mu4qct&F7(8Oa78iG%N;`!R*4GIp>(w-OMXw2Lj@LX(w9XyU zK-k#lPiq3}+W^bj-;UUICq1||%$2fL@AtF;7a6KtYH(t?6|%#3^q`z8TG*z7nFsUP z9GVAhGh4e&-QCFjP1?iAM1ZBU<`HSfGg%o6rQfhi`Ce&W#K3F3p^j?h8CpDX!vAg} zf3cf^qv~<+>6s)NTL(uzFLD1FJBHg%ORk5dDNt^f8+ck zA=`~zui3YY>jDIDnKZT|*dKWcP^QXDi;Lbe5;12nCU$>L&`PW@Opo;1*qN*hcZZ<* z7iN3_ez%lo-M4`H;5dy`Wgc1Jl;`6Yf0Orp%IOYlR)kO;j*#9lg}{I;VuvzQ|2|VX zKF#kFsV}50Xw@cE4bljdLoHWK0~3|lB;nTSS#*C5s^AE95>W~&h$L0etbVJh+U2yt zO2nvkK}kK*CJlyD`n!O0?mkX;o)KkC$)qNVfF`kmS!i#`^Be&HHL4k>W`cjbfBdIp zTvPR+tLfO_bAnq_bBmr3!|+VRMET2}5Hw*}O0(adfqYwY4lysHgU|g9HyxIR)effF zs?_Y~`-h&;($RkLMKgn!-j}p;SMgtU-tNUe{#8{B;BwlV_3FBVv$U3zq)2rEX+EmSbt>Ok{2r0 zaG5niRKe>LqtO^O%6A@}lT>YuL=NLmfAj^dm?;r2 zzOX>ZE9PiF*?7b>c@+hl*~|6%DsNmAj!(kV-R{rgtm+1bAvgY}Qkftyp46&o(t2un zf0;f&#moaxY9HFa^Z&4Xgq7%W6@Zz`y^(0Wnk@9j9ToDr&Rp#*%bWpbtj3M{%JtLS zH)b{ud0q_6ZNeUbC1pF7Jjg|3hAj4hIU@kGXiElQO2nIZdlxaJbce%v*r~Z z2XTVj!7=2cSbQmi59B1u_O!<(_dNNq=ST7bkyV`kcWd$-(Spyye~1A5H?}1~$| zbHO|J^B@L!A^_BzWHJaUaGNSzmZ4T(OA$)u2HQ`7MBLTg4kOl~AR4jwd~{)Y&<32> zu$Uh19+fu;wTvPQxAfZUI(cdi6IWQG1FylLWAQ14?G^9@8Xo`0Qzpfq(sYfe;4W>?>}aik;)8Uj=l^@Y_~OR`Q>nj-D@viP#vtepRoEJHd0Hh zH@99FE#a~qSEMjXW1ygvGA0|6O$@@SU=rBjM{;{{0r*mTKLA_jvK>fxDOgF**oNT2 z5)td1wq}m)Dy#@{-4CftqGy-yc@pytLyhVM0A_*dK939Vf5|{9ZA1=63%EhOH3^uI z@@ufc_zZp*dpc{&Xb>9RteO}^P5)wzFNS4uR^I_X{ghac{oB~D#7|`<+ka24^aYBF zW!t^Y#WmXc($~p&^UWHUyws>m)(V03QPe83Nl*a-)dYtX9`Y4dE>f1Q{71|$nxkp{NZUJ4N^n5K{DO}Srj;h+|r^6yERsvA}W}LYDFH~=O zOo+y*XAC0q0`|tw*fnLhZLF2^cRqN(Z32t52iLBMe@eO04yvUgx`bP6X=kYyPtDU% zj1DO(ns3f(!R^$~H@;(wnc%lNkU$zBjp%yn_$EZJ-pUoC(;$Bhe#UXmKtSDE5DkabI<>qY*p=`~tje55wsO2X82+*ht8d81&1b7{O70CqJ*ZzXg53Ot?%2)gl;xmes}G}FtLE*! z+$+Q93?p*Uc+KI)SW8f4o*nt)spE+#Tj3C@0m<$>7OWqk6K$-@il}@=nzr<-iAr%! zax#2uSbyvl%+Y7JY(m(@(GAFyA^V$5z^X-E!Hbd9TI0?6zE)C5m^Gz3(WTcuTu>lzYRVVnR9n9e1FOd&{|=f07Jc+xR}_&vWMl$Mndg) z9>fO2(AIU$S!ka(=qg+hcnl!hbum5HMcRH0q%~1c<$*1twdm*(K}!0N53lv#+~pn5 z;t6)$_~XH>q?e1@6aL1ICq4FGgf5(9W~$IED|z>q(DsPE?YVsyi2|%Yz|Ze+zh?Hv z@_&EfKhf%42tnbg-xhb%myRKs zX?CR8RPD|X#Z2{x-Ul4e5SpaZ$-?3hf;I0%>VjEH&n#P*0o!3=M-DSZ0RRDZbkjSS z?XiuEch4EmZh80)4e=xzwSbscnN9{~dQZhSGJdVR$So|wWL2SfeG^}(3 z-~bfuY42Z~P*Ai>9GBO87jXu)cW`)d23-^?HhhdE zHN8cTNR&N^#c*ETrPd0e%9tcq48xaK zgSz$zecdXMrALs^Nx_@{Jp_fiRt3g2i>{!jVOQ(_A}9yi;}&@ShN#`i=9h}?H%kO= z$a6_y_4=gYIj`ZwbX)$9dvrv;IDh$kzAU#a{7ES-(|iMm7(ffG$g;;HaiykjXZ2sJ zgjZ?(*vdFpDIV&d%mHSt0<(4QrAh<`x%;pFW>ctBA6tBmb2a?U&k^gXCp~mlF z@{8~3bO3i%=_>LhJsvQG2!E)aZRmV$;x2242#yf3R|?XjCGeEfip{o_CKn!{P8haM zyLSp1oHjt4u*zlg6CaXy$XTTgzl15JY@UP0t+#fkvMXfiCr40Hih9vy0qt35mR9j^ zoK$2>s6_Y`gmncSL3zOYK-|D0hP`R-t3arzt7NU)TMBm#!GdP_V}Ax|hm!M5XI=8U zQH0!Y!^fVcGzxf=cgx>n3f!K1JF0V~DU%e^Topy501jUlr*w_t%Edsi$|Q@5VYV1L zE9NjD@~G(dHyn-c2Y1Qnj2V>HShozw5&(nlFqk?u7 zdmk^Yf3hpkpDgn1)p;dgXJ=Jz@Ehlv22m`w|F$s2CD4umi4IEt$X~7N(;+t~hxAX= z?)s$E-<~uX(|`B*m7w(ao(e04Mt6VmEMGSw`h z!OTY|5we>Rd;PRY28io#x09LMxjH3p^+hI=tBEbs1al8SC9u+`hWo3faZh+h^#JNx zmHtv;j%FimfKr@RWl?{{*nDZn@@c!fN#wd!B|QcFDoS0+ z$=LY$);aeURK!EGodZgrE`$!b0vb^x4rW#k9>p`bkbEPdOqM@`>+E&?^MJEJ&3|Kx zq>NI6JAZ6s+NS+$^pN7N8_E?3q~EXd`Stgoy{#ky*s!YXsSOU;Eh7GeDwsdx+!ouh zh^Nwvm7B)b?9_7|=!INx@fCuam{5^)8*87G=5v58Na%t~x#Dx26AW0Gp>D z*$4H5*lg9pI%p7rV9z15S{nF5$zvtYwn`;mm3f2Yf^c`VUCD1aM zja{4^lQb6w;s8lNw!hw3@Ru9waRk-$y0QAB8jGezp8bBjsB93xY=OjCSlk8pzq&p7XLKP&DAh<3G{rI604=2)*as~sBT zJIsM50?*||g*yxkVoFHvI^>D(2VO|qo%eV)o4xm)KqwLjMgc~SeMt9Ra$t>Zh zz#tc&3C~>W;q2WIbGeQO8Vn>7_+#TBl#nbqsJnrs8WOEqR{q4j-hV?0c~9=J zHcO9twh;B7+m)#?V!@UT8?~787h0Q;k|51WV2Dy=vJz3k#<+(!JNbxm#wnL|fB6UH ztJec_X;zYctSAQx3UPpU&XbBos#_v!$AkEqF<2?7ma<|0Q*}*Zc~!}~p54%A+=Zx@ zH!i`)2V{#9*7EjBktPY2t$h9{*>P%(|I zV?GMzgjN1B-YD;nf9AOxT8ifrHIx&EiP%HeZAc1o)g&||Z+Uh9Cx84CGxu7{FpJrP z|K_N2ECiG&ugb%lnA;FlQrfvPLU>2cWthuDvQv z&dgbU-M9Si-44#B*s~<>-yCbPuNif%!%k@ina{Xl&V6mDH_A&v#MJ#c>9&!CBU*sI z06$hiJ9-=p+Soj$>4OZD+wL#1_;6@)>dc|?`zEh0KonxU7JpwAc6rRJ`2b=ZR@}QH zIV|+D)iT_Q+zMp6-@hZ$xt5*44DgF@sz7~5+Ke+XRyVo{ z2}r{BLleg$VJl;L9`eAfw?~982!7usuf~)LM)c+BT;F?iC`DqJ)XVQeJ2yqU?x8J$ zdVqD&abm7VxPM*+i(EJ^Wp?s=*}~a`L23_9LlTz5k1qd#ox^)&xmnbl^rc~kf$L!A zYzl@<;s7{hj+~Rw?J~e*cjwh!PvY3cWFo768}*yihp(h<9dbSNtiw`LE#Wg&v%M?{`VYld+FMWimR@<=&nrw*AHJ z0fPZ6ASQ4cq*jI4?KF6_GcRC-t9~HJK=Pa|b@UP66ysD?b2TiXE&X`Rxg+VZeO)m` zTx(11EPuvXtE688ug=m)(O>V41}3deL_`eeQj8rck(!*A^0`BHkuq2wGJ!z|T z1kZnR0(JC={2BlP$ldoDQ9j6&uJK*C$R9TorhlQ8?g%1lr?zPNYjemr%0?GdValYM z76G_p&9&+h8)@_j0R5S3MagVQ#RYlV?vt^-8g7HSB|r9Lz`7Jgm+7vs1~`$01R^*% z_J7&Hi!MjcMczK)I(mJ(4n@-l%b;s9KZs#YXM-$gE2VJm&Q3_{b}i_8flc1tuo2Z>JiyX5}0V$1MTx1rYR-^z;eEqU*nX9q>kLl~xmJ#o4HC&4n?^^L zLgom*GF~9VBhdv<819`u_cQnjOEkzRwI>66YPl4^2GvCB;j~rrejMlD`!YWNZ-1`4 zOu9y)Y!6anyiO5%@M-JeIlS{1c)XZ+y+{QbG1`>*1hipKQ{LJ@i>FmQxeeIiUy!&o z;gBtUV3@)@I#5*=(37F@W3r7xev78^z5EbEyB;)eoI6p+I1?yeb=gq8Qn@U2Lwb~d zTW<#G0Z8o7f6F$!u;?D3xR|(*%zx=NYf0(=7>4+jAF7!(m-QX`eRi}h8Tj@hFDqV= zNdFF*&co1K#1Ri1T8`$kS*W2T@GyvwT(7WyZr2vO0tzKJ9s9`^bukNK3^<5PjN|od zqO5n1v=s?Xp>|yInmj`F>@-Tag-H%3smtVHDr63Rm^ zj;*>%+D>|cR%jfmw>%i9w;|>wT682%);UHL;lmF%QeiLIZyl^!{0ZKQI`6kQc|#TG zxPXnZ%Azr$CyTz=281H2BYy@oLZ*$Jq@Y`w$T4&Zi+Sv!f5t`rt(6El;H<1hGUFd< zqB_;Z^@C&WBOKD~L$?EM2wsYtH)go@qEI&-@-Pl^T<-8%EAA%hV8^Nul}z%63DJY< z!wOW1r&1fWm6cYbS^*#H)!i3wD;sns37Pl+FUP*k!UB-^t*BzE<$q>PG5x5`>-zPE zWQ_@qWXqn#izyM7wvnlzPkGoNV6-UVsT{}u%YpBO zFlg0oINZ#fe58=NZiInRsT2k2X4KHKwrn7_q<;I5+#^9G;t~eGHXNZmK<|;=+5%BJ z8_j%aM1P!6fh)XsGJlRJmO_GCPC=!Bpi#fB0Yu zR%}UHcytgMYYt+anO_z@u*yl)QrKLR_Pflc?_M}DbqvsG zv1jvNlIgs4j(?GY>BKfqVPAWpxE#QWu2k_jzJLs#X+=)bNKMt=)C4es7=Go&aKSY++Gg-fpSW(m@VaxeM;iD-zVhM@q_Hm zz#-X9&?e*Ij^)UtdvusNV(r9Wb@3zcCR1m;>Vp81V}GPb3uVB~wPpZ0K*qmDxt+t} zBxO8?BI>P;ef5J~+G65la8F@Adn5@^l)K=V0{+m%Da~;A<%#?Yhf6{kw`{NJOQXT( zqKf~QBQv;gCEbe9EI5GNegXUv@nVOYfZ&#*`ADEF|I~)<2U3OvIi-1hzhkDZgI5^i zV@iTKUVnOrCNNi_J+0CJW zsPUG0=dV{5m!IB$i z>3_>?&{~IgXWK(_lQXkpQ9f7=7fae`7yz2UMPIWlh^oelbX#)@H9DyhuQ;pH%>lmn zT8UUu>I5=)K)x}GI#UJhK^nub+TCiWm`=Lp61q0B4mdB1p*y-A74b)aWfr|QV>PA7 zSgykmdsJfi{l!j(L&B=O7At+G(*bQRoPT%`f+hG#H$9chGbnh{ zn(pLN@EXlm%5E2ku+F>LmbW$7Wi1I|6{8agudRZ#|f6vSFm>&@Z z7wtsJ2o>6Z842{gOmLo0U;s5h%74GM@Cjn}Xj2S8`^1MSymG0rsN#!A4u@WdA|4?t zQ*Q|a2LAej6I&M~Q=S_aUCC!z_So8%vT8DUsoOZiHWCOri zJ%{|kE5Cn(bl35{|LuIWFhODwz={8>?W1gBKDd((*Pba2`5C0<$Zdt&UVkkal(p;a z3-f{*kbruAUR+RKH4i1YAVkCfM_L<;P@<35a^n76z%Z3N(~y|eF7qEkk%vkdC`dUa zI`{U1J28VY9osXxI{~;f><|6{%g@Vuix;K&^S1R z-mAr(qT{dM#*0fDupX^x2!A5H!`B3;ub7S(sgJ~b?oakx)%Oah9-fWnLU}mMrMB-& z&`mtSdYna|NKa((3q|%cnbF&$UlaKBILg+=xjT`@3a~lgV5+ED?gD9Y+u^j!lN@;3 zC;?6(fs;wnBU~sOFt1t78qLx`i~^Gz{8Hlj2~_wNe5AgOzZOD6aDRRJ;<@X744G&f z@>!+B#L>Hi6}y~(%+eU7)nWSF>(7DP7D3qg@HG?r3^BSO9a=$XF?b5pZ~v3wgdnL`Cx! z8qjB9m<~X5VM|8ikq+B(NmK=Ub|R5^A81b1zzz%#CR|KJ&s4}8=wEo9w>f>dT{SDKOTB!eS zo`QvXp}+_|^N+)1-r!pmPFuR^{agCQDW-RJFZo;j`G3}m{`v<%cfX2xNlwWC)z!I6 z_52(R44 zd7XFTWjuz^B7==P%~+Vmvk?R+`MFLVii5@NdBa;ahmCIxi$o+0Z>E8&-sW^8#=If@ z%22NIHh-b`G6o|o79>sDa6kU{<=A-xS}ro6B$$xego|wWh7l^MUKio73MVChq_IVs zs-SqtU9AF~U8j|X!Y>a`%-|cK=7UqkbrleQQ|2On6yQW>EzBzoYxf5JPa7Kn^^KX) zT#Z2~SMZu)YpG^jqC%P@JWQhtTk7lAh;dmV9Dm~DSi1Z>uls)M-l+e~htQ2m+NQ|* zpDm2kM%{HfAAl_H@JP+8hfva&v45chI-EYOv9oj0pA|Dtfe!*S#jb@6bNnfg zlko66FMBC|0d!wFH&vN2&+Hisuns!W6}?_Hd$A3Zw{a0J7yZMakxP_v&rfZt$u(R1#xskzP%P8v%lZhM z@jJmWdpd4nGQGNFj$Vw9E5C~#N`J#Ke+)2|FhHaFuK{ozdikY8%f9BZ^%djC|1Nw< zqbgSY4jaBqBxA2%Dylk~=oaiNj|(SVK1=pGAZ{rlBPEvk)O9w(;B0*&ma-swh?>!0 z+&3&L;bRrh9=q~R`vB)*7Gb~MNUR6sCJIfE6P5ET*vU8?ppI8_stwI{w0|yEjoT|Z zV!y{*Qd4%ZNxnWk*jeVUaKzz zQ&~>E|E9y|o=*eM@SVvLoDVOg2p8`$bBqV@39plFftMK60-3kA)B;!nmlM|lmA9?e z0!IS3`Pl*#0k;y{0@MMw>)Zk#0k;p{0?+}s1(0)_#%-r@pU0k=Km0*nE- z&gBAD0k;k<3x8CgnI03gC?*g#_x6$wdJ^{BB@&cp* ze`B8UJsK7pajy0t?&xnrh$>IIS1R~xsc4M^&J?j5VQuw}Jb=>TIF$R07$r@Mvy!{) z_jdyRM%Y>9F>~fTS+T%X@YVci7D@EmxUJtqYM&y|TvzEw`39+FuKmvGyO42S+X+=Z z5J;*;U*Akl06jp$zf#h9~h275+l6u|AE<5GFH#F@!$M3F_)`12ZC>TZt8*0_bGoQO{u3&@$91?ZG=(>pg$*Pi(WZ|U{xeB10^8pGpUHG+pSf9DaV!tPaNUnKx} zJMuXQQuJ_}Zfjm14}etFtJFGBd$WZ9)=3%t)D56wHM(`%&n&>PZ+28qYXj_sPvDx4 zomYs^6Nhf{Re|y!G$hTQJ;mb=j;eWJKT|Abxp_FeGsb!WsW`e#P&MRrs1Y!)p20xCy zUcRcItB2PMe_yc8iEZXx4bk>$wbSqZ{P~$D-L1K`Y$`W7zX&&&yA@c5lMG9vGMMCLY zb6!lXe^YuH#2xKxhf>Q%cnBX5MwjYe`-Zfj@bC7@myWrA4eP-6EHJ{fU0K+Y8ZYyb z3O%cr*F*SSQS{XUV+=Z&>v3aootq2u$!B(B)f6L>lG_Y6okgSPkVYJ8S7o+ zBLr-}&|*W-~^Fe^zKOnKUeM;L9HRvPeL<>Uzh&!+sQZ6QLUdk%vY?-?8H97u2q!|)KZ z2@FqyG~K}Bz1xkVdx-QwRHW7is+&Wsi*Nrcwd`d}%?ol~Fbx#gSyGeFG0 zfB&2=*c#EBh%!hO*LUuU;|5W6l}PzXoE$Qvs8yXD{~3F6#RB#g1oQJaW@%?4@7um=ZGX$q3}f_pKWjmNyh+Ew>mLf53pB zrXx(;c4VeN&l=o~tRUyBA2z=IYk-dJ*zs4igo(0kYVt?9l6*UG+z26+c@~yADUdqd zMQXvQR_}_Ugc@jbYhHbhVLh1dWoF6~aJ=25M+6=KViz0-^gd2j^ULAoO?%SboM9cF zvtRUy%rL$U++~MxA(;OjsYI#wf0XKBx72u#pN9bXsUhkEC%mwezehAok^n~c9d<7q3qc`H}LvE&6$_Xpk`^FnVfd6o)MeuG}jNP z`~m|KmMGcE4KOaiW2&(Xc0TYkqaV!pBC6#{1`iIJY1Y3i@3p-*#LzgTe<1=8CyDuK zuZ>d`)&n~@r>lNOG+$YUt5Oc7OAV~KAk+z7Op5}qIfHVFy9(j$Yr$$V2jt2JhEDu~ zJKx!XLjnczDi1i!=S*#Ze`Ao%yIVNE@m@QM1Cx;XRvY54wJ(ti7Hy_OHw56`)=pgh zwb4l0q^`Aa;l2#&Dk!+Q8ZMb*O<$hWAMQCZ7AjmHtK5hZ6h!uEs;JlX*fbqL|0yji6+W2*fpEgI)D+INTD(ZQe_1?c_n9U)?2)HQ zbOmzLkrf$o%?-=-RA@UKuU|Xeuf@%FV18h;&a{}{3_q3%_}H|_Q7^*z3hYiRCh#^3 ziWandtN-on@yjI}VnHstdexrBYZOxeEkM%03*XMIsTA?4?-B6xEJ)*D@C%|D7xL0(7LM4(S_&8aNFtPv%BctOi335&G96?YLAXO) zk$bC`t}^yeCc5uSjdns>abQH40A3@<6b%%=yFW*5fRq)wzNu3ejE3- zEt1y-z@*q=rESLR7tRhtwF>c?WkXo%Elv*c8D=9}sfkrie-Dqu^ML@S+K`@rj&G(7S6cI||Mqx%~Av82)6Qe*lGf^Ka)-*7g z{SoQ!L}^a|u4M0M1gRdyt_u|A{tdb&jZ z-eOp=ZJOtQGXwq_yj=cUg!+p(^6-aH>6gZLi>fru3h2;`?oHM+xR^tX-cT1}LlWN% zpn!ryf8Pbq6fh2ajo+y8H6-C2iO#nSeN}m?(7(q2-U3ZaQ%UP4QK<{CV%QlDN>~Dd zh%f0E>u!w9V?4Y|9>cPBB2qf$dYnV~4Kr(%MKz;3Uw4TpOZ}@M`dUKyIGItEpZq5W zd}J!`QCIxQSciJD+Z!U6SniLz+*n5!n%qg-f9^OsDVV`s$>B=dWlCq15=MO?jhNv` zhD7+7T{fCtP(MN3Ct8GpgVj$?d6$336s(U+!MQ=g-nS?W^*YW%e^mD2@;8Oi%}JFw z0{|;P)W2PO_n{=-qxX@1obLdzs2GMWQ4GfqC({Z6w%kMBaPBpC^0)wFikcqZs`yUE zfACBVorrU3Bm7mck8cxgjuw}aq4EQK@#Bmx!#_f|0V;hoVoP|k1te}Xq23xh3 zjnlXdgR5yUM&oh(P>Oo8Pr7y&tq%%0D`rNO)!-=6CN&aADbiOYjyZ`6Z!Yf?o9%1JiKJ-5P(HN z`zDPJb--IldTNlR#`L!ii?id;&Sy<0-+IC$b!~Z>P;@g8FaAZ+(7urb0}Cwt9Uck1 zuJzwuVM8nAOA2Phc90?fd+r1de?1t{Q+PfRa8?f!NJz@?1 z^7Uc4;}*E@6Y0SNKUoTDdgQ#fp6KI*!vYpkZxM)3my&i=UtyaAA zfpj1eb7V&hng?Z-C$kf}58lFiD3>q7PT&aoki%GGk#32>0at*le=yCvtDwy2VFPzb z*SeFJYCK3qQlE@!G`1aFfAkYPUV>f8w)h+y>Pt~46*z({TgisBz@+F0+&=l6f)2(( z1{M9Nx>;X0ySr^4CB!_tx=a8kK-j-qEEe!PH(ru6ZT)7St&TyEY$xuDgbBK>fs`|I zOKSXhTw)zG2a+MHC&BE;4S4TEL9~9RbfaUHz74Hy6pb>`-y%TC4FMn$zn;LxSAs=bF-KCDPwg-4TaywlVL@JiFmV2@%gdq-c=UJHbwf2e;IA0vK9lDDIsYGl;L9l!Fx6Lo9HQ1pn`N+I#O>sM%yV<$CnF! z0s>FrZh!?78`52gvbaKpNY>aB{>kLzzeYOjDGDEbY9T;3Csc9PV?h3`HII7hYe>^E zde51B1kFJn%qFPv|>nh)u5`7Bbzk|$>{ zyHXF-Obpp4f0FrG8TE>ehfk2d_3&b1NvRmM?rlLzNNLXSOe{~+UvId%;)59ic8uaO zOx$BmT|?NAm$Q}!&ucBbiYNSk)-cBv*VWU`o+Q%G73W7|1haIjGWqkzZhmw7Z|zqd zw1fpN`tgKZcP}+-Sf3&@D~5k}JOn*FRSPknfCXUqf3Pe4X{DX4$CEJtgNW;t-l6*g zuSo6@k}$l(%)%a$f8q5z6fxPX0UawZq3$-=u zXw&Ngf8h~=VciI7^-};^k;o6!{7}Mkg1~N)p_9?W3o48~*|z(OH~t{95-`p??dOEh z{}t+`K(Er#9+3xa*-u6s04G4$zcy7J_=|#oOun&KoXF3KVk|H$@I^0JT3S^gJme>y z&A{4t`D(QikLS19Nr7haGzOdtW=f#(wMmqDJ zd6=eNrlM=lg=FE`nRRa@uiM)N%py0+QXCUR9uK7?`UKgh13%x5wyQGolQpZFdY|mk ze?=tUz?tT9`QZ*LR_V*|{tbAaxJV0V*P#jm3Fx@ld+WWp#X<%W4ZNM$Z^&2Bx?>nKtdH~vWNgHK-9nPcFRD9 zF|Uo-M~MhZSr^_zybWcHvN1y{RUM*Re-;5I1%{X$KjRj~&dd>}JP@zoARwG7q7UV~%XXH!Fz(p&Cj}5Tmu6s}I4x5gb=`EVP@{|}2v3(MvX6DIdQW=#be>Pz4 zm(XZ*7&pyvzcq7CPN0X&K3!_ImaFOU)cQK*qpTN{LFkNC^W^|#AYS0c;4z0>w&-Th zuuj17bxCLX?$~ztQ47-o(_zSkze z#;bOGwO`w0peq0)K-|BM zZF<<~*$&3yk5HBFBLt{%nbARrfw1qk6~a}6)vKF4W&k`ZEfEftTZ z@yu*YLY$8F&Ou~Vbd8(LfAF6pXncu0QASL!t%J?fzIFA@p|}E53VSPojYbcT30b4) ze_029*v++>Ikjz4x#=OedSbJ>x`NuIcbbZZ$qpxk5(T1#N~7E0&Ii=zK(IKOn)u>L}>>xeg%$EJ$56X8sO&=6c}^DvBK4n=Fbf8tyBfff(G7Z1T} zYR$nwfa(BWt7dfosc76A>B?;9YW8E1BkH*aunoX?y&>svI}0L!OtwOA zXk+z&Btx9gUxWb_DcW@{1iSF$PKZ|kCqUT0&3aUNKMAeZ(WyJMHhgrKs(>rz&eJAv zE>l#Cx(bzYqh;d|f73|S@|EA;O}qEj1Vu$=jA#_MH%#RL@eB3?+zefUM8v6_z1vst zvj`cx$?re2xAJ;*8v;HJTTqmjaCvuP0+b}E;|fAmIzlb!tGn)5h~wrk}7 zNdN-g&Hb_H>uUd0g3-R&OvFGl4#&A6viI-JwF)B3oig~nK9nz;!%FGw=pZgEu>a1cGDhIE*N*dI)`NWLf62;RA={P9aCHv;JBp2~m@<}al=nZqT(kf2U)H-hf~BS750LGB5nimne?5iWqvVQUt$=^sq! zXA7NZSfbdkNjD(>dDOuzsKxC8!`{6?(v7TWH4nOkI4QZ)rrB!tQhsANU@U-|+{xza z@BXzne*@&ZW`#5-W%OOEujw`WFHIV#rM>*K9-)_TR%hR+H7LWd!VYwr2qVGUHQAr2F?CkIxsG2EU!uP#EX;f_(!C<+3>KsdY~vJrlo6?%x2R zw&Pq7K&0nJCAZ(viW|<{BZNh#gjK#Of6gixnC!*Gf42g*&r=VlN+v{GfzRJI>hMYq zi&s}OU)B#NyU>%5o*4cQqBKek-PmZiHp!JH$xU(W8OdX*4Yw9{RF@qQHb3#Qa5Y|d z)p8na%iZv#p8E#w0=^p`>@#8J@&=F@V9#OVNza8#?Vdibp8ys^7!s1XRgg}Fe?3ku zL>&+cV{$O+w3oUR>}<#LkYf%#tF*$E^nJg7opybYC~JK*+E>bP8mFh@N%UFkm*S?rm1CmO_yV*Z-ipbIsth?>}Ql`@eN$u)qo6b)SJO99Cr?Q*TbSi4TZV6~n2+5hQ+}vzpT@jlXq2 zAG_BF6mswD@y$saC8w86V1yis!}*<{*ues^Tp)-pJTtCr!c!G(n|{;)e<48LztM5) z8) zH*+Nnx>R|A>}(j=alo%SiewsXSR&?}21RGUlP{%k5zLth>Q zkTrLiX9sSwnOSb@#Fo91b-SgyqVzy|Ib}|NiQ$`7=4VpsJtDrQctiv8gWhXNhj;iT?Wjx!CTWl#aZCzpW<5 zctsOF)D*E$4TKWo5$?>rUnSuc1B*EKe=ibjSivBIr!lY z9%)iJi34I2oB(ike~y^%(m+I&=6^1s>sL{no1RNGcs1NYgm0VCCjSt4=AzS?0u(-y zasWFDkdUX5vwWZqi3+s`$uhAP!Yk+aZQRRypkf1=aySF}h;?t;S-61VEl>(ehm%|n zN+|&KqCoU1a0n}^XmHe(YP|9@hU{m?m_*gQdm3blJ{COveT>1xat$UTAMUqGwdFAY6+$Ee}r`C}*~ZV)=LmB#y6Z-%3$*5ga;{?7S(7 zHlE~*Ta2)e= zG0<8A=NrK<1*2q7XEBKZ{B6D>7~+$@uA^k~*gAK|e^aJg<)g7vKeMtJD*z!t-oN@) zoZlWK7IH&J!WnIAX1SvFxveppwWhGAlNW}SA$6EXIkOQ-`P8a{gC6f43}?Whd9J)| zC*LnD{JmOsC6zM?UbxcaJt_MG%Z0HncOUPW2lkG`D)2D@SdNZ$EwRQ|6<8uvZz#mh zoK(owe<`Av6h5Ew+QDtHx$sq#y7Lk@PM%_Y`*kLq&s5BOcygWw8Urt&d(_ZF&1m`n z89?U0Hsc-_8SDLT0;~vpYnCmt)2Z)ucRx_@B8D}Elor+4_N3|z~1xQw(V6N>DGrtA&j3!*jSmp z0z%l2&oo1y8vk1K(EczP{xx%sUUUV*FgZW-;0>5c3BW2)MAtdT726(JB>#8lGpe^l ze_rI0HaD76AXNA3{~g8_NbR?xRa&jk}vwbaJVv<^N>a43(CdNy&h9bVo~%5oEUQWNfY?P@Vuy{Nj=b-x4b%E&cR@W!CK29ia>jxsD@Et! zuzT_^xIE3NiwfG)RPZdb@{_i40G9BQFyvK2gar_B*Gt2ZhdeMcoFk+J1hr_wf1JPL zn(ISZrY3IN)it*Q^FxWqxjnddnO)7GPOeIgbK=04-Vu$7oK3KNMMVKBoq0xm5&ZM} z+#R-JoNxp|!6Z4o8T7uIg1nA%B`}YK6Zn#HwgNnN3k$N=SdrtLe+=ByCB0 z^BnFMgiw^>EH*LkhpF+3Ve2{@`#%62K;yp{J{ShGe`zX8Q2Uf+uZk}+{(NFWmXGp! z^0Sj*1B%Iq0oAEPv)T z-cZOngU$0ui|LaV|GwNL`v4h0=D+zM6PpN3OU&NjL!t}N2Zr`0G)e!Eu<=tDA~g#Z z-x!|mQF@YA_!+#x_`U+!5#@3#J5sjZVkP*QuPK(wUhZSNX{K>YPK0yx-B1hR1fPbr zL_;b3X}-9~_%xRT8P84s5j-=23x63_@h&O@74A%cFjI6z(<6iG;+brqIrPH(a(SVCwqr3`0t_lxg*i#D1I9q)>U&>#OY1QU(_wwW# z)3kj?0iE?5E*nBbUk=i}Uo4FED~}|uAE?E%XDONH5`wK*#$b(7g}}CtZ-3XJD z*QL|X(YX0C4BpdCC-BXUR!Ct0EkM%093ztdOvX<|z}$$#WT+mu(vXxyDa^&P^b(4`U22vF$Nz$6<{@031N$zlH{v1uZ4_ z&IOiftdPwGiad|->I01`m$ zzjk*PYoM9yk$>6=gl=)p7kVLXA8p0PeF(uu@pUN+ZH*xgY4|atqUjeD9J^yL*GLyG z=_?$x#uw-lfRpZ-C(pbtmg)p?@8M*#*1?+C2n-{l{ElNnUF}o4@v<$pIIVDXq zJ_SyhHWU{~t>UOxKR0%OKQ#**y(Ev1>n1W8YtpsU2@jjbP{I;$bSQ{^p$p?oXv=02 zXXS1HEkM%0#wV1m+7hPHrFh&o2qU(bGGH^FGH`e|-J=Yx5o4g5DnjID_RRc z3~z%hK!5VdOiwSEpoYfhMpXbIMsH!s)U4Q*&LFoD7 zt`6AIJb*lU;dfZrOzTOVVf6g)+?oNsXzK7g8-QjQ2E4&z>%ikv9G;^Cp>6-%XWdZx z)|r?J*-X`L^r4Eb8Gx);mt}Dag4LlvPp~1Hn}6$$j@gVIsw@R()(8>6ze>A-%*O!O zwo?IXPP3_B!lxD`vD@rjy0`iR6@lYRD$uaE+?z{`yt%Q6J#qS<@&xBLBN`0s8+8qW z!+XwPCJN_9(T;dXy&w(0OMashpmmMyH$gTw!JitgNAiJ<@D#No{rzZ)Z5bVbcF7FO zghV(=3ts$5@{L`7*31o8!8za4g%?=0cfiQ-mxCCca`BkDQx~tA=JyXK>aJXo+Y?uX?;G|Old98Q0dc5ak zU() zgJ*7)WfY!`IuSiay!MKGn~@bCdZ^nlfJOB}`vDa)uRLr-8+7nDSR&Jgs=(kau$YO5 z{DzD^!`fkS{YJC_U;l5mw-uWipW`$k{EvB{So)&PMI9UQH}o@h@OS%b4SxxvC<=!w zJKqg&aEOuEaimV=c~^(Gp{2BCI1^*=nw9W3p?K0kU#JrlWy0viU|<06F*^mjsBO0`k)B{y}_w zBKA&XV?+7&Y8=)Uiw1&*S${jOSoaleLkcr=@86~_`cS;Oh^CZTfO`hf8)3(pIW%0U z6^;>SbS4k0bh#dsZveL<-nDY@=9*6p(gV<-t0xi-8rcChA%dC{WzgO3SGmKJTLf^H zhLpx7zJs!sjdDKZbYu*@v@eJh?z*?m8dZYEQO-oMA6xvCu;u??cANH3I8n9&~b zkhcV0=2+1YPz~7GRXmpbsG*nmERG@l7-BY<&zoAJUC1PpO-BwEd|+XuNHUp=5gKYT zHSV4!+`Nzc8G?Z@7JuCupp-p*V=C1wTc?q>0a?7n^dHv(gK<0@p1YfczZz0rjNTZO&btbeicUQOVOH6#E;Bw_n1 zU{}d`USiDn^HIpsCO3MG5=JKfC!V%EblvYrsf~Nt^iP@c-wtZxn5?1;m)#DBT!6){ z`v1`>La7j4OMihcp#kAS`hTr7vbsxWge>wGWnp`=_NVQ|@e@O@D~Gh@y_GWlvbWR#=spD@C=G zVgpomw2z7NPp8ht*it!uJ>m++Z@UPY`=xht4+&w=*#JLgY5r+yZ)AL6CE9$IS!hwD5U*OAs4I5Y2FVr`(Kd5*0VrA-OgU?xB8gM22Z9c3 zlChIXKUy^lG*9AWOI+~pQY5Tmk zve~7t(<1fO&L`o*oQF^~!Ke0nIRXyT$bxw&G=HR)i*jj{HWFS2+7|$nnN;#NS?B{) zPn0NpJ@GpuT&~JZ0WM^Q*FK|Q2ZFcB>%41BA%e|=qY==j0hwTY|HPv1CfsWww&9kj z@4!7(g=gFkrFE}N_WXmdsyfXb#Hh&4IFTFPee2#iedxOM2k_p7U4HdvDz|GR0*H>6 zcz?0^KDao;P^>aN&;s+pfA1b1My)3(aBvyxmN+94vsDCJt;OWC*X)3`j*95vjtD}I=bD;>*L>VKHM7MGvO&%)IUxP0S`BoI3bXM42Olyu#Ets2*% z2`z$0RQzSJb(}>Q0*pmzLSQ=kz5W8W^F3q_5tAXUhIR#?4PRFrhUB-J=%QEE1b9MZ z(mY%9(Jpolp65Q7I9+EbWyyi#3jl*BXn!QR$Jc|8Os)!p=g{})+!&-=u7AmTDl}(6 zQ(yU0o_W{2;v1CJrh=9@DFVZN8+9wB^CHgzStB_x2uew-m*~YF+q#NG8d1>B_Msk+ z_b+xcXq3m*+|skdwj@m4@A(wjUcfyb!Y)_g zNGrgpA4F2l6uAcLQ_I6rA@X%n{rq}-HggCn)|Cd&@<_`xbMa_NKYyEA=W{{nObO#1 zc7QH$nN3%V)J=VB9rU%Iy}V5}3>tfgdIa$!V&Ws_iL0ogD{qK)%%6l-` zl#M{qTl}NV9#dfwJ^2 z?-tYP#)B{(nEs8qnLq8-CXcOqtn=6+_J7D9j3QkZHc4KXy~w?JhHxE|Y;Y%V^}@=# zEu6j)jW`K-FAL(()hL5m0mGHt8~=IW?fBOR9&LLBNxmn>X@671@S0epe^Q5Owcnza z%`c_~olv=Ah~S)++LsJ~5^oxV+m24@YfI&*S|FDNJ3Jf$kp|Y1;r;!Ts)VHCAZ54B zs^4q=DQ0@J2u<^XjOE<+4w7QMz5Yn*?9$%-dvp<4Jg7RGC@GV1Dh>>j9I3|mG3*M; zy21tpW~zMM_J8bw=}{WBjf^?uuk!-#(FFWrYMtxI(Td8osaL%!NR^5-a+>(`fzLQEr>lNz1B|Gt&(d}w&T zYXS4ZbUjZEW-xtq`!G+Yb5Bl%A-l+<*ey|s)E3^1kAFE~GO_#fVSwB{`tPsxaCVp? z{NHs&684ADaz*2y801^Eb1YEm2EV12?J!Aop00a46g(vx$(LkVIV!hJw`I zEtQmH*(Lrw4nFD)`dm?#+JMDLEPFpL&+rA02ctA6^jVZ43AQay?h?Xw=c zIhu+BVcQJfLX+U(^jbJ913I-aFxQ%3sq+fqfg@tb&xpkhI7Cn(N&z$6U6H_NE6shz zFb~U!eH0d`o4n_lrC67QQ@W*w+9|!<2}v|=(&`{TknDHV@cil#^(xHi0QEKun(MrOyQ(fUqu?>H|wKO9HuDA^m(Te`~2%+#~$J3ocKb^_Bl9Hew z39j837<7p$-g8Haj4l-3^e6ymq%;Ajw0}*R2=c00OP&g8bIS0}1Yp}0C3hG8$vjdl zjrCh~WaCOYfKm2akMR5?oM1!#qMnsorOX*;$1}Er_E2#fUNmW#h7$J6 zsh*r_#TZ5u6E!Qvn14dc z^9zh$u{$@>uAkC903AL~pr>y_q1~s322P#eUN%2vufL7LQ?UD`m)Eqy_(AdT3sgpX z^xtqRXr~qTCE$bsQs%w*M0E~SR_=ST##HP~YY;4fptTbIOhSbx%79}B_q5zj5A6Q; zyCv>cHmJ&&Hm;71{~n8O6%+L3YJW7js5pVU>X}bRwdW1|Uyp_hjDgtspsjamF+>0T z(2c~;(yyX1o*EUf;7CQr#|6?X6kdUJAo&?5zXhbl%!D>6NO58n-BY<3NBd0Vl`KNK{Az}Fpv2b%@gQKr4QJ3UB{GKH#M z3^Ampmzj-wa-&8&@3SY*T6Pbw|^!gxYCPS3C>Nm@jTTi)0IG3=Yy!?Or5Ev|S9Wri9^H%E1^z512cior8A9KS!6)uC--F2{ z=|wZvvg4IQM7?xa`b|CKPlx-XgqK(Lp9`@je=6}={LmESf1q&{LVvd8mA67}52w7X z)7h|&uOlnk1Y~Fo!&cgNxX9K~58ejb?y?p-b3FS|D)#xKQGH{ffG5c}`UMv;(co@B z)fExtEB?+hkwBJxp74voqb@%B)ODH)W#$d|Np%x9uaRuQ@iEC{U^>Jh6qMTWk4|K~ zwiAzZqgGF_b#dBgoPT5{9!k9kb2H@hBCtgnw6IYd)ZOf?uWMZ`U+FP0R{1f2yRlPJ zYT$kqByOCAY6zFFcn_p6|5cl^+xpa%^~85haJyUDNYy_)oIH0809i^htio^8?0J-} z*jToV(EMu)Gz$qN4vXcxc|GhXCDFdV0fj&@VhH=EVU&j$X@9JpP~r|+Sb`w!n0PzV zGb`0mFkpT}MZ*I%k|0?-0+=pF~BC#>* zze!QZjfmkQtFx>At4K{7Yg9^;pmZD9zUyw$PY&IMAhN1ApbeE_`#XvPSSfhp`}VU* z{E)xtbXO*C=zsC)*Oi%%+hzBz73EeC>(qEB+~xF8s11=7_l4YSzZ)@kt;t||7J|7?^{kWQfdc`{ez74PJN-4NK*K=8s%%w*a$DCB7 zYdJ~*N>SBOdQK}o3{#lNq%>}4w z^5wa2)r2nejKe)%6stx*Db@#Z3|LwXzb!)^sFdJWU9IbL%9p`UlNmbYg2Db_va&Cs z3P+Qk^wsM`@&acA5R1$`iMlHvwqFxbqpJcyEO*0?4DucU2p6NT`Asx`(j^r)i*jX3 zWIpD~$$uMiBTkcHaC3xx&4M@#^ieVjD;8p^NB}G#)81l02p_TYkB+BP!M^sL-U{8> zP++M3#|~|`yxoL&{vm%#5M@Nu(KvQW5wAOIC^#u%h{@dbsB;_mnM~Mlh&nMxuM;vP z<4iWr2dpoEg+Cj_-T{GGF8}3>@=eUUIl`-qI)7U_$>E@K$N1)&+zF$~4PjJ{ipE7; z=>yok7IN`Q0ZYIcS*vS4Sb&gRoIRC?xz84qSAsuuIlxkL>Kkh56mc>O4@o@|+b5Fp z17$4Pj-Ch|ttxLsI6uqx*Vc1|v`TV(H|m0Dw?}sR%o8q(N9`W?tqZkSJ5{Kd09E1; z`+rd2A3{5j>wh;9W$5Pnzi2(uuux?Y#mxsEEyVxD3qavaiz>%*MKSa1pmwl_LbjUe z@(WhiZb)Wc2RgVfS8olL9xlL_N@#26_ zMSfJh2lm!^zk9^-)W)eV4#NO-J3|jwVS2o41#LTU0N!Ow*axXExT;p`Napit+NPru zHLW}&e#JpH>|@jf+z$l#Dm3bKZ~0`=x@Z7a+?J{MPY-_(7dQP0rQV4FibtqGI)9ZG zold7RV*$OQLd)m3WyRYq6>A5N57D9YE|5|JzJP&e>$(Tt#P=BB?kgnxO8Rsb(S)=@Zd4fo4@1(^B0ijA>+CVpt z4Os*b`O8zz@r}C`2Oq2w+4VeSz4wbsPkD^vDw$)^z56@?iZ*xMo*pn(5yn-#4}g09g=WIt(Z^E^I2k7Vn{9?8lF0Oe(mn&M7^2G4)n&xQZru_;Y4@}G=z|C=UU#Av5GkxegPx{Cf{SdXhWw#9uNdR{ zd22aqu>uZqo;Ad0Gf$zFm{DkHv_odqR@A=rRr@ z&m?G<*6d__i8rI*PQKUnrhm09IgJ^swC2HFzR6u;7N&rK-)FKXXgeHDWfx`?iNNyt z4duTtMb%3Aj6DO->$DpQY5ohxDIC`_YhKznDB4pid_<}eq{Fvh`I2buEOB~P{T$CA zal*zqN^#gm>R}~tEb18Q(wZ`Jfs4zE3+t*@E;V2}L>d*^`#R6);(yXf6&5@nun5EV z4Z+eUZHX=q>=L2n3I^R*#l5aZCMV8(P8XDA*%QJe@`dPA^a^3Vpr>-D zcV4o*bu!*D+U&5R;C~}pywgW<@u>mrtTk^}u9MgOnDz@}>@u7lZPd)s_RyVTU2Xw& zvjb+B38s#Y!28s;$>f5O(mloKhJ=ib;&$4qHLM`t_6Ka&P5^xbTKQ7-N~`$Z;+)Jd z8S{;2w)9Ab${|t8TT3cLH7Yu_Clt1)D2}&w&1L@RvoiQQ$B$lJU}>}~cC z70I0BWCPZXhJQ|n#V_QHTy*g@rG^oEW&1*F;ajAiLypV(wUEXVS#cX2&wA~J*wS&v z4V5G(Y6k??o(E-{xll#J7I?*)KHv)~K$od9$-LvZMq&ro*q?OwZI_Rj2-wmU;d5W@ zHwO#o2b}kDip+%dn-DfXlmQ@mR!KXXHh*7&UGvD7)ZkCgYans}01fQg zE9zT{2+Q5reA;eryKr!95w?T1wEL)tclJ;oePemW%Has0APqD_PF%GgIfzDOLSNRh z;dL2sa9W7$q_Zq9nov)4skS|B>z8+~c-iOaM6BDq8}Q)cgVx^WlX{D?Sw(g zgN}>99)CXTYz9Ut@I`MqBY29e6o)I-;sPZec_Ze$>BEVC1H#T*Uh4a-zJ;}Y7 zSkKj8tzk*2Rl`X7xdyVAf>>S}@Z_?jh0kkU6@Lh}(E|6+KD~lAhM*9`QraG6jt_Qj z{@v&`F8==S+FO=dofu_F*9iN+baV+#<(?0OAl%GVr)>tX#;}eVaG#zRgvLrQuw1{I z+bZZArG?bva!SW+fm1?5RZMfb+q`iK{{~!sFmhZDpUH<)NSR$=(nKmz?5ftK)>_@6 z6MqGdGEhzD+detNEsNbzM9@whvz`;}?5_ywPyH@n@zCMpdyh8pjkDk$)kP29C-Bvo zdGKaRql_Kd_2VPa*DgZ zrV)R%bP4@jDs5lWoonW}cxo#UgH}i87=NmDARBzabyWk2GYIkpjK|AUwpeOqlaPe+ z^V-8k{UUUBJkIk89Vq|KAb{tNB~Ob2v3Y-J+ist+W08cvyxbNGAnWiYG^s(Uyjmj7 zFp!!hkN&U<{cX)?6zn{K3g0#-=TAr>9~0ET7%{te}{;8i*48 zWr>+I*tZ3_+hwjDH2i7lTVGS{bN69)L%nm)_?)e0_(0f~zlb_5DW( zTWr^)E+)rr&~xqEhwI@ePWnuid^2?U@r2-EyYpoM7WEJJM}y0-Vk(jyDHOnsmV=B6 zHaaQtL!9}^*l>Bxo!RD7m05!Wzj{@4_K^v*5Y2*rY7ZMYd}Uj4v53E8$`FXeo{|2 z50;W?Hhyh&No($_8K`5NH5`Ygsxau;bYe8Un4|nk6bkjj*h=&n1+o3hML($f?AJ}H zZtcJ-iC-0zU1^f%3YZgo7Jtq$lFXjqQ-3(0vXvM2s4D&ke6R6CLZoC68Yj|=ZTp(} z0IUL2{R*`qyXIIu6CTynK?|eF975<~U!@+}EdCUx9$>UkDPz4O?Mxi~m1)b%aCP{< zs^N|bpHP>ZeB?V0t`Lr`VTIIRoW?bmONUa0k{~+3JmU${N#>trg?ax~#}XLLKIj z>aL%wO9?*_>Gl;|bjGKglY5VCBjT7;C#*~}KVqR4_N;{yXv>XQ0y1!TxxU-Xzw?E6 z{_e^JGVn^cH8Oc*nqdenh0Yg=f2r#U86_)8PAeBTB@`>&npXQX5rNMxgwc?Hao;J0 zEVVdZ7b(ef%tHKereqcWxRseE{82FKBlGY1WD5ex{H5}#G=24YBZqDEb?34MSI;Xj zSnp|4z49@7bc)wG+z!c=s0U(D0oMEbJ$t#zdb`@`LfV)F7`K~l+Ms;oB#lQz$VWokSc=P01cK+V}olGU}dZx zgd--cV6U;TgLr1^(vi%f)}EP9r~kgxN3jDi3e5G#C$YtcM13HZwCjw2L1pIMMC7qY zL{ev#p8|SvcanH5 z%}8{i;@-x15rbQt>%-^JmK4^*wQh0BeYzo4WS)|3MV_s@=K^Es?sgQ-yj#o@6K%FM`j7Px|rZ zAB>HG`M>3~^tl5^-q=23f8=s;1@cR|tCLx^;*xU__0wTPG@@m^$GdF}QNW9A$#?WS z`~eR}qTbhMMftZ6_rZeadOq)hm&e3)S}~hYk0txnO@D)bTuLz{aN5z_)YA(2Y%Djx z8Vk_??SjYeC?B3d;5lz&U$KG~PHbwpUd-Y;>)$Q!E#>kCajoTMOK`%$YLwL5zFz|c zL&0X2RCod1S)g2fx*)lp({WPkfvV<HmO3q z&rPRtU)s=;g#aN%`fyMk&v~m>UoRATuhEx%q}`Q&$;y5Xx$D9DQ7Ji7VPN_aR0s|d z0Z_SLxqO_I+Wtp!y|`5Xxuf!Yv{m{(TKtqQpnZ$KzvZA25i2_p%K*0@b}BI^aRjn* zm;K+OgWCzhldgF{znad@GMIM+;rgfWZo*VOOSL0LG?CG5)-7N0pTRr_VcpU{gQ^8_ zjAMy^;d3^M7oz;Fk~0w4+oYzTFN1P#I{TE2O-9bq+pP>z6l$@C`DF_u{pP`qRdtx`;Sj`cW?(ufLq6|_j*cN1IWfl*X{mR+^Da}*9$MxQw`X7%EcA^OQRr-pck zBQ%v_HZJfMHZf6|D){bItcq&@7C`C0Nt)=dN7NllIN3>zRQ{k7*bs4{FdmV%-#eV) zcagPo0vOXH4FN;SXX}B*FZt7JhlPkaV^T`>S->2Z_1UQ1^S|7+sy69uz9R9Hl{V050Sr<5YXx%Z z;Z=Y?R1*h#gW+j(Ti}n5g#&yz)Ho*8-0@#h*PHIj*$}_!yKf@e$y!*zLj5*~0NK0V zeAQssP5dgkx}!)Ex{Pm@I*9?*Eff-e6j`Lh0Zvk{4ga}3IjKeZO{j52#?JFTE%_UW z=Y}M&@n^K+BHcdoxaN9OMMo`n-~oQXu>P;rdsKvU^ue+}sKU%C>90VRdu#==lP))P zY!i8Dx-g%0dTr#DA7|W#8KCRgIYt=U%0~#JdkoUOQ{k<5{INj&Waxf+i}+iAV;{m^ z?t$%vJ&U@jmZ~uga2U`Fk0GOy9Vp2aM?b&|@T)2+iZv-p@I3JUN3zWYG{)Kc=1Lw$ z5v}tE4~*#K)iC-~qFQzQqK1{1>9}S&%Izo}4uAf>lF}dzbd}=~@=Y({R)c@XsB!+K z?CPd8lg~6hj8)uRHc^`B^Fa51by>Af{!2%>PDH!E+QcAO)a9rJ*0%qHhEHMtG>Q?J z2s3C2uz(y9)T!N!Lo4w}I{LB@Kp&4XR>CqK(j@`EbOAsqu+|TvU)V~{ANjeaI~^$% z@Du~Vb8q9ylzd2e*~tnwQsDHLtD%wYbk=_YRk)Pik@&r7Q7n85$8y1cp#k}dEhRWQ zPo(-`t_w65ZODUL{bx=pf>M>~70ebqO*80}J%K@us4ijBAvv;E( z`bvGn(*Y57xPNzCgA(->0)jukg=Cax?bQWWfj`QsE91Tk31!?5SzqP%w1r@QA&tV( zaJP-xu3Bkzz)>{rTzR>FMMN1^{9S$hpsBSI88r0(5rD z0tH<;2)y{)iM9up7K15rBd};i5&tBJepw<=wOHZt{wC`TQ1+IJ)!4k>)F@0F}Yf z@-UcO`_T}{v$^emk2Ui;{q*C36uFwKR*2Zn;uoP=1O3WBL~LFq=4P_v^hT<4TpR(x zWBjlrLZTH+p6k*sZ*d$$SANw|KJo^&eYP0slU$%-PSLl7Z&ghhe;26&6e6DT{qJ5M zH;%t5J9f%!6tt_#NdJ7M?wpmv6JOfE1(k0yjIpV;s&f;6op1tTq7TN!Eu&Uki`S)b zOZI%;p!@K?7~$iS0~e2dcvuV%4wrq$1%@L8?_L;>!u`EdN)oME4Ic)l1x^R^{QsuOBKUn-X>UdlN9lHrAE+c4=?widbRk7 z%l!_g-B9L#gd&rX1;S8=;3NbOkh|=Hc#oVc26*iPk6U{r=Brx$Fzms#)2G{p+)csh zKfF(#sH2egT2xJ~4LRxrutD7`A9CCI%DPLeOS0UgHJ2aaWDgxiQH#JP^NFULPs`_1Z?h_*1@CHyE9S{;Tt5mmOBwSTmm(4bR)!9T3bR=HcCest5G8OFhh_I{{(C(^8h z7{R!AgMGokNsu@8|61hvg#T+KHt5=>@Q%~BC!z#I@#{lhmRY-l%0;FHFKa*n?ju*1 zhXZ4W4lso7I3eIg?XY4fz$b6XQCwB~hY>)}R&ob-u$E)nMv9csb$Dpb5`V>kpj4E9 zm;s1DW*TZw)*Gt+ejP0X02SD(2dv!VM69+N{gTiZ6CpY`osIcq=XD6ZWIh+!t%HWa zaeN^8rOIo)9Dk|!#%Us+tVTk*3=7d^LAAPE9|>xE%{$gqBE)65((+(L6o0z7mH?@E znc$xR#&;+&D&4WPfAN8sLRxYjUoV`0W)j)u(o1-vy1nc;8gJ}mc<|CL$Mgp1`d*;TC42Up}dJmR@*5BZ;GzMTlPtUm${WowJiR;zgKj6JumNC#Hp* zYldxAY9?)aijB--j1Nb;>;CLG@NjZ!@o!kE^EdccG3JoR;yS@qovT0=uOshc2#Esg8*fm|G7tQ- z{=XZZTEEPUM)eDhvgz|anVA=3(v_36tC_JT@)|G9b|>RT@FPD(*r7H6ST{NSYXhUQ z)a$!+Qi}$~8-<_;?^KnUNB{hPphF8wa(`MKZ6+rECOfHB&rMY*DkyBdm#>uEFoiy_ znn&lwIlY)@232~oGpCl^*0yZ!kDz)7b;|6KZ2xrfqm4^`H(aSCr{+`a;LDwn(V!T2 z2ou)(W2F^JY02DNZsAdZqXOG-a(B=G3_$b09!kV(gE+TA$S2q6Nqazl{GLL(mu+2JJW_GTJB!WLSB9iw8w(7{*m?H-` z^ae7Fo4VtjX?jVzwH&sMD+w1c6cdX$Hq_68dXHa5~<;m~cE00h%Su!?8@EyL~uL zobA>9Q)uyv2}Lx5aQx@IXx|zYrh#`tV+R5bKffb6-Y%p7EhoJkzJGgZnxApCIxWO3 zjg3KmTmTF}^S=xOEVDjMn0RNRh^{isSl!=EvgcQSH=i;w+?_uvCevh{CjjE9 z%L|5o-yVLU#or2+puRegk6wLbf~I_z?4vpZwzLYJWL-sQ6&<7vJlb>iOF$q@xQ*j- zs%Dm$=G6@l$VOC1)&5xLY%^}Tq6lGNVZ}(KzAvcRs3=@kXc3Om%*iNz$`!_{C{)mP z=t8peV7DQeEoC1OZEEeRl0+5?_!FcEAi3{0M)xNN@LCOzL&)ZKyc`zuSS9^w#U zLXBU3L{G+otOKrn#2ebL1HiI*)yS7?=6U-Q6L{h$FC9szU1Jhxvq9-#*%7lA9|h z{DF}Dz5=7dGCUmzgWG?uD1|#Z$QM!1h7FX{BEOlz2U^@R;|y3m)GEudppMoTTV`BN zZ#htc5S_g6928hf6s<)79QWZ8cnP)HZygcT5qQJ&OfRy0yaa(xC8{^)EX4tT1@k3> zG0DM+%NbJGj&S6#su>ly__SO^aeV!+*17jDL$8>_-vufXv3I-i%LL z>Lw`i6a@#EOp9lRGOC%IuP6#Sm^UHPGVGMcU~bA|aj~guC`6rOb1n*$tYh2uj&0|S zZSUB&ZS2^#ZQHhO+s4eC`{Dk7hpy^g)vNk>AWe#=J@kFHgV!PMwD(xlO;eCSDGnXT zFoP1J0g4>5;VUQs*N0VbwzG?xgDge?kBWPTv5i0k^E*!O8~YopGE8PDl=X6dI>jZ! zO-IM#XO-SlVdqF*ZbfSv4uZ}~&SmvBc5evf2peY4XHH{%EAS(vY1(psY?5LNh4tP( zf}TM^)kWLZ&Y5NGcoH7h^I)rceAkMUO*+!PB}RXv59U>1N=(_52Q3mju-07IeWh~> zt18iIPE7&kAL^*zI3#;LcSe?}>y}!6+b_vDjZmu;qThC(?D}Sjqp{7}Pa$1-T51|* z^42q{9FMkxIM2D#pjEwpz(;!@BDfXk4`zE(5*z|7o{Zfwlna@O@ez^Pyf{+$4YeiK z?03h>cY=hHGpRdDqnj*hIucLth#`0LAi~jR&}M{^`YlG6cbFM)ZSE*}R#b*(j`P$u z^kHxwP3UAdA0LzPN9>(XH*V%$_~$apMIN|y)y3&8o$M?QIANcEin6oQwuyCRn@87q z{Nd;2qgYX3UL+qDlyv^2O~~kmt^Vche%1N+B=&xG@i#)AgR6klQwl(q!$Ld2y?=9w ztc2=TCp2Ys2|o{rHY=K2U8lJSsZ>7|$v7;Ron~gjPWoDy(s-&W=AI6~UlB|E)nZ9bNVo2D14-%1u=h(emG2OR{t<9_e z(pgvVOJs-t)j_Ocu-P*kH2y(s)n)7(!nUE&Bw98Eeo%0KRR=tWjJQIGkxuZBiO(_w z3k;{cra^PD;h2XjTumpR{1)(hkZkf+yS`X$_gqvJdF=P!C7Axe9|_2(kpazT;&Pjt}LH;h#c#&C~-C3~~jg5ut`beuHz)jz10SRwvvwB;?{?x*N{9S2eel=a%! zu5+~1vZ2g>S%a~LQJGu4%&|~ok%y5jy^tIM^9#PqdpA-%8xji!Ebf6MA!sabnv@S| zoH|o`>vX9`*((^IC-fqkQ=|zSL+p-^o5#f4VeFjr4gWnsH$Z`vQuGci=`bsQ_8^)k z);*C@ESrpLHp%$9OuBy85Jx$beT-#%;S^kFA^66BE+p0KE!Q>bAlNMgx*s)zl{G>kvf{G>eLczp@q|@sf zF4*MGs+{672%G1$)@isA#kXUPsGuRiN}i#Wsaop4FN&M26b-h>DTiqc=H+v7wo-OH zflaee<)~jqVOyq<5|9S7K7h1+`y6YO;>yv#!74B@eWy3T?-w@GS?!loBWjv51Wg`) za!vhhU2Z5zb5AEDFQj=33R1}$nuEM5aXvP53fUbgEHl`@mgQjEyr9T^(m7n`ai-Oz z`&!MVL`NPxxl-VT3iq?fU8h;X5~q8FHpWWtuq~w6C^HT=Ypu~}p)jq|KCR5<3;Tk~ zGsC9{S}Glir^UaX=w02~bW8BT3WG#{t9nO^S5D(EA@{HTBiOI=T`N-bDsJ(($)nVv>z!w@Uj<;FbuNh zXbfq=C}2p+@9ExUA;;Sx8>x=hsyqmdGLoN7mf#r78JZAxGn}3hs!j}eN7=$P=uj&|JqPe{!O!yr3 zI(|Eh*In?R2LI^+Ic9RGn2HKYkbp*?IJI(ciQfaBPg;282NrJx7r%XMkh!c{P)`^ z-tLHndR(MO>xDx+Sci0YW5TPrmI(n#d@vb2rYkg7OY__2v7+05bTMnCg4X8Oes2Yq zS~S_GhF>-YP`6f-kyulo9`-t(Lqe?v~%mR z@L^ufmdKtJfmCk=mBof4DJOot>nJRSwjKkm>(suv5_Ei39#J>T5Jk<*biD{6F(#N7hJqj)G*!a$$kvRIV3K%k7 zA-=~l=y=OO)@QvNLE>i~LX_RNTKNg*+W1;S8pK&7Wy1!@@l&0beT0 z{4|3Vmyf8@nqk~1puJ!OU^sDnx4=f(fk6YM$nDmv`f5aq1~cj7@v-738E~ZEXX8iG zbAsQKn;NoxE>`?}L%n&qoXkSyrpapQgp-0?IC^6Mi7L0d4^hoPA(#zN`O%v)F+xK= zxr@$ix_0EqSJzB zXz^jcg!V~8mw*lSKryqC5^Oiig5S!r+`BJ!(KBLAQE{owrdGedz@=%t*TYsnvRJ?T zF~xz3%JM*C)*c&S1S_ur{+H1~NIE>HHlS4djrZisPajiTeODi=T zL!QykS};|`iFo+e3it|bm~2VaE43uZ#-`|-A}%nh^=!QP6+RuRBCluY6Y^( zfazI|YQiqNujI;W`*ZoQvmAB`Q|B4rT+ms#e@ZpoKS!j};>?|r*Cl$$ZHf%| zIaH-so7ak@2EiUVn;oYR^dmB!{$hqO$0DUo@XgOjNBb*4(L6W(3oGF7r$lmrgs2pM z@fVsrdmuK?I=uf16N9$ed&e?R2)<)b`!m*VAum@I>u1_gQ>Gvs0?A|ZwpXq^4x(Ge z;))7Vf8XL#R;sy$tB(%wx^shydaIBKI?>Q7@cnVM+qa-jDzT_nX6GY_{?uHkM*qt? zt*5CpiohaqyDkTdiGuhw+P2_h9N{NuwTI5mK0j{cQcX0#bKSd(K51oA*4$=yyEjsN zLtAs0tWNeK!fL&y?Oa10`7%gMPntk!Frmokf2sake^g0*&AEY|Sr2uL3imJ7)tOOO z7;4rits8MTZ#o#y>41Qn9Y`5a)w{0bdr1#Hw@}CeFLYF$GVgREs~iT0VVPCaW0nU= znRV0X*F~i*A83Fl{27bZcoLpTL<@G(XcYkVM1=g-N?Bqzt5c-(T<6#;tpDV<6hYxg ze@6Ji9L9Xe9p&70)}*!fl2`{#t*C)PLvxS0fSkAzHtq0!=d!c_zX%LFYIt$II1%6z z;8oA7eDfISvG<2orhpSpj*K=8)P0K!+zkhtZSW^&q0QW(?vFaSCO0`a!|e+a_hwZP z@WB)U|DIFrQfXr+i~|5!ILjgxE7*S;f5{on{?MEMd3u|U1AWGv!+_Xyh96Us7ts4A?gq@(r4F0TlOQ+FhB)MG1eI> z`S>W-`I%#micyV$(8_!nCNr1^BF*Cb>Oq#1a-ho?lkwm(x=%B&FEyR+U5ag=e+>ou z{?HOE4t&@ykK}HBHIU9p1^B(KX8m5&X43RC+H%TB0+WR)ct+S_#T8i=!nAlv_18QI z+x+Rd1O71AQ$L|aLXIVtN*`8eF6f)!;6olGf6GNwH(;W%&ScG!3!Ps*FCy<>gkPad zT^nlHI-tIr>G!VuN>)m2yXGtAe>W?a)0S6HZs8*!t+J%d^xaFQj9BvW-u}lWz#Qrs zEMFAp$?QRkAWJ?Jqk{Phw+L@uyfM|%YY$s%BXE8Nit)|xp$;P`)MIA5P?5v_e{&l3Hmib| z8VT7pUn?DLb{dqkqum8Bq0IIwWwvLxFYd4h4md4n`m3l0eho{NBY;(24M|wwGO_c@ znba=o!!E=Sq3bWIeG4<1et;EHJD+qNk^-cpaT@6OdM>74q%LHXeLB-Wy9;Y!Qp9yGv89IM&A=f9{;3%O>nu!ZfA{l)t3}=r>W85k z=mqW+VaO_jlR+}ssJbSH+e4ADmc0t*OkSdHR44I1Cy05P`^_Q~$AGeLL%3;viI|+c zpE<@OFevtuHwTQlm+#P?ei{ya5X@QB1OtQm_bY~r`fImBq|XO7Trf1!x@Yt(_r`dT z*~vxBt3Xnr$?hh0e}ZxI3TgYDRnWo1N1QfTvU_UouG;j{J?3xV5Ux#AjtZ4lfqMA1 zxrg;m9LCcow+WIc1pRalPiTpMaDXPpgLa$|=J~*{esO*Q6k&Mj%j_(^Z7Tmk7vV5r zU+w#|g&FP!5?>}5`wczL&=tucb05FS&_OTn4(6oR$jM{Df7uLuKWmJJARaE1Gvtpy ze+#7OvRk)PQLrsa{mdD-{rqpc;iJ9a;Q!u1fKLCq!GBUlyud9Te_QY%Ae%>?&o-e$6l8Y>&fI$i+6WRb;(t)#rh@ zM7xTUuDoqye>f+VsW}R=hJ@uPeHg4TO^;)xLgWo{k93b~RUw)nne+xE7NYdhHK_8r zy;H*r$W6{jDs!BU7kE!WMimc+ZJ4}&-&He zPL5@z?5e?)*C<{1Y^E07xXEcjz5!fb)OXD2r|P>%zsNbuai@nL(O}WVMkxY5fsDZm zxOe;Df2ai7qjp3AHI%Qv_}*IAY|52o#x0MYOSx3i?{02 zq!$(rS1|XnM;by_0(vd&8!OR5L8SE<}05< z1#8*ScE4uuaBJYVo~U8llWy&J7Q>(&sM98IVUu7J45NPikH)|1%pR^b@hBcTY~Wg; zf6+993OP>jc0@P8-#AIPQ{xYr{pY_sqpPfezJrReaj0mHQS`JJ!)u*AAcJ zh6;5o9@Ket0VP;;ZPG4Ll)5G@Ia+08X}Q5L$xZ%`cV>^#Mos$!_S* zCB6~%E_4DkFg^8~YaY{AtS8>DDBMHPuim zm<1lTu+Qtfsu1c;J7=ksqfV7R`t50F7FD0+F(jd|@_Xepvl|Od#G6Nwe_0(59udxm zHwnJf>P}2_u`Rn^D^=amF=c*isn1t;u2LAp@BSYIB2w=el;TaS2%+REkb6C& zL39^yw)29COz8$}qFYDl^o7gY=xKU2>y z-|~ciRf`wqsJ=HCdGxOAe|aW+zNN3@zd$^Ip&y*R;EHA!iSSlw-A?6xC)CDFeKj7@7$NH&& z=CD$@>m%FEi)r9LXA3gr**PC+WQrne<;?hD(kBD@@4Px z^aaGPHxnZS;~VFG)UXJkw@bwDBnyBVy|mmNVw>cQ zPWKCyDbD5uioFtvJKfnOgrmUq<7*jueALFfEGy`&9M#Q_Cca$6VN>mCor;T8heb{U zN_hh2?>~j(eUy$_e}#}GiS-V@_}BYoxn|`8Xf8f6nlTOTzDZbR$NZ5s^Jo#*Xyg4| zC_SxQA-eCu{Z9dxAe%ig)lzU~;}Lp4cT{<6soGj}?-X@IPBvY<$5Qz*{SKERyMwJ4)lv3^#vXUTNc{l6;k!X&D9#S*kcTqG1sdX zp%?-XB0C`ue{{4~B~t#C9v`K;y4*E=BL&bSoIHv3=mz^E?gu zSohE)s_OVofsXV{g&kFts1sV@yZ@K~c5zb!sYlrgtPS)>Jf7k>T9`M678~f|Objoi z<~m(2G-j>*41hzba{Cr>JdjAOoymJd$3!hkSK4Ire_S5KF-J~-#y>QH*-R4|VR}G% zdN};OpS|L%yJ?yF$#g|?MyxZcfD!jb2kaACEO8QY{0gMArAO|)APjX% zC|jp0)^Sr6b z?cINhe{Un9GYf}1v&q(^>1dfXA^k*rr#Kk z66Ga!@e)4b=CCJ$^v+a|A~T-zHjL&Q;TucbGT1g(bT;7*QMZTIO>hPBe9SBZCcBy; zH~ezu!|!9NDEyFDZxfuw;}Uq_MwPDIgJ6ZDe|-s99v8)~DTA`oOCMD}LcjA4+i~CBUyh_uUtpFjB1P<0H-67vfr#NH5c^8$mO_ zMLbz26ZNQ$ja3H^LDrzu6E<2$tl*Ec=Zj+n*=>K4>*JDA`b^)%hn2ohpm#0`>h!!t zf1Gbc0nKFFx+@6M6Yw0!?^T?Gg`1%WeQXrOx*nI7DrE1(!%%$$;Ql*aW4L8y64#N3 zobifuuofW<-GCu{BsW*#z}#sLwlb1Gpc)P2oprjzgvHkhhV==)=v!?cB3bNC?Z2Hh z1HOzU6dXYL#u{Q4$4l1=MrEreRf^XjQUsLHIC`6tYV*g?Zp(g_WnVT z6^2$f>qnTnY*ZPrgd(9)*U52IW@8OU6LnVxnS}NS+uCp91#2ar1I2{!=81lHxl&6OtKK zwL6LzCs|_Xz`!P|v4%chzA{63e;I;V^tzit$9*l0MGJp_tODbB45cse%WDCD=-54i zmD%8d9ig-L zZYBeXk4?B2;u?1PwJ36zl)*aGW`vm}o})e|x$ND4tVK9k)(^em>G=Cpe-g~<@BZHK zx28V{KB{lg=>4U?b$*fOiW~aTooQCqrAy~~@J1)M2PvoRbOUTPvl8?~)@0LY^pS*5 zqMU(_-;k|ir&oWW__C2Oro7-f{I_=*+?H*FrDVSnYg%sFoip3#gxyeACax(d8I`1K zM2zzY;UlZB>eQ^g2k<4Ve>s(}j3&23iQ}b1rTGlgZuZ+*wMb-h6SBKytUIH`C9=GM z*a73cxx>`{gYE2>J)yh=F?(jS?34ljEcW>D0J=U9U$8;RS9aXAfyp~F6gqEz$;_p1 zxNqty$R!IAz|5%w1xXF)f9-9@w8M~S=vipzDz@5n$Z>G2f9AOLe`yJR|D`oEg!Mgt zmG9sR2SHKL>ln4JpZSc!`RwTEHZTEAV6e-viE)5YJaZQ0ZQym;=TZvo`|@hqKILOA zaTP%}0KXq+*-~e}YnX^jfY;-x2_|$nJsx~MJ&xx6SS>6;f~j&l5DE70=!z^x z0^ZzBH;z9LVkD?xP*D0#qU9C<2Fs0}<~$w;UtcME0iIZ2e=Jnn+-t5B15{NX#^hQ} z?EFp4PiujJcSCEE5g9;+3ivee41Sbr=WX*OVxn%`&>$nFdJ0hrck&O5_8h@MfA6UP zQN%1l;j;zOH0N`$t`MDojWna386j=bf$Ans5;hQ>OL}q7G}Tpnmc^ zLOqq@B!ba!e?zCci40hD1-Rl(0(d~njbW$p`Yi>%6NvL-9T$(G)o`pw1Z-4(hu|)A zStyJViy{Dk=x<}Ykg{Ve&W5BsL8zRFc{lDPm@jG?o2iUA3s*p{WIN#J;1j(nDVA{U z?@AXuZ4&}DjZXLz_q*{QWq0r3<4<4twcX@=qG_Aqf4!=i{?_~AzCj-tcvD|$gZdl5 zC1-n#G&)f?-#mAkUM1<`R*vifCc|BdYboC|)-{ZV51PGtUw{p%>4D&Y=^7&2!_oA& z;K}+Me~p`@b1bSPccsJP#Y=Y}!!5xH(*29yYY_70VCDdJ^_zl%c*!45*3N??CyqEk zVessce=ck1e01Z+E<}vT5{7d?8{;j<4h9@61tjCzApYn7VeC-0n}PKCwqvn=^1oyK zr1Ohccs|WySK-e8p-#A|CgkJ?5BGL~gO5+eOVW*1?R_c> z%rJIkzV^T}r)UFV%a;4O%3?}Rt@H1MJT?1jf4Po*1T4-M#~kTFTGZb8&FbU?t%f77 z~&K2{r2!&b=l=RaMrb4BqjyW^(hHhGuph+PM0Mb)1y6@ z#>$yfGvV~b%ylt`Sp#xR82SmeK8X^ZCX=Xa|J*FhlKD#ha&{TQcF~wrDB*@mn>eA2 zf468U8UH=cIEHed&b2Z>gX8xYz7n{NVcrdsUo`NL%am<}>U?c80e>n%m-;4AywM;w4IQi$+d9%9db+FeNdB1xSA1SIVqt`8`oSP|JYjGf>A zRWhbzlfJUstOE)EIP$fOf9Y4Z zJ1{$V*Y|1icK?8)$_X<vyj`(Sd!Bx7Nt^4r$jg8Hx9B!AUp(x zr6Mhy4+VABF##G>l+G8>+R7HK^`oTvS9zn6hat^y0r48pR-u8MPgX*m*;Hu;1T0`VCT#T6Bw@g93z)=12vv?SmWdvMggSITLr>l_vW= zZntdiujPXMro#oZ7cqk~e?p#NQ>IPtp%^!$V(MYWXmCaK8}7+63E=nF@=yfDxyTtb z77W}>je>#fM{@=Zs@CC#Lp~8~Aq^kx0(Vz9V9TS=`!&{n45{<$!T~{X3n*dfRx)JXQ(cc!bw${J~2)|FZd=aOSBiq{%fscXxf3E z^bxDlRZ#D82iUH@ao;J^Pj8z+q-h~j-QJ(>elUvAa-atQa|?-`NKhh-W-%=H$J>_^ zLe+Lo=<)Ayv`9Rve`BU@x1qeQP2_){Fb0v9 zT*du1ubA@_fBg=p_qfnX9|c(I4QGn9ZIeSaFM{9=5%VQz9I;8_v{e@Z8u$5j4X?r-FmNt|B&p*>bK zCT~FRl>~}-;P)ihQ=v?5Kg(--OvZ=Z-z#!q^wi1P_(gVUjjsDuT23E?%^`)nc_rUC zy4G;4m6obcabZYZT368of;wiO`oFFe_gTBsV%A4;&wm~|%-N~P?P@lVj{Yg# zs_a^>e*;Cs0wKekPFI*pJxq0~QKso>6t|pFTVB-4w8FzI=r z;Kq`v8@i*K9!%DE#-G%~ZMm$5fc(1K8(9-}1XeW~*|5@e2Run;$a0>;nd#d(AdxyJ z0w5|cB6m1n>tz(Il6N>#fSOKjUuE6TTxB<%f3vtg_p+m8M)1h(58U-S9{EZ+r=LYT zt6(zT_z~(B_yR^GT2-4@U!G97eV8QU>QKkub^$x*qt-M6FbuVZGn&2J%7o7?nub$3 z94hL^fuEU}tJd$1+k{m%5Sxsxad3a@n8;BKi5zP#?j7(T+)|7}-F3cWI3(0#hGPw2 ze@7;ClV08*MQQkl?%qJOy;;G^pY9OuqH^ii9ZfpN2XOZM?cAWUeNCe@_pDUX?r!YG z3&7YkFc4|$S%4C`;4L@1pTyP^;#mq?Bj1W*(w5sYx>DmW-);2B{!(o`g@3QN0hxch zKeSX1Y}ZJ{(f&tN8Itq6@2Fp~8FI(ue@u8-?d7=Ow0v-|Gt}5ZMk~qyPgThr%P)yl z$M@`vgp6m~1Yi9}7APkVPVkr|bE8OHZeT1V1PC^j@2$AkjgfL0BQ(c!2-oJE65ePW zWn*g6MF_{@`9GQO4BqoO^PQiKUNGsY!7kk%dzS7Z@w-Rn5UkWlVq`chpifCQf0d~m z*<~tI-_F~d|FOr#S}Q2y$?sC}aGzAl19?LUbsW%$8%Dw=Aana``LE^9XqA>-7Cj)U zp$w_(4??tw&Z}CJ3xU({W~cgOoY8)zm6!g4OH8+{;~y*zV>`Rw)NjcwqJ53G{J2r! z=@|uJt7YOXx6DRC#7z*W3kF%@e~aM%M)SKh^7Wgiv~}){uf>-I!9s&L{4_XE$qZt? zJOs{kNvJ8Ful5>RA7{JO1ZA|qS}pEIw^rMmi6I&>416lz+}>W=Z!-%&hUM_B{^dP# zJXu`q{hbmh5X^%KP^Rx?ko)7eBoTudjOm*fY7mCg8&G0GuCgvkwy5ei1`hL!ja>|z1TQScGOAk4A05yNq^ z1smvAhuxi>R|K34X5jD>Ie)w(W1ALtCC$n&CPj_6+BeC%p`?ejTe@+uu$or6L!SEj zu23D&6ZO2KCGnay8U~lde}t31^ZikR`CUuMTr~@$J;~u-vZhirU!*x_4l$4aEy3&g zuHOak&_n4U@^ZG!X!#(%pg4MZTlaPflnvad5KH0mo5+^(?`YejyO8QEsD0KKXCy~o z0P^XXD$GI)PXSJ%u=ZxSJxhwLY0K>1E!kK?gINsznCOAWpZZQe*qSPw=hV(6n-26&xD@m zTqGyCCF2nSy)1OF9*?O|4ykX(XBe5N+hmeoC^EKZm8v}l{UqBBI_3+}colhXbvVQ8 z+H6b%=03x0T;0tYNvJ-{Mf7EvtI4p;bD_nbr)Uu#FAS&1UJ=ZPbCfj<78~61yU#nk zI=xa@Zq3N4f0)ZQ``VsT2?at2T=Y_+=CX9H)q?z_<3>5w;X>WO#A6<3@{Z3;HUaf3 zt>3}?3C#7nbN>jQC=WEe4ka(z$$(XB6uYf@+&~GeRVK(>r@qwc7$!2*kc?=cECqf7$5M>A|4N;!)B;Cexe-+?0*CuamE=vwiZ2*%URsCTYVUf(My6rg9h7Q&tCdVCb zj63qOfWDuke8WP3U%?%SI9qWEuO9DIXf;lM*$d0BY33s^bNW=tK~5yk)m@y$I)m)D zI)LzRxA%Gj(E_*4eFOCZx5t13=>oU4g9F9_e;sBlXEz}C$GpH9RYp*@h5C3ce=yxC z06Rd$ztjA$?dx@Y@qOj^*#4P6>Y)_79x@P{P_miewfbq6bC%PU8iv027G)0HF@l`t z$ThpBat1l-Srh1>0!Q90>_7Cym8{e88RXh3!|LF4>jp}CX7&^1(POf~~J=umNEBry;1Buf6!j4d*SJ7TYo|Q^r}uLC{J^x`#_~&G7H63 zU`jrvkc+GCLUafZXQ}Fjm&Oqq;dq)?u_6Ai55U7Sb#Nef-b%Z*oh8AaT+(nR7|G&+Stzznqh zNqNsAD3cH`#CuAqKEB6Yl}>6AzHqK>1;T$T~J)F1@@Jg4W$f81yBZQJ|rt-(Et@%G0dg$hov=h4qUS-+jXqi~zgbz-!K% zN~Yl)!{-w7Jwerjcu()~R0l+5vwrxYQ+#=C$uV6ufM|yn@%N_Cp*Sd>f35#Svjh%^ zw$F#6bM;s_m>yecFyC~qRUU2-#p)gr)P&|91oR}<2IgV0l(R%d%P*~S|{~wFR_u6?Hdlu$fTUCahog6LL zs1F@EDrE#)vTOPr`IgqIf7Hj7R)M(yH$ce0xx@?44%jW!QgVeOF)Y7i6X{WuwvYyZ zD}i)*w#4m4iW?0Jjv9{aPNw#j>rgABS|%D4HFeYXGE{aHI55#HR^|dK8^X0jmGf3a z$k5ayq_Z7~wSk`=($`4#SJ9)==RPCP)t2oVez(6;DSc{m>31khe|qG?AU!Wn=_fn! z280OwXfK@=%QWg-_CYPhcO4KC_()q&~SplA_FZ=M3cBK>;5z2c@4ef z^-Za#D&gT`taiDub0DnGItx`fSc4YK+zE(0?tfG9M!kMcUk_5aagcyw^Y0N4k0XFf z3}X`}gbT#>Nx zAk+Q4v+1@ygGuc9WbtMn&5lw{N}U{Ad$z!OX2LrIR8t}7 z9~~+(E0d|FfAsy3OkwwVXpTcW0)Yvj3-O|37du~C`C2DG+P}`12vTFwNxg%&y|UnM zu5mw_9VyQe23ETUd11v`-gZAXqc_2kB|W+4sf=YDAhwy^%4^=ILOiX9FW(YurJK!R zf$CzGM4PfKm9#7B3GGM<-Fp~O{ce4Kpj>Ic5_w_4f8E>lpFirUzk+w?^otMa=9I&; z4R$7uBCbEV@`z<@T0L5KO8w1@mnW#bVCj?(?uWv!VoAg&L-ZIx0=v6;9SkM)6={!@ z9|EqJ&3j(p>yp0K%`YYmR2E8D>Tml+;5PMh3X@m&6=vDmT@R7&}%~N9V z>e>--e>|^^Rv!R2K*+z#5AXqFsA@RHQBRUd#y_lxrW@CG4ol`OL}^=F!UcW%%FjQm z%qNW*Ru0B?a!;5SOWsMavaOTY>~YFus3t9W$5uPMwZP)#Q-8@!Bcm4(@NY_K5seyK zcPF|H-fqK5meaJf)`%~%#&a^2j2ANy^Vvo0e<8<}&U8)`x8 zvDrC6io20pC9qQu8x|{yj+Jd^PLfXbIl*Gv%SdSQho!qZmAS7s0oBRvQIj==4G9P* z()(ltX==G^DXlz*pc)t~?nsGBENWe{Xo!TCdSDSo4YWRBmzTyKzz-@SxdoH>?!b*I zf3_>=DO3>y@mB)S9(yu_OW|n7i7=asTgujiZv6EHnW1b|EeI$c*K*3X_iK-(P#GuU zyS1c;HmloxDm6mymXJ_zxpV5HxK-F0w1geo+44r>dmnF_t-x~tC)JrmPc#$f2+$jG zn=_bSY3iA33TbpGv9-N)mB{(mcGhr*>DTWZ*~<4kYX0L~8^&m%S2>ef4bvWkS};G}G1g zsR@-V?Q;y@ljXYLu<^X}Nl9m{D0o=e6Zko`(s-B#;5B;P)clv_?{2n-6>syxe?65- zssI}7*^tm zBF!nG(=UyjC9%X)X%&uBM*R(Ae;ZXRBC}j5Kmk=zuJH3XoyS*wLFc& zq$+Ttt#_^gThrPR+mH@2_>{b!KEYB4j+Ys2!Rmx0P-<5?RJo+fH#@LfkTjS5R1!Ig zK;_9*YNb(}6dcxk{t*DxUBtilDYH+PrX=hQB+Z$Da`$NcUsFxFeq(vYe*??s#bt1# zYEqa4HE$)}#jX`vF^FC%A9|X?P{RUT=+W>5_4U>oIm@|12>=4vt-Co-*L6Zs|EygZ zWLn2}Lvas}PlN4zfwZh_%J2UHK0v|0>fpq-xkCx`-XG^HI_Eaou5C}QwZRpIlSK#1 z>@`d+5SK;N43;&wp`&45e^uoopWu(T5vEton{ZOr~bcreB#kQRjb zj{6t6UiMhuZLXCJT5R+bRCar9qf~@Z4J+cN=<67-Ul(_jy@XnAf6(%nuFK9B0TEBB zPaKh#^;_hFi~5=^5qzphv!=d!Gok0F4w*1W&Fn;|S%zUgs1&w+N@38oY==jHK0t7k zm1W^x5axDb81M^sbk8-oNdA^RQU?$tFJs*W;7eKWgy9=-#h%0=M8lEo6);%r?iDU@ zK~CeMl*+z4%1Qsff6IwJ+)ZQR7v2?W)VorH5yruS2sfQ=R|*0?mUH*cv^aHZ?cV5_ zp9YZU-aV}wVBZ;J4xq`CmpLLC&8xrZPTwu?TF)tu%P${SteqsL?@%w;&7Yd|9p?hbt~NI&!Agj!h2vYcJtSJtjTC(;jhMtZu4rG%$(^#8tZpEOeqjt^F~N|p&c?RE zj?c8bRY|o=e@K3q+K#No^Cs13NhM2e#%Ka+@hkx5b5swT26`O|OVj^4>{xuh>H+<3 zQ$qUgHkZ45l!?oMbS@!NQV4a)3iZg)|j;H!>9SZHhPX0#_`jKUd2ds z{YBaBe?#A6hF#kM<)g`W62<&PDbR>cx-v#iA8V~%>A>iQL}4~B)okwF2kfnQ6E{3i zsZEuH`XBf}kCmHvGoDQ{wVc{%N*LKvCk%Dqc3NB3KBudrTYU%uoNi#I6WV@Rl9cW1 z`iryl`%#eP1>}Qq6ecy=Lh|M0(8{}#+I5o*4-XbBLCm+x<@?alCYNos2Q24$5feA@ ze*v6E!^d8`%ew;{RAMh~l^FWT&bn4^iSmAj{Cg3JglpB0!jNOIo#TMfqFui*lRo#1 zgoj%LvYA(ES(&4(#!(UetHrY!@k`eIFZTj@?&8lfNQ9liO998eGFs8@xH}3jWgIkf zgYGt4($~H6cj0`hi_2hg98vc!H$cXTf3Xn|zrHv{u0yn|m_QgED07}Y*7lQ&$HSgS zEFSkSzK-tBhRaYS0DRM<#a2$x4SqGo)kAnH|J@nwH)=)W7(9N5a9!%VS;JA$WlPCu_Lg1NZ|;NqvDIj|fA&yn zO_kHhLI;lSlJ`KO)m{(5WHG_trhv8rtfOBuXhSt{nh6K*hiH%bIx8&6@RlNpy8;7SDw+7Ny5RC`^rj zU`?O{5EJO=YvAW6YVo=baFcVtX~6{bgNYI+TJP-#xZn~12|GG?KZs7&fAk~bvhqL; zel=o#R4cu)4(a<+Y+Rp-IObDGm|d97Z!`YF{H+H%IU5~(YK&GlrR~)VvDpJ!6q!9f zO96yFaf5?^vZ!hljeuNw4a{R>N=EA48;84;723stkoDW{#|&c+Vr8EAo@jSx;tWva zyg}f9R?;TA*tk&;Cb!y!e_Nup2nKJ6Vt;+#)e+I?>2m3HW}@5@;TK|H8zN21Rw0aV zN}*`Y*}h=%H`e)qsn$zuzKZw#Y(#0^a9ppDJH$>G1A;QzAi^9(1kHcU3_=+VLMhNmPgJ~3vXxC#f4^m(=Ulwf5G zH!U$@N94z))oe~CPApv+h|6v~^E)^^FfZI8()5NcgH{J46scg6P1IeD??wIr;zpC6 zLtVi&+{~_If8nT@z1;J~9@MwxDfs5r<;jdWB2ScsPUaC;N6$q7I6%k09j0_`%Zq8H_)*VMiGK#*aRneG z(9^dpo&9B2Tl)=j$W*LPl<}Hr)f^?fSxcm0z=XdZ@*Qej_&3Cf(12)7#x-iPMdFibP}pTfne5DL zmGdA(AmyaM!{)^#*Z_M57&+haUpwFAz^dFre{{bZ=uuf6!HDpwZhI+8 zg|7FN9A}%0mA|xX(Du=h*(w_PsIu>`Sp9Nvw*f13ZiyU*AlA{g=Nu(J>P{fnR}uNm zJ!=x83nprYHMO#vg*xk$Osjt66DG8bg9lzXS^SHj7ga(6+;5z{BbFTuP*)m8QX=7P ze=J2-N30iA!w}iGk{>iX%jqv4^6lQ`-Pa9xSXvC{;kA1bG-d1a(2{H;E|l!2hf)P- znx>g!mejs}ln`oo+U&Xo(5_dX-?Cbg<&j3NIQ*o38qbU-VP4Cqh$6?_8J=yaa@(A0 zib2J3620;Ojx@B$rn0Ij%`KaIlDk}Re;&MZ%`eBF%3G?IJRODo06KlK_=bL>$9^6R zTNhpt6m?Ixb8s|r8l~n1x96+tiehqCSSyy0U_PDT%rIFlr>_yv zZg)59)g693fdea8gdoz=4N^?nLK22Z+wV%_2c^G&g}+h3d(B*)mMmYU%AK!b@&)8K zy>}vZE8=6{vD*mB>m{r~*)+PHXy1gH>+(j44)--2v6{3_%H4-G59)Oe2u;q$5&%=h z(Xgf%X737yoJSD`P{pTre{+>gL(#8x++Q-5hwzEKMc$$7uGuP5$73qlxU(*lrLG>d zg{A|KqzvYUg?p1L18;+xuSL)w&$ zCF3R?Nn9hlPz^T`N4Y&!v{gFvCBH-}bj45{+pZVD$;c0fErY-RfAA2ng+ZHCRp6OH z8`M}i!z7ggt-#QIU=yMP{Z^PcKX4rSR@h>lu|w?EIpYF)1vNqtTvEB{1)!d$ir)ac z=vwuNx}Q3w2WZxPhDTvg?%UjoTNxyrMe5=|{bv`$tH!Gd-Vl8oDa{|=HxHw?CMj>) zo5n5Zr#MNZ%6Pp2!!z@Wj>~Reeu07IZ3g>+EA~x6_goPvfP-`MB@NT-9Ut6x&nmp3 zT`Z1S_z`RMcf9t)NK2pHaHi?-2bw;6`~hD7ApsC#44$>@f5!UW9qp2_KV{6P5(lb| zX3^uNjsD=1N{8e#fW`?1@&6hw7<- zt*zCYG50io;|*>Da=mTiNtILmJdNNI23Y?e&^MTQVCpjMF5keUePaRdBVpXk8D2a} zV{G6VRsygHe@yj3h%QfLz5~1$3-Q^A&6N05kAVb&eHajk#%NlxGMmJ$n)FcGuMSwi z3I`I&fEkczf5PM(L!2V_VUQ{LlLMVvOL5_p05U+$zkle_O9npa4j^b&iYPCS%j7X+ zgyodP;>^M7AUvyIDFMC8_V(1r5PE(BSwU(F!R`;}f6vvDyHy87ptkSTEyh{v9y`&< z=|OqUS}s}QyXer7!Z}KhnUFP($Kqb%O!aWe9FbWJRqOGrAwHU%iVHMH&9rN~NhgXA zkbeS-r|O)J7E$BK*;AdHj3|Ny?s+O?l8iBKqv6f^&zS2HMt!#RT7Bv$1CVGSyE5_b zp4|Rqt3`7NnN69C};R|?Mb9&rV-MLVTMoO+GhLi(;y4~s%h))X{jvjdW4JY*0*{=naVG>u&>AQgM zL|g8g)&~;h9Q>#BdioCCvl_4%Cq=f7i}p0UzHL;YdzU`pMOnf!WBw%&YB~$ucXG zb2Q8FuMIdHPv-QS!MH$C6gs1#!K>e@x$9 zyFl{8E}-tfOpT>Hlo;R&uQ(wr$b^9lHRY?3o^6(m*cgLD-UN4WW5Uz?NrdysgK$KW z8Y&I@llu0A6yPK)uB31^IP5mblqBK0JKt@uOAs;#9@T~^g(cz^(w45JnaC0Y0Pbn# zLfu%{XTiock+c)1u3oqDcCS|Ze~lotAw_JA8r+>^$dZWDM`4}b5my8jIOW$U8iExG7ooUQSnFXtog*g;h<`V0P6Pa8(sJe!0h<&VJg-sz9Brmb|7ij|eZ`>k z)}TNMniC$ywtt0`8AK3 zRK#A$ovZVtPRhYuJ}4=G#Xn8f{;j8cmoQZov>E}n}11(&)_7P zErFNyMxTI@0BSGl4OSvJ8Y`Bu6q3@;wA!VhUw*lEXf~gEoX)Q9wFZdE+)pni2k2O7Xqg=WLt_iF5`c2u8k30d(@b?( z0qNnD(to}5KnvoR>Nm4yEr0NBp{>L#wixibjqHg`9{|uw8;V@5kR0E>+HhCfo%?v_ z8DXTnIZg)VJCo-C^#sxf#dap1n4=zNqj{*&u^d z>oC(f1qeNtmIFs-BtaG6Az>+3*Kl;nN3uA!bJ*_C-0suN#ZLN#QGc-9s@t9mtGj*V6ZC+D{J~w`i%v!x)uts2BW4%(bVZp3#wAIIdqbH)D(KauvWq0LUGo3F(u!_{Tp zmB27JLmJ>!_+tl@HP)UgK}2I^;a_9dv_?;zR7sw$nq%* zZuXzGS&^OX9}TmB4N2Fo8}-CHk3>WWVykfZFL%L{QE&b|%zs%`-rwjLk94OLISr$2 zVKxL$OtzC zh5z2dZRkFB&Ya3HShpYO7=_RGHK)>y)uixMi8&4H4o}}BtvLPl`EW;f2{wC9b`LqR z#v{!bjAz&M-+z}WcHaAsDm!9hWO(Mf@$NfWR+pV7IbV13VTjV)$7kH_AeXqcl2Y76 z=+LRTl6YB_!dh4Ege}`Um3x0#i7&$T*wct#s@WvDt|{{_xqi%s3Vd5I7~Gd-AwuWb zFQh)&(RoY3Nkwq22A*FXQ$E+J8e5GPAHGks$u(bciM^F0H&-Jnxt3P=AmxdxE zE{FarK7=T=PD{Fd5x?F1pzqQSDK&f!NG<7XuT6NoRfOA&I7Ya6FKQY?I9jR&PbZ{{ z%gUUoN4`?UspVBMR(w1_cHf2!S0q_!eIXU{*8vAf%l}ogxMWXrT-oqNCN(>nGaThvSL?cP{BAs z84t~@aZ^>i#`v+wmchj|+ZZ4Q#hZ^+(t6Q`l5hQzp>rbutH5L*$)Ne3<$$zUQ-__t9y$LBGXK-oGXsU{TR*;FWg`(@X z=8J)$1XuP>r>)S@nK9=oqY%rI3;j8)Ik{f|X!=~TINg_cRZLZm+WssB`U@70y-1ag zIyojOi-b%qvgb{^M$D{C^U(cLXeh^SU632zw4E8(+AM9%3Octobo?KP1 zlQJUy*m`-OeB`aRj6y)c2Juccv(3VHd+^T-X5MeL<9h%NV-n1BB^4YcvdtF?5FxfY zuUxDD)-G#UXo>TPs+Ym8;@^ij(|-f>60vA$XQMdA5b9``b^qrr5#G)PX;j!SUvBwvIlpJM^)3zco0m25ObX8ij`=_p1?e)+8$HrHBIXRy_(!*2oRFraqffNl!1PQzjQm4|}M!Y#N&9Q7#x_!x!7ba(faJAYKL_&Tw; zs1jt&_dZx>8b)Gy(R%l%I5>L3y&RRkuyPiy$6%y@`9XoR zhdx>8$icoKm)>n(X?H^?iY4Z(CpVNI3S7gOQzNp*S0gmo2IwyPw?>=UlL%EE!Q$vuMuXL~mgBRKhHxbUH|Vu5l`r;-AT_9HZ8LVB9hDOyw}74KLdM zS^CHL;0L!{HyGZC8_jyB1NM6d0zR3g=?TJZ~vp`!QHb7xas?zl-(oiTv;u;w$E-V7>la(%CqwvAGU9Dju12@kY7&m4ikgx4$j z;{Cz@fY%tSBx81Ml6e=&)TA*??wr#A2OzUwlpn6C6{^B)cp-J9L=WBB56yvR#91e z>;4(0u(@TR&_M7cl#8Sdfnsn;CMv}iil;SDXt| zlkp>-W<4y$;XL0NIl|wCPen(Q9(W;sI-Ll^R!32@8Sv{!i7cly~esOwM+mhkZ|GO~C=SLb?cn;J>uK+(w43 z-j{y>)B?+WTpxi-g8tC-2M_A2ccT5|3$1|C$}IMSJwH}ve&bsy+mp*ma3YvYl>jh6 z&wsy^Xw#Xne$61rVq&#%6{Wv42hUNCI=TvOQe~dq5007@w%V?qwsB0K^~7~?!ds+| z?$LbNZ~aH1r+n|CO{O_(7w-3wcp0ygEXZJUKEBmg2y=9 zIg`T;_2+BVIL1+NMWzjGwh%x(!&PNxq`-(fz<&@B z%;jpQmAe9P1cd#1UfZjnKYq4x@rm|wuCYKR+B+G)lOD7 z3KFgT^ysR$%G!p4Gbw~7i37J{g(+LY5PLqb--=|v>}ituse_T)kY08KUw;}bbWSjw z^a{yT;h|0Vq=z}`aVUNjr_|2t&IiK1w{}s!L9ncenY)(tNFdnwEl%9~GaZgD*FX8V zK}w8xUnk>^OHq_n2O=dvQ(Ijn7gq5s{4Y(RWU!tdCmPe}&G3oEq{@vTw)~b<5g7uq zNT+pV3w?=(S7L4j7ICHT2&v_eds_umWu*SwzDy zJ8LBh{WgEvh5#@?&%dkvTb`Z1UMzapzjEi@;T5jSp1ICGxBZk2u+mlK_MQI8hsusW5(d*C}xQD}5$LS`@X8?^;UHrpl_AfwQ+Jw?x7-0?PWu z#mS$$?RT*%%H8pRhkrj`cX&XvyEnEVAAxAft3T*_@?|oEWJEBaya=%NSnvMNBI5>) zJot1UL!jwZ`QBaj5-aCH;l(@w7~Qt0;vb)}XP7=GYei)2+=7A9AR!)7o7iF2^JRpV zzY|+brX1V_`O5@{Vt!!T&=F4p4pg*{YZsAX*D)=OVZ3C~7Ju$Zqp1#?FH{u1iK0Ja z-kn))3FBSiXS=W}JVVvcf&>4O{#Ram^JI6Q{GIq;L*pD$h#S4C3+r^#w`AT9q?P!0 z>(B8l@S2IVMzQDXqTAsjhQ$Xs+i2U1?KcUtz>Od;CVDAa*Q>&=j|0T&w&&p8TOI7# zxIrSYu&g9MV1H{^I~Fy<3=-+h4orm{MZ6LiC?gn!hjRO0e##8a%hR;7nL9i}j(~+* z`3ZgN-N#u5B{s=&m>|s<*O(wARrKn+kclXdM4T%jasNnI%0Mncj=jXOj#2d$Ecw@T zoS(?Gp6P5vfIX~vbYhU%4|GXOPxmtlrR-HakBBn^!+)rJJcoeSkr8^3un*`t+ zErO0Ev1bj#?pbpwPiw7Nl>auwy}FkL8QSO~mvKoUf}LV;M@kF=+~+X)xb^1G9&)sA zoWUxr*?*x0nCcf#vVy5Ke-Yd^Qo)bk!m9!-E8YyCMocF^=-DM3A2t}hCl*nxyk);t za@vPRBf15Rm@R`U-8pAwOc;mO|2|=4vuA^wmAv_4R=^s<1yDMJ-!GqPX)l}l0B{8k z`#diIEI`x0EhcjK%`hGRNa;IYsYOJboaAv~?|(V=;qD5Cj`(Q?5GDM8=BbZP8^GQTbvxZzxFKz zLoc3SbiOGSTkJOUlr`_aYC258jl$IbK59kR-v%zYQ6Hjr5`8PZB^~8p8HDf$Z!vno z{C|<|pD6uSr+GAq8JkUBmG&K>KLkEQ-MUT{I#{A&%Bmq_yt4)cWO4;@p3e^g{#y*K zXYJw)%w5>jYW_$V=Z=`eF{x@As;7;WNAsxvcuL+Woy8p9cA*%!6Kpa27~JW=%tsA6 zS7fHsje(RPqX_^Y5Qiqzve>09MulAiMSn*Y52-jXGf_tVXOy#(cA-3ea11cUY`zi} z+qPl*=f^m=<9bHdcl?NMekMw$4&m*)c+GoHIb3tn)z?R^$ap z%Fuq}ub~6;D+wP!g)th&X@#=k46>y{<=mq2-$f-NXHaU=)&w`Bp7 zWH4DrN==-`wk~6keg(iJFw?gzO6oYlylum4V@*`@$7J@&x_Z$`-3JX}$A8i>l5epX zkwW*qy(*Gg{XmHq(j!)h*06*cR^5E<<*@VbNtE8|Y6ASb-YH_J%>|S9`BE>{4ZlTo zLMfSqSBF_dP^nK;63eK08pJQ;c|#TeQ{c3Z`k%ua_sA*^yMEN88~`jp)4yH`PR3~V zbE&9(&DXwpU=atYf2XpAIe%Ukdb?FWL=}R6_>e)x>JRC+udhw4j5h}{a;L$a{{@Vq zJesS1r%eGP{i_5jWK(U3X~CGZktU29(C=e5Y2tCr-*c_3Myih6^efUlm@9Ey~k!}uCVwuNV#;pM{}fM+{r`job#U{$;2yq7b8A5 zUdl3|TT_cHaMlg6Hkh}D^{@ntto4lO>7=y!FE-aRbFuK=mwW7yv5D7Ab9$5&C*&MU z2w}XwP&ai)r6bvOvw!>M7gIBs>z4T_zebwXOmO}0k1#Mf)IJba$cbM* zp6sARBWNKX&xUgLqc&5R#~zA=l|k>hQONwWx+Y`b$qR^6#Z^_vXLu>LYI2&cn!2E~ zanF&B?YP~XQsxaHg>6aR@@@p}GPdfQZALOV9e{-$kai-1!GF_0-tBMvSK}+tKy>hY zy(JSG1U;=DD*x)a?7uj;-?7&sTDDy5MbvJ2fCLJ#h)`Kt_p(=tYX|oje|G zBR69JS4E<6qv?g!+l&ZKoYnB;+1>@LypY2Ht#>h2kQFOE1K-)zwl2s<6RjtVmtXH& z**d{d4Ls%6RezD}#B7?aAiQm2CR7Dk+79S3Opms~*GFc?`0T<@UxDG{x!2{dISl;y z3+7q_7*^}isx6fq@uQB+XYsuX9-g(F&3}F(?e#Q5TXoGST8pcxy#xD- z0PIs!7>naoo|*G0*3cl$RUwQyZj-ppbcb$LoZ?ZB*XiJ(u)3`43j{OUE6fV__c4Ql zN$vTF5e`k3d>q5DlAGTh09D|!4`c$~=dr>ma`Be`$%Bb=j~Dr0&?L+1U(Kk>u){V^?TE9we z>mvh{w8Q%z*7QP>*m5#Ur;({)Q(!CnjNTZ;-Z%vkn;((Oq`v>h0p4)+RV5sKam~Ht zsEE)S!<{>5R}~z#Bf8Wjpz^?_G?;SncCKD`n182w?X(W4E%?#~_o~sI4;a$VRGYam zhNvFz)zg*8*R6$c@Nz*Sx^gZzLWtc6H~Jv#PRpdQ?9sahPhkk&32DGw6r~V{>4^(v zPL!u>qd2wC(In_!Y&^TTTCFK`3qgfY)gu@-s(c}HpDI2y#^-EIC^Er0I`X`bV_r05 zUw`+%2CW3Z`g1@T$>J@j=1=M{-)T!I_B;GO*pjms|4evO0yHWDu*(rA8?D3?dsXG1)G^`o&_%%_;Hxsy-?<$#!L1j2d> z9aj>YKp+Cs4ZfSK8_$Q_YuwKZc$a$WU9mGS2NY^_DBfr2#=| zpyWVql7pjTZpijYS%Ll04@Q-K7Ny&No}3 z5S4HMhyu5Lb5Pv~6|aq`3l61N!%=-e3HUoyVa~!)a->S~K4>o_04PA$zkeT5K5H!} zZ(b>eqv1mJaEXl+kMsn90Xu3T0A)bIT%Ofrrj_aPkCIU zx#7_9+c53BzMVZQzNl}aGPTJ_+u8*7N&0;it-$k;v^2+c=a)IGqPX=}w#R9GSDuYR zGXv7_fs3@Oc_#mw*#J2}#(%%j6cMa3xN93*$Ao{1B76jHWZ>5i8Nli6L#L~qUzCV^ zo~)nMt7P#PRI6rw-{|#Hdx>&TDBEVC%TNjIF~@;=o=y)@dYghNR<6wL?q?%nF+m7b zt=7}Cr^ex+spfwKdt+L>XTeUwT-)-|$x6@mp&JV*E7~cTWi63gTz}`y+&VHnTv42g ze(*Us5UyQrb(2fBrjV;@o=ZNpMBc|g zp(;z;V`D;oihHkInrJZ+nirR$H~00m>jXkNzn^B&$ritEL(d5_aLZyGSP=?MYQDJN z{nFNaZ#F?3mAvWa+-?f^jo|#?z=?<3!6l;M8b(q(gyU6@e}C1lx&qqflGA;b*ifU7 z$uRYc!Ftk!bG_ase-Ao7{qGO^w zBZJyw z^L52yd8ngp>`q8|P&HTZN#=tyj~t^0L&A5Wnx4r+PYbV5<(J7(j$?qSGaqZU+4{fp z6#ajUKxf$Yv4*9B!Aj(=(cr`A=42EY^(I@n=xV? z2XU!#T-qkGhKM$gXpuw?k(N!xp)2vv#XPn)Gg`)pvFz3feU0_REJ5FK4qSN`$cY`A z(KfdJ70(%PXem3DGCXra&xOUzh%9peC_vZ0W=|X+zK*88P|#8?M8EpNa!@9@eC3|n zU6CBc`+vvx+MA4bdjK^+%D?30IVi+Mh{ET}4g1OKu#z<@58H%o-=6k+M%@9Xeipwt zn&4=!gr1G4rH*~iIJFN?rP|3u4ZCxU%8D+mWu#f4hp#p;A45_4D#utn@GGmA~)}f8eWKeknZx1I;otL#_tQqMCmnY zl#t-)-Xizr1pWoFlR6-?e2`zeA(%oKw;bRDGFBX!TXF5q-w6Y#f6Z7wlh7E4V=_SKsG`2_b*=eLqA7B)~panXgs7~%vLQYzx{LW^Hw-gwqg+OP9||j7Js*W zX7QjMq**Uk^lB%&O2zvY(t$JiKu|qX%Qy=ZRs(5k%ioKR9KT3JYWAR@GefMzCNA*l z&Fe1t?^SL;<0NbUbZCdYh<+rh@e!#!tOzCD)Yb$sI=0-JW6 z7JVKv04PA$zxM<@0HaV-l!s^KzK%&H(n>ujWOcs5cf5GsoArt!*YNb^8TK2A8?-)St%)$iDCGJ!g!a=SXRx5NzkqHPS4 zl>4X|GW!CSbgc(yo9CQC(0V_N(~JP;cHf*TBVec3Pf`qH$S~iF0ZaDPEYFv?nU(Xv zQ9a1|j1>3qZ-+-3AqghR$ba70UARgh148ag4^@7O%TZ1m4!Jdv(9VJePE&%1SUYg>9wrX7T`ev7AOiPWW5Sikue)f#-^6 zSl;hg6vb0*Vw^Kh-yaXn(CF<;o{up~!8|M6f9DG|QB0&gkLbBJ<~!vP5qhKgR&!(+rR5 zhhQ<|mATVGwZqu6A7{b8K{ywddr`^s`W9=IRLdVdwZ9;d zjghGM-FE{8`Q#v5We0Wlwcp(9&0@Bj6wt(Wl{Th*f$sYj6EpIG+wuL6OjO=>L7@A^kH!OYT-rI)Z;22}AI;xd`aQvYEsed$r8g)f6IPU&WE~9;1g`Q?ufqid$w! zo&w3I0n2F)%LEp2;joDQ5yn4Ac^BZy&f;MIQNw2l7>}D)Js#f67nI_!7>LRQe5Dt! zidg7G0omHlooO1NiXUfD#|T{-aaI~X3vK?V6n`p}A-^54-@10T>jgf$JJE%p$vM}; zT!b%7=&7B_dTHNKMxUWG#h_2G7#IP2|9-M5O$)u^)7Pm|c+{?(GoIu2C_q8#Lf@(G z+)X`uG=fAfxR4O~)&nT@ZS|;H}g`c(LI< zmVe$x$5Sj(+Rt4|GWcf2#Z)^{SreE{5R=q20j9m5WTky#%rjR@9{A+tKD0X7zFXcE zX~8$#b(9(ZfG9C8z-8~U+V);wHewlSt!@n+H|#H)R-<{8{#noJ)kE#kBo*QosVQCw}gW%bFNveOaA&zSu>izy+JOg^S80_&MRY zPIXJ$AZmBv0{{ug#%E>jno77)sq`eNwXU9?a!XN*eE=sw*uQr%Q00d~1L7ZgsFI%o z_Jz{1)R1S;D-nU6FQ3pkjXE9|8h=~xzLb{A=e3cK^Q5iH*JDF&0wEoD_91IDn#n2L zK=;+Ayi|n~>;D5sK)AoGn-Gxk!fTs#v5ZXhg;CI{2l2q!AWg)WF8M(dAx_tX> zqDWji3eFm%w**@-MmjM2^M4%$ntnN z<0%0dM`V35$`rm%Z&1p)kB14w+nYItr+g5s-Dj!_3Syhqd3EcgvVR6>33*5*%5C-I zhU4!@govg=P^r15PmyDeZJIu$NCLPK zrfB&B*guhrXKXz~$Gc!^?hq^c^Y14BM?kp0 zfP@~{@+Y`>J(`CtbW6hz0u@!d@BQ@PH{W1)qa!WwTI}pepKh+}!%I4Y{(vYUOqcn>}O0U0`xD%CvoCYNMV}CJbmQI?JULFCeb2)AdT3oJ_4KMeq zEl1#q<#40)x+VxCdk&*W6{)Cd0xaJ#it(*C#_d>C%l3I#<0i&g)cbFezS(RWYT6(= z5J(iS*cPUGDF)kGw{Ak?X@I(Y>1_gK{4VvwT(5x$sf-?9bwf&b2@J3|_T3)*urswQ ztAC%qvQxU_9XJ;ARX%jrd*mu6!aR`3Gxc9>3#j4;ajaf zm2JuUe?FUO-rB3RO+y!MyaNK#+xdqUGVUJnvPn4Ox`AC!gbA4$n*J|UnZ@s!fCfWX zSO^)BLMuMYDL-WQiGBGS7usxvSQixlAAd$xGEVRqw3;|WEL{fBLz*S5L8nL)Q+wq4 z#%gcADA;-EIKW?Z1hZ1B7GiuE-VPTy?x$Jgq3#QVA>rhBqa^n$9)p@+V5wNNR^qVW z6`+({ruSk&T}~i?h(K2#>j?(v9X50&RHq*abYkL5%nrV0So{sVJAvXAf?@fbc7OFj z>l2MhmX;X7#vrP&(gioOgQ~07dLyq7ZH-@yuEGFKK(fDY1xH4#?~_>(_$}rDJ3z$0 zKt{gry$_Y64wcXmrGMGhi-Jsi1(x|UQYooloR;JHXRh7?U5vUi^v^b$#%A-)uOJz81bEng|#v5x)!F4rG278jZ&>JN zS{Rzr8Sh!5^iEtoOK)FX1Aj`^Nue1qWpoKrULh%#>}jXF7yzbVjvdY3-H~Dvgmsln zVUgg2XwVp%vxVO_R;j0d41wyay|KH)A$xtfbL$yFJ%zyr_UR zm11*k9RY$4>>a1Fn-{px8uMsOu6FE8<9ciL)YqMQ=r>M$O{!M+2Hq(xbZS?vzYvcX z(!jJeQs|oo;x9QsE`Ppoww^*+HfImN@jERRHsCn`wzZX_@{qWkkfF1{D#z=2MUM#6 zCgdxTYBY+(p|0aBd%56$8eMJERt8O6UcgAEe7V+IV7fVp zi@m7{$MNKMYWr1au1$a(Z+FkX;{Z26$iJFrDr@SXQG<~Bf7^8h_U}so=jycs;f~HI z$mpPtGqsm@Fm~i{eE<0xE$^V!4xTmQd+p7xFTyXB`kyD1rVR#6q0DntBw7+{EYm$v%#NLk5F6jP4PD=3iBGeOARGWbn6jV};wGySRtBxM?johTurUHH~rprYUO*6pp7-X(S- zh>@bX)=VKAw-=u2p(x6fDPvM1GSYS4X{36tAs+ zw1D1eOdPans*I>buPhG^e{meUOt{zJFaX`Md!_jjRrWbakM)u|EIuT#0U8Ened&xe zCH|Nus=7ZI;vr>|%pm*lyDiFu5O!zAq$+CbFr{0`qSGe-c*Tz@R3Ma>SlPPP*t39{ zq}5*?YkwVqa88v-3a=H#L7=YnoUw@=63aEUW{mBO zkJGz`_^6Gxiji?70P9AuV3DtGdYPwSq#19{mw%Dlun+8nbeW_dZ4~LTE zW8Ne;E1v5P1qKBFrO)I^_aXhP?fR#Mm`(dG#bbpSvju#XsFXxBKfIH9t4h*q6Y{X^!gVBb~%k$4O)^op6%Hs1x9sx z@PCYw1fn4Kt!;NyCc6U_d}P9ZcQ|>}Y_aoR4-2p3~CQ-3yZx2uIR)bmRgsr^n#Dli&LRy3+JNIk@v zZDZ{m053q$zjDBhV>9u&yhli%P0{daK71j3QJOODO>gQ?%wi+Cm~LO#?W>rx{daOw zSBC+qPpfw@$Dm=z_c*~0M}K3Ff=a~=60ECXD3Tyfzn~IWPE%h^vuEe!)22S$#mAl%^rdH1gAJ&Ez*?pNNHOB>|89>=vv@UEH<_yS;V zZ?^Xu7x!OyyJTeQqaqJ4Gm{ZPB7cosDL(aeS`Ro_q>d2wYE7?G_om8uyJ~DA-Ll-0 zh;MWq>oQkFn1347ioQRQ5eaou#2IF}X zoYm5^bPgz$tTH23>!J^YQGZT#)zZ2~ zS>N&ZM!Ov@a+X4$H-SJEc`B6{09Jf;03TILU{E;$3?lfyUqng5DJlux&4UG#hFNjR zhGL%I=k@I%);y~vkLWD_{*TKwWP#1s+=%-KqBI`X`Q2+O$7Vv#V{sKl3~(Nq34KA} z$uRo!h44Shf|%7wFY)mHQGeZVy(Pu!bA!Ik$Q9I7)Y;&rbQBy%Kn$lbbHz4 zD$ze03uo)gpy==bOpH;n99bc}Mv+uS!^NB~unL_}5NDObv7h9x2bC&x0{(}KiL>HE7hg%FP9#J7$VfmQ^vsv|f;O&0k&t=wcw*r@Iti6RIfQhxt_2@vG~SC7rB36)5UIMX4>$ z11oTlceTGSdnokK5Vj5ygl1t~xK$$!LSGeQ$O69y!zQ25d! z>g`fU*aWMJm&8T&armvl2??posbaXe5Gpd52UZ@XL@KxL(4v zr}2Wxaault&&ZzpE))4V zf7ri5D=@QbB$wCTwLi~XT`Iv?4kV7_UehjWp@Dm-c$8L$%7;ZJ(p7K~aM;|FPQ#P; zMybYU^ZJwxAg=B)e?5^??q?K#gb7Lw-3KIm5LD~mA%B#-#MbJ4k~)a_4S;@hj&pKm za^&3w9m?PEGk3mn9NEU&WMpcUi@y?T5#TkK#Y} zqs#YZURZe5O2ZotAx0mzNzw&R0%KaEwDW*TRtnV1lU5IJc;TI48()O^9e|lWiaKf5 zhwJGNWPgqj!pt9`lG`)KmY3%7quVNiR;D1mkU`~!q=SqW zG+b>ndpLu}4w-bVS9=E_4*riBM0$q$k;ESVRMy)Iu&d?EXiim-a4%WA@j%y%s~g~( zt8bK;%YP+ss!h9xFlVr+xkcW>SkN+S#yj`V)ubF`t0S$b_dD4`U-yOpF||BCZgzE1SafrFn^ z*MI1X1jnL?d#R-pU{!Vjfw(s*)N8ZvTFtfrI0VN2S37ww%jb(Pk8Bv^I!i3NGOpdy zEhcOA@1t0_Ty_ZV>ZLZqHY><{drt2VwpaQg=(8+guT4+dv|X8opluzQq?C~$Zu(Zn zs)bKmL~YM}pt80ACqUT0t&=%n3<*HnAb%j8HRwayn>l9DP&jfyYxIMGV}Rs%{DD;G z=>)~&ECJapfY$xDB)kZ}Jc4cqM#s6(_j3OQg;P&R5ezc`;x8dz07gK$znbXz2$<)G z3FddwN0lxw(6z8Sv53o&6(=Bu42RC3AQA-;r(KG*J6|I3bfH~Zh&c`su`phXn15Q5 zz)az|?*R@Dxh_m@X+$YFzvf(%SogJxB&fWk!=VF|lC&af?$4I|@aLwc!y1r1@oT$< zFr)Q=g}x;FWt&Gf$A-=09*^OKTp)rs@?FJ0qdw%LkqxAnUQ{L^bu@)7u=y<%nGxxy zI&!H6M%}*Ziz&77+QO1d=xii%iGQf4#EIkK+dce8s5xRlOf8W_9#e3M$rXoFORHC= zh9ZUY&#fzwNU|KT8j`m6d7Kn(nOCd^DLi<4vhjfwRga%`wXu6=A+p*JH9e)&I;ic# z$+PLTL0B44WU&?D371RiQ{|xpJgk6okkXd}WKm-^bB(tL5NjhE6@-KN$A3dUHh+{H z&;Tm?<*p^g)(}R&FViK|@WE*_1z#4ArwB9N<{c#JN!P(ec6J<2%S*B@NE`ZXdLp6h z@4FP|hs|S$KVW!Do4H2jMo`q^sNXXzqJ=pc3NA8el4*iAW$pqo!qQz@@>V@!aXX^L=!Q9B3T#2?iqIGZjWW+J6MZjh(k1X z2IYknPl(e{&260;BCsi!@CNRUOm)3*6j05$hI1C&(A6eu2OgsyX z0&*CDv4r@ z1F%u+X_#bKbq|*Lyf<+{3b-&Q(nyqSX8ZB${a_;+EXtDHtJB`JS|aV%X?kmZRBsO_ zerjXXp?$(od7>hlYk%8N*7uI(S;w_3?u8 zq`$-is@pGA=o&wD2rA-%J^&{`*uTu4ZlY|YQ2;_fy}#il<-Xs&FMz}YzsD$w;85iH zY(=!|7LJtBzGRBqB)`kdGISl%2`(^a!vYM20|LWb@sQneE`LxXsvUq9uB!bZ7rH<0`Ffx$4l;g4F*<^{Y>9TUYp+xXvUhaA-Spd&^)c$Rsxno)K2k;eseSLQ_orc5d_k9( zWr9wc`3b>j-Zgw+d@d6*+*@b$ej~-kq?9SDxwhEN?pdn~l$Pq4`sALsBp$Q{!Wua%BlE7^iF4?%=mlSH<#2r)>pXY}i*D zQ47S7kbf{;H5J(g&t+%53AQtl*0hKFHa8p=yZ20CuhMqAQ24iveWC_k{Do}WIaRxG z5|n!&L0n%J!>tU729b`zQb0x9bEsDPaL2ESWsJ|X*K2~#-$Ad_4b}waPeEPzw5z=G zr9Nc2aZCduh8g1sd(!Ot8*-xX-Su-dLtxNj@qf@cbTU{PzY(#N8^t=vlIRf7v<;HH zQsYjK$lrh-mf42kpM{0Y02_;>?4D^a_J8m{rv#cEUR??yxRbL1s?;%^106fS*01G( zdCTds{BjTE7l3pD&xHUupRRfZM%~O_0J_nXXqluqcra*=n>ftkPwk}B7mNJFZA%uy zQGWv(U2M?#PrgPF9p=kX#j_D*X~_~YzjOjv0AxPKn4EI5FHiisWk+(wbxEew#zTA~ zN+}L`#@a-b0D9a9{Cx{0JAEliiuEkdQ&5R-WDa!96qR_@Uy!P^+-jatL>4QINsqX; zL01DPd=M6-4lqfsP&bSML*GkT`PGjh*?+?TPztO7Awb^0_GP4;?fk?MQ=$yZE@7|C z<0&QYv35a7v)5QRQ=P&DB`&og*ykSl-Z9;<o^$&Q z0QBV!RWJsob<(c8b$?(`Q3&lH`&Y>Gw412q*x~&e#@uQFj%G`q4$ikEiu}d?L9k98 z?0QX5|6;IMRCg$Yg8=x`8y0?gKMm6nkwG8+5~61!(=F>3cSTL8kQRGn6huVmV|#yc zNxSFEsC>X2pMdNj$ux)WEAr*@tz3_DC3Q0jgSPj68vcMdtpMuC9dct zY{+xlWn?siEDbp9N25g9{<;dv`G3$?g)C*4obxkA_Dcf`H$jd`x0yn<_%88l7Af;p z)B8rdiK|zR$N^h~IT8Ym4FiWWU*E(iCK;a8Br>QGH%P`PB!!#DMS=sMZlQli&y7QJ z>p8Q_$}T0bTG|GITy7w-%U1a)GwwSAXf|4aY5^T2LTi*B93QB^U~biRITTUDtiJeA zH5vu4am# zzy>^M?}pp?Y_yW669lxjhyAntWx6?O)&V2sBE$&F(Q}4+0EZGi&;Ue0yT5>mRA7Ik z)T+j|D2B>^=AI%q;S=!-8oYP0flK&)4B4Bz@qgeeN$Vm&fZfWjVPHSCUdV@NDUXOk zMdrfnw`RK5B_A=OR4sq_?jgv-N5rulWa|7(#BzgMJzU1_*zpt-NhGs^2;$fWXI zrXMJ3poS^gg`wRRUyn%cnNCikIG4ptblPZ9ki@3h{7mJA<=Ik*d9Z)p*sGMe8}AXLmfk#k zd)}Ik2D(jUh2Xe8J?zBU)KE-KmO+J1bPSz-Ah~}2f{|RFE5rPENZnI;gGe`xe-E>{J2{DMeQ8hH{6%Vgo-p}ap|E`FYnAsaT#q|3%R9TTEMM#I z8&wNkbBRZR9$|mK9o?`yGzAHp-Ps!fhrmP^xk04=`st)LA^et7vo60|=Akd$=9&MG z^I^hHY~pY2jWAjt*~rn)-{B5yW+_Mo^T`5!29u8KT+152rkkrst}^1`Gz-r4lQh)W zWCMG;9GDX_txgg#+=8tX$eSw_gVd8*w4VD+EX)+4Pr83Mpx{rMKX9Pyu8>MM(cs;C zpn&qyCgC{V!+lsjn@k&Cf>$VM>5Xp~od!qoVZEbR?TqPZ%mhz1`-Zt`B{^&Ah^7zlZ)ZL|&$ELZoD3X+#j%>{N^I*={bCO#0%W_6OJ&|`WNrjW)%JXWQ9F>}ZT z09=8?KA>bpkf{|kDrXNR(m+Lvr&Zak)xEye1H*sh2i8Y!(8xpte)hN5aG4f6_1c%` z=5{EMz(W?Q=SQaW(R-S!CP=TxfT4Q*S^z>oy}znRWMRy-J^cHrthMWxE*3R(3!0yq z&;Sr6?`0tF(2?8EEt1U#EGoYFs*HUcI(z_+z%M_=2MJx_y|cZArO%SY?rv$(=8}2J z<&1wFlAz#_jjP2?-ow?P^U0HABbRYr|6f5%nT3St@h%Aem-}B{qqq?)jJn}i&Yq5& zk7ch7CH&3k<16lTA#;1FUo=F2Ac)aU%JuTb4?n@5eZ?M}h-_jO$gjAF{1lfF1iqFc zOHcX&*&&@XrmgAQfep#wW%W-^^BR{<$Mt{y#F`JqtEwP2Ugl3Qw<$d*_4#p`xCgf1RaQ+$0v4yQ&|Go?g!6P| zxmmWxiiff?yD`16(e(H9?*ulHe={~qXeSTljI((JAh@a+iCI4^$IA={1Z-f`G(CUv z-hrV13gOeE%lc@~f*B094otr;cw~O+9AtwXkB(m;$yynipkSM3j&04=vi<`fCz=m3 z+@K7hDLMKx6SO_0r5sYUmDP8>36+yElvUP+W@hv90lDCa$LiC^d@rI*Vj}#Y|$W+itvIc*ZK0cvLozt!;+OkEbZQHhO+qSJWZQHhO+qP}nHtxxO zx=H=PXe}c>l~jML5O)r8h4%&m-tOv)@VQb6k2sBVd0pC7C0Sk?P}0xqyTAL7`QG_I znox*Ex;J*D2^ucD*z7*yuG(zV2(nhOY5E=o$aOkSUvO{Vj5t`i~fK7i}pIF)%4 zM04o)n*HkA43`hHo)_LXLk;z2@4u40{u^8KYUu_yF;lO{BwS^;KMx`Aqh_a?AT`a0 zIp(9Q8L zpc32s{(22^3{H+zzkPowWu{+~Rzz6F#uw3-36i^o{fKPz^PJc(EG}vmWOWi+-SmvK zL&g; z`AQB&bJk}nyI1btY@I&#fR25r$7YylDFap|LfX&0ifnJ(gdBeZ=>@)=gRP@>!Za)3 z$p5vuJn?xtzUMriHbm(u2-;*&?lOXWB&acf8?iR<}TCBa@0Y0 zvS*N3GzL%q_DFx|?1#!U6HNt1zXYWWi3@T1Ke2#(yXD{MT^X^tPgY=)IZOr55rcV z+i>%~*uwq}D5l%B*Gzdo(7=t1C3y_)*@cnnZLn_qw6&|ls{Z0Nbgd~cUH!yWDTF<* zhZjGCF*aVA7d()tLs{C1-~M~8#NOJ`XzF`T&~x~Do*_mf{UFd^W`0g3vMvCw`u(Tm zI3?AE26lg>6Ku6+@s-fFUiDj6EkA$8VZYHdA0II$wH=lVv}ZscP{sht0@ZyUb-Y>; zT}V*1|J?chde-CPX8O&ZR}nfE3H?$XQ(^O}AjVG%*mI z#{AkJMcogXXwmyBR8wygdLn8dJ62H1^7>M|f?t0%P;=xvrs2ExJf9o=)@X<)vRjT{ zu)*Dn)O6Uydr}Gp9jZ4NbIwla3}XBsvV=tz@$Sz|N;Mv+hLC!A!3REavaQcDBNGW9_oFxbbb;v9Qzun-mt$8VOxW)zC>Zq;FOPO{~ z;jEt6)f%-Xp_TCR3{i;~b)>mdXZ`_or-UR&WE~PEGJ4qG1t6;gx7OVz_tdiUe`sY8KCHXRE01AihCfr=` zLH0l~$r^!b9kf$)DnoKKGVkwQ=YR+rTe)qE{F(Ok!&%-w{c|%W@Jw(t&9}k}qS3#b zi_z8W&pM9=NWH@`1aRGbyO|Jw*21-LI`*4bRRtEGN`X{{vIB_+Vs%N>?U3G2#_8W% zV(OrXNR}e7%-@>$56e1r!!70qo8*7Pk9Uo;KRDWkmS^-V5mK<`G@4w``+e>^LJ`oN zTAjz^0UPz4;-vF)uTnVi_Q_EhZN`M%{s7H%lhyCP?)&dtZ z1s*r(9Cc-i#s*=J%GMGc9*)AF2#py#;k7f;A#OO-P+t*HyyC^u1(kn#_O2?S^)~oV z0Q|?Ol=cJJoqY;mYXZb(Q&V+t`sii~dEareB=fYK(}Fe+qXg3iUpyVwq~4R>H_Y9- zQMvnb+eg-QV8MNeA5?SJipa0FrXokQ4i`IgkEzX@$W;fxQ3GRz6%etUSY*Cc!bSOu z=H1fy4ve)+8dDx=6Wo7JhqQWNuq^W}FIvcM2dySc zpVa^)M-)vTI@^CkGf8#(TQIVt^UfqCNx5;VubPaYF7 z!sHq+^wB7m|Mu+-!_R#q_5otBmg-26$`GbE|KZvarkoIt*yJ>DCQ$>w0aMe}r2gZ2 zi*>J>cM_aKwO>m2x#o0et1#7Kl*M180A%>bzz#>7V>`5U zOk7PKf4KE$E|)%i#Ko5I-ZInSJg5_cD;$7MV4)A1YFtQuR4d)w*VSqOt3-SP4;bLl zttD-!@-u%NYH@}?)wx5g_E-x2iq_E1$znfJj>OY7uKj(tqcH{aPe48hjR_*>Y!dKN^WJC@jsiU4m^L1*1?*36}Y3Wj~faf?rU zmm303gUXq0l$c{o0$A>e=*jyDrRu;j;dKzi`2qxA%kNZQj^{n=s8YV596ckDDmE;* z+w*^@&i!`~kk(D-@vX$B=eCiVx>rtqpNGvbbR&2I5A;>F1I{ulEH0YqUwKS$4S&DJ zS6-Q~Grn)Qmj+1%~G+_ke(PtJxM3CO3uiiW1yV70ae{w*i&ua7;?%YJC;#4WVzQ{`5i1nwcGYZ_ z9mrbyp`9-55lZvtBp4~Tl=<`NbBUIXz2U+qz-y?n_5r=EbqTJ}gQ5s+h!UOt_Wi=% z_qr<_V*vjY3=UAz9wA=;vp7B#>)^+5KLZv>cG^u{>R=>9Vhl8 zdbGW<4MGh=1uhYilkyN}Ivs*wOz7 zd(wJlik0Rz+o=~P>P{Kj!V)J$b)U`Ch5#!(MsnEGl#*L%o^b*m)dcqM*}Z?B`Pu4` z;j!+=fGFg$i)h?Ddz4JuRulm+;Bepy^$IrpWQG8z*G59Acx)W8RkPcfAN@P#R^i)I zaqNW$0=Xoj2zY5la8SZ6dwr4mmFl7-(8rp958hEMUDT}zpp>{wv^{HAp8W43wTtWI z8`WG}F;Q!W1fvwWOp(fN5i5V8{ER>D-h(d45D^$5B=xA9%|o$iU6Q zZVe|okBA~{96Y&gjW^?hJJo{`t;d;vP1oaz7>+Q?;1qILM?OOoFZYR~A zW4GqtHhsR+BOMxDho-EF&5^rc0z}mTri>vysXKq$9zuY=702^W zB7amYGu@COn)=Aifpk_3+f3 z*1tZ<`^l`=Gs;FPwOwe*t2XrOao6k~iXcqZ`szE!Rk|Y%sL{=>E2ehzkUP|#ITWOj z3Fw{B-Ot979df###fpEjQ;QPVsFbBLK}i^q#2_YGw}uv1{wV2mBfJ_yFI%ctV?nf# z&v}8e84Zv&=ycU5?k3jKGL*!qB5{sUPQYK#dz}5&$#~P* zxB5%x@K@!sE!q=3MU?}JwBR}p;3kN%h05?=6K*^$w_6`ZR<&Gftb4f}HqqdEZm0{wj|iD&Zh zUlK`VyrCyF(=Tp7Z=r85HhyG-u$z@)=kb%gYa0?2_H{bpxG1 z_u`47`+XO-Fh~IrM8>{(fq!WKe8S*3WjL#4b!eAyGNim6SN8&^e8W+IO%?&5?5a(> zimZsYy-M~ChzKw!M{NdWy<|mzFbK*ScY4;|!Igh_`9|LxAw2I@kGZA2q2_3#|iK zelUN6r2m0q?@gh+e5C53&ODoR01ymTGwKBaO>co!^_R+i6_PbneP-_^r`HNNL%goU zu~tk+Qio46mLQKk&zS-$#&L|zzy~uwuUuZlwiR7*Q$moC^@ZntUp_yDvqOCS%zVTE+|f7`e;Qq)0r_$T|YZ+U-uV3b4>_mh1@nsEp6sM?OvYYm=S9agdLStZQC zv^$tmS6KbVL`NP`duA_336MVOp}cYcn1#5aEt=9!^;_P>ak;q89FQOteOBub9LVE; zB@vzKpuLL;j|WVp*T=HTUU)~tVd3#IZs zo8!yV57G0sHroym=YGPd*g~XzsL;KhgyF`UIhv~|q?r46QiIkbUq>G8Qpu5tpP+!z z?)JyL(kC>VA!;W~;#YXmepcjC(AEQ04-SvO@!b*6`CYev9DQvA!V7uX3%&TEU>Lt_$nFfWmOHO)= zv3AD9A-bnHYMqxBrZ!sPO%|EDC(Q)=-=IotU&ukYSTRF?RoenW;afQAoEI;)9)8;U z&L1jSnY!xdEg7c@KJW#Ydff6_vqifRtQw7_gzkBJjlm>ZFL`MfqS$|m&Q<2C=y(&x z**5;~*_E5G-Hv!_rIx_3z1jFEilGUZR^T6s)z(M5tUO+r6~^%RfloCPb8K0OMGbxEME8Km?8!BRVzFcFKQv#L->#$DTuqLqn>z z=tth`;t=G@1vePa7?OE2VLQF;S36=Vl4jKk1=eUa7^vqcSCYcp5k#bjawuk!gm16q zXF+=e*bM+SK*_&pJ>~(r2BY?Zt?86T($TNGmSO*iJZ+ixIA`r|Lcc29T*t`>| zbG)s!Ag`!tX3xvF?S7b_ccovH7 zyWx>FVTKesy+arh^xG5U<(gf%oEbhz!(Z{&^BnFqrlF^>xEgUt z1(7f@^^1Sb7niZZd>=<7x-;w;gewb|% zrn8by(0AfW>;`$;NwE>{lT0Rz-=`TG7ZA2?s6Tb(D^%B;czK@!C;had)siTM-~!EKFfx~t0m<(GL? z4YAs3S-n_Z5Ot>$@VqEnD*!{lx1Z3M)!)?K&%1d4t#O$pg5QU{LiF5^+hmY z?EW23`e(R1sofKaJWyp>c-LVdGLwG}O(lTDJCcKF@*82LY)&Meg<8_3-fs?qM#Iqf z+o*kmd4oKWHr|`2hahy~1`$2WGvOHHbL{sRjCWb76aBsoLXGZeMTq6i-6D^U@RX>9 zz8CsQih@SoMBp34Kmw*W?+eDNC@I~dqv|-KyEcv_

d&B*eqG!`b$-i`@shl4v=Q)*0{csZv(R?D6ymrAe5?X zfRNBL9@P7nCZf}v7mye@TKF)%I3S>o?fe@`JbY6(wgBDDZKmk@2vcw@PUPFhjkXqd z1=p#2g)K@^E@i8(E%$#uQ&@kbkBsW^Kh8?HWi(nt{Z*P2z^d&M#|$SEAP!0u`L%6~IMjahv@sv_+H#|1{3-f;z9w&5UU^0Pn zcoXL@9A7o?e!pa+aJ*_m?KKEt3*oJV%(FUa(V!f{QE>?b-0< z$K+n(U6ts+Hr>xX94&v&*M+J6vCK1Z{*d>WKXN3FJ()7U<1-Gg^ke>o$g1_lEu9?p z`-bxXG(gM0vho?L3Q;Fjp*JbvvS%F~E#|l9qh1>FfZ>`nb1+(engn2OH`YM2b#PD_ zdf}qqVS_uJ6;vjck}daivopb!9oMEJIWiLEzB@0@CEgNgu%Le%e3Ft7Vg96t0OSJe zeflS*!V#;DbO$V{sk3Hc(BzP%{$4V6tv-kCN5(?Z@8d)!0aFimwF3jl01)_DbyF;} zdnPU2DexAW5d9Qk6_M4D{N=zfsp zEK+LU=pgekr(K1WE86BdRyl7(qh@MME~{FE#ZNfMv5SA!`9Rz&>r95ZZC8i(9ap#z zs&+|6K&YDKF7zfp)7dno?YI_QYiY~1mi4OwQjn*r!KvMoLrQ*!aEzsQ>im^H}%yljZbLOM|)5Ng_9$7{ljF_uKMJ{^&spw2+;RmYj`SNC`7R3 z$cE2WlRnabvZ+3tX0|d92}A_x1cX$rE7=S(fQ>45`jd%6H-v(GRmn#=D}TZ)GV~0L zNn1!K_uQw(teIER)Z3E#bm=Ym!T!Gu0B_0_h+N&=M|Ks6n(qv>mILE z#UOu4sx}S4v^cJYL0ty(JC>V`fq8(B#(++k05m|$zp*sr)$q|;4>LDRE5Bd?1PgNY z#40gP=5o6^+1s~U!@lwB*t+rvr=m`Z#RKmuO=zV;go^Q+-=^leOhg{E8!t;*aZxFr zGho-B`GLrDsd8PM9l^@4Q!>eB6UTsG zO^$RcUd%yn)(=}-6fnA0nhY3H?uUOk9LCcEKw*K2g}+gZi@kf1F=#i@6C13ah7NE2 z7#X{m8Z(3kcx@o8n2tMeGMT1yAIRx{v1-Kl1mWy5ovP;(%B%$fKDlonCzQ3ffL1!kK?*uNuZi zbX`%}N&K&l!B+}i91=LgU(F%j74aRG9~2*^+!;{Ls3#moneLHN3x}S5;oQB+8XVu7 z9Z73u^@4R>p@UMaUj764mx)m@9_+EMtD!;&V|{LlW`P)hNomP-_BEg5k6>&1jOCHCdbj@$%E0qO_T&{8g}*> zl$4mnHX>6d|0Zy+n_T7qgaC7Bi1-<=I)I5TNuQV{SJrXHUr}8Q)`5TC)oqdAAxE^s zq0e&l6UF)U5TK8YJC1Ed&C}YBF#t3`%fG9}+{e#1p1>=u?T)anUg^*?xF*;R)bI|K z)IW%*qs6$2ZKCv+Yf$rT2E@7=r2zyS16j<~iI)88GNYB`t8uX`I^;Y;OC_P`?dX%4 zbZzgW8|VOU#`C~zb0B{+(O;5=UdnxosQDT1x|A#$Du2rIs2aJ)6 zJx2;&+?RgPQPoZ1+MZ$b%i2*sBGo@go<*nEQK{}{ipC#7r>jC?C(S~u9Ftqq(k>u9>r! zg-mFXp(i65G$wy>m3|IyWLPpLL~SlGrPmn3{Ko$Bfe_iHR5oo=vzKn20FO}|TE6$* zG6KLzkYMg(9F0Pf$H{!U}`CVHufPkVC zhR@y1?pi?ws^qrCID6;Ny=kM;)oTq|9Mvu(Td#9fxV!g)nK7p}#`)U_7ch-g4+jMT zuja>8@bD+_PN0R>j*Wt8W}x^8U4lmBY~zymme-Hqk&s@b`rLLP#)lM$Cno9Ztmt+u zIxvpv(2ajI)0DHgb6xiNl?P%m8amn+e`;ib!D@yEQ8>x=+$WZVkb!T_cN&H;*_CXfC~{bp0R)=&@T5&d7Q_rA538Q+fW&f0aT;VCeo0@QlEl?}bXKnDLD;^zWr)M*VSpLrg zirDoge8J8zX*Q7Te%F|73P~kgqBDj_ZVpVrZ(TewT;5VUS%KeikKaE&f40ylR} zV_e%ZS)>xke4{5i+>k@C((Y&;r@-~|sk}VMu#p&|oIhPbrj4+iY{sV(LjbDpkJ_E! zrt!S%J=IaBJX|;3g;cNEAoJF+&x??uw9|jbr?cq)J_B(8G=Ymg7@R3yuOB3RNvYk7 z$ve)X7JcOXnB{0LtdCnay>wJZAwAc-Nuww-a503zasmq8t{S(33J-wrs0mS2P!oiU z-jSE!6g0NC#icxV2NT8bz3=CuD}_UyHL=&c1x68fU5OttkZ2r$wY=uY5AG$^LkE91 z%h&|@L-5(Q8Qa#&Lcll&rv7`uFbQy##BiaG`k`vr6#BmcD#WPmxF#_ij$0qtxN(4P z3k_Z_-%t6s$uW#DxAD~EnanzHw`=jdDDtJ%d&GI6OtJ&^YXi$-YHW5-%)13d6occY zx!AxtcV)+5wXAk@>1F;e4ANncomzhi9rlxq_-SYk;xgA)>iNEx5=ZQVBgpY@l7WXe zqoF8vG9-+Msk5Vr*ERZbrVOslLxOwAsv%7rTg+P_@f&LUL*|jaoS=YqGy%3N(M~vq z%q&;Y@Lzz(F3z6wgQ24${x2FjrKwYn4J>`-P8v0TjK)^TZ7kuK>6g&@#>aoOBHy6! zNHE$-T}A0impx?a1`wTmMu;=*~sv(h@2Ap$? z-aGwdfGZV2s^ppAF%i6&PQrhnaz21nI})_H;GCj=v%mG-7{81+pRlE`kMn&Q}Oa#m1OZwEE_{Q-lE}rNO`r*aQI83mr1D2^+2aF$GWoM83Ct3OEj7 z%-`--XDy$iU5_9B6KYluf!^-u{pIb!H|6_3(GZFGyIJFVpVfax_*(D=wgE*Bz4svx zrVcy*eXjq6w0{U<=~OhNohf)fZcUOvPX#458-=Un9Fw2x2B3@rpuY9y@A~GQDE|`O zn+MgHSu2}%s;eOO*&1l3ues?pCc@s-ZtU0F?9k!+2yDrmw>#XY_6t7fn_+uH6;W}W z=~q;8p+I&lflPlB!F$kVkjE*O>B}I+L~tH!``79ti1NVPnas5np7bgYH-)mQo;&VT% zTOI1@+l8intapniH7vPX>z82{v~AqE#mcGMSu#eW-l;A`W%}#W9%~YYfN88rI3|e2i5w ztM(r&idcW79!h;ws_P+^+=4v4L?PyKX^^J@kbGzPh;6Kzi38R-+xP$l^qBMo+w9bx zvFoB!R34#$n+*a8{%pE*hg!BwIwxu;zsFK{vikGz!6K~W_RSRDb`m(_oaUJ$Sp#yr zW@Y;FL@Lb#Q{Jv;3ek_7ciFq6B=EWE>F5A1K+%7{m_@$WFO~O>9*u1r#Uhl}6RwOG zmmFS(Ss)#9h}c)^hA^PgGaC!a8prU*Xv7yNB6DYSUk^{$ z1S+@RvHn>tf+Lny1lUlG?rn{q_O>Dp4v+{1&35D;f}hEtzIhOV9ma6D@5*$TS_^16 z3{ii`kYq3S)BxQs?tXY5GCV$ea!#O|w`sVHyxpakvna8BDA5_6_qUo+Z#_TEWUC1- z`=D*uqpX<2Drg&L!TS``{R<1{(wQy!?RWh6HU2pgV9KL*<_o4BIaKM$+^M3R!q~}r87P3bbMJs=$+LU) zr=ScAwP%b}4b@GaO}bDIXP2Xd+qh3D>_gkYIq3`tOtll5>C!^X9!q>F)wPqHYt0$qPiY%kdhJX z=zGH?^ncHlxCv**Zyxw!{K2i2G|k+MD$t-*JQ(wmj|~8&`gmh3PS##TcaG`ev#Z{> z_njVxjakId-`T#UYL_p< zepsIz5y0~3fs{S|@bpCUo05$3!O0PoLNpN$yL(>y--eY688wsY{G@pp9Qzry_pboNqHlA2~0Reht- z*b%xS6aboT^2xgY9N>RLw_;Xv6VHv8ZRy5w-y?HUFxdfekY%JT)DsU|etlvUhK1uh zS+^}XgAj%8Q=o6|H)iU54o1Nk1Ar5F=%ew;SEEEF5wo9uD>4Rn(CH*6R<)$2;rcMx zAj|J^C|IB#p~}lu7DzSSYWLZI3_O1*3N=7CXLtRvTcbe|qaS~~xV|MfCQ|UzxgVCG zO9>yjXIWy-yD~c5s?tt96K;SE8ot&;f36MCHYn1r%0n|14$KNC=VI(4RywKbu~HX4+^3 zahk_ngmByh=^}qqm9tQN%H{EgwL`b({(G#&#w|DD(-xZ9-kceBLyoH2ztq_yAaflD zk6P7YIXRra@}MJ4Hxy}bx>P73<9NcaC}c@1Kch`nz5)%3yB<3s**i<{;^okecpC4a z;_Q9(hZh37p|3L=U28}7Ct&`%}k>+FDmwJB>H7mV`?9 zXPI&@jjAL7PEQoe(0RwRT=Vtpw3E)bkHbh)ly;xH)N8rly0hoMEkLrlKZk3g9(b)X5JE9<&e^iAsr6tH6Sy6k*x(H; z-(`>nbeex3@P<<(iVVmMpH zvQ7-acnXEhZF>$Isp4WK5kx6bs#c|wKh9|5Bd?mZ1T z#D~v~qBUm%L=KZ2F)*V=A2SY|vkN#6`6<9$Q4R)QvmhSL7ANz?rlFAK)|oon6R$39Oy3r{YbP)iV)uW|3R1HD(ga9wF_Q#JdhMq7RBsN`Fu`zwn_<(0y_ZGe<@Ksrl#%i5!2t za#rRb0WrKRQe2VSYrsaSU)h6FoB-29{QKhB%-D3XqialQFzBMgVGmuro$Dye8lSQk zMNNOmwZ_hmRQ_vRY_Tx8wf?YXCvST^%u63;=)*))x64OxVLc|y(boz}1LACe*+ZJ) z$L@=DDt~q$%htS1gRGKI%R2+K{0e`K`l+`9r=W>B6{eXVg5E(8Cyxvb&*(Ca4+}dx z(@Q_ysvOvXbyhRaSyVw7s%HmaX{yKU+|$U>X7&@5ybz%jW#;PoQ@p0;gFUP`j#GZP znnuVlHU{IxWQ}&}E7Wg&5f)z*h|IZ7%lnRyoJVw-EYTkLONCYg+gC__hSIkeAp|c1 zmrElA!nYD61SbNQJ|+azw-+Y_4+57fDFo!V6e+Yw*r3^bWYYkeW*p-|NQu5sON@SRN>7o zrA7!oYnICrZ0Pr0^Kvuqiq1ayH^*~2=4Zu>hE&SwhNt}oseoiPN$#;2dG6UrQK=e) zJ@A+rqctG;i)1fLW(x^Lx*4EX_n%z&NCLcU$@ZPS816&uwhVu50I7KLexzbVW|t5> zFQiVV@s~p#(b8j%4N&QassOf*t_P=Sk5DoM@dBT}vlZ-LfY=hFPEcA#zSTni)syTmzH~JAQXeo`T+8pBdpcsjq0HBCGFj6)K|W zKjIJehGye9%X_z{{W178k{Xy*LNO0ozD%b&f&f%NtG|CwyuE@LdI0LBvX~%oCCfqX zantZ2uq@2KX1tn~GRdxiP7K?CdP_(-?pw&L(UWRqb2Z+6Bq7S2zuCN|j^SJoKrd(r zr;`kp6cuPAYbh^aMOAUL(vV@ebB9|nEJXZk`kNGd>3N!rVshk8-y_&p@NcRrai6x{N3f{|r@L6!fFhSQY-w!DwqM zeS^mpqeZj#_So5|@Y>pqb?9$E8`&>n@L`8q;jh|fvF99mtV8GeUH}bLF3NpoIJhWk zc}_*{9n}oUlKtxcRMxO};Fim~I)};oPBu1wMDxr5SU{)0lin%x%bH;Aqew?0ziO+M zRAlt5S?T|G7(lex_@u^MRI*MG=G{B&mZT?|`e;(Ko%>%>h-hL#BXr}{crc}*U|Q|7-kspVsp$nqcTQ$0Dq zP5K0Em_qr3ENq^=4cp*68z|Bk2Evuvu#OB)b;YWM~VoN*h5-hClU4*>-Dd;1bKw+Gx=K5oaR5#P8t z%B@=rqk!owhCo;jF|XM>DOU@jDvRY#hLmJkW(H2I_3%SE6bUQ6Zjzq>1MFRYkBR&H z;H#;2f0h`8OQ=b#vNW`5=uzF`7+n ze{M*otW;J!u6osLxM%71!X)dDa{&$M<^86D1A0l_vU?m#G0rbSwGOLnzA%#0itnI5 zeY&$<82mvWu7QF)UFHn)o*}><(=uovPXAJsQc^?W*d&34bd{8}4L-1cM?&pw^uL5s z`IT?mz5n(z(4uD|2;?bMc($q&9K$9QAW+nfrjz!7kboMf%}TLqavn;W%24&c%nMw9 zn=*ne^Pp_@>Fc}|Q$v%+h%&|xypY<^$Qod3fyn`atXsvNlO^%%Cs|?Ln$6uyq5rt)OoMaqk z^buk3%)lBrLcr@s{_zz}IA6$vC#^`|1A6uF4o_wzr!|P=8XfC@=VS9ks++AIMKtOU zUWOi&0xnjxG3wyt@6&in@^P(Y8CpLsD7q!JX1DeAeyT|L>Lca&{O6jtXooZ^IVr}J zH}2O$BcvaKy9@!J9Tg3{Pp|_v?=$iDL&3t&c0RyFI{}`I;K^oAYi^^2U{k-yi_A3; zO}1o=;~D*4ZUV-C4s7mj*8|mjGEfFguyDJhQtsN?PkonzAPl7H@RrN$zM8YTN;qsO zWf&e49v{8_U$u8=!)C23sz6JD%}#pGo`#rkD&2DJ0(~;1VpX9n!MxrwY1*NLLzkZg z*Z7Fd(6xaGJ@83-~lMh0rLyWe?oKbf%pHu>ae`8yEBo3lv)?VFk z`hJ=YYlN6bE`U&gG5iakV_msfCnX4Agprh)e0`RGw2fe=wCgrkWAA^Ut7nKDxRy42Vk-TDV2CbXOtz*yA^X@_;$HsVN?ocpPCu}X5Xypj zKMaO{K`sPVr5!n?^B{!+2k{|)6sE<8eabD8{qI!z21D;BX6&{3)opnIP(ZK07T#}V zD-BtddV>~^qa45oIMIDC(V6z!U-HPUAcCu#5xcvf6PLtMF+2X6$v}BqH-aXhdq4i4 z0X~;eR)nniC4|yvCZle76cvnx8@6#n_<)6fVD9IBN87F0<-CIXX+TGD%(8hL`pYS9 z!U&d`ENqjZvqhkfT=RAoTy1$a$K^G#y8CDC&@|YM;?O`z<$uO`7gTxDy&j0Wc!$ra z7l_I5^GuC#^%{3{^*6FbhddxX@@5=yrP#9@t+RpeDYOav!SP}N_#z8w0LDQ7d=j*O zf%d8$wPZn;Ih@BjA`A+*i=OP5rLhK!YDokZ9$Qob^`Ijyhp?mgitM1xFIVvm{Jwec zR{pkl03`TZ`*H?~rccnnf+3ZS9;h679(VgTlV!q=V=a-tWijQ>pI^TGx;k4L99TRg z0G8T&G(31=qJ^VyDB&e8GV7! z!vEtB?R|*DnmG(k)*^RHP@vi^j(@gW`@o8UNZ&aw8)m)lgmcs}GST$U{Z`C>m7|Rh zVXW6u_g1_+x#9(YPbg%a)a}t9%utAeu@>^EMncPSupZi?Ds(bKT~r{fQ}x`TpD^6l z>(k8)hE2gMHC^whC#Ek);|i-S$ReUc#?0xpd)c9Sj~HE>M0g9(1f>5=QOkJhFn>ZK zsz-4y$NLTam_#ys zar7{;UK}jbM#Z~;N&3;hcI|(vAKBp`ik+W2&TUYVJcH@;6hwFG0!? z_r=(O+&jwnuuSh$g)w!T?^2-8SNWYXo*q~7{oxHg9=!z{ko?dAKhTy2Xgna^gTrwQ z9wtad*S4L9)0myg3-Smh7otB9+sppZ~cBq?)$%!1+vQ01@aBdlL> zI|H5Ix?iApZz8i6URIlHBYyR+(qY7oU9z%>7_ z+kmKAmt8$THJF*k7FpP6oGfpv2lshBM_IwGR}-K>GL+>M)ovA|1oX@UK#LY_w4Qf{ z==;Qu1&QiNoo8i#1^Hxv9dgd+L9lt>)ar3tlJ)|<@_+ftdXXqgnqdPU&sdv&U`^84Re2g7Qrg+A*kFz^7K;gOA~Jq z{K{h%oTJduX^ro&HXkA<(~MCa-Ftyt0|hqG%{x& zHbL-q`hca!u>M)5GNhx30MDjkT?=^%yiT0&&qM-e6Kb#3GxC@-hZwR!10G| z{M7&yK6-J*xI@ooQg(Utdr*WkI9-7f<_A~h^PeW5e)2y8Ia}~@& zYacnKNE08>8Rf2RFkCD&lv#DAh{h72RkXsyH$2mmurw!;z4oT3OjoN~9oW!q@0PYn z?gl1*;gCnJ`?SqU63qZmK(D{Aw5S{-Alv>TrB9oKja@*&EU?b94BR=ibrHAzCJdBu zRqtF=1i%Y90@|0)!2palp2+Q$aZlh@49Qqg2B{Dv!Oxt<3ruNGu*4)1n$f(jt+WY_ z6*2Qr1`x{v2fyFb`*V4eu-OP}T$l<0mEuf)*Y2vr?q93nnk17RX+Pg@OQJR_gWX_` zs6QM6qa={QQKR9c&QJkdGkyd#*L#F z6u95lGSq~tbXw`^DHdfDUHcg0N$hb+I==gt-|nSsoOeG>T>88e(G@-C6?4>ow>WV= zyEKVz8>58BcxrHTH;PR%{JFUvKJy^%Wc={F84xqlZINK=0+ED=3|daO5R}Zm&w;9m z3TI52!=^z<;&+6oLkDQ-Q`B;lz}8(}%Yry$aVjatZq+0J5J2z0MRKH(LT{!d0ssg| zX`@SwmA6~XMaUW7`8MbhJV}3lK_AW>D2v<+{h>U*k5!Z64B-)*dt@aPH($`2<2mTL zV7Z(87YJLu9>@IuYw(aUYV?v07^i$ zzv%W@TqHzMY%(#f%*7yX@e$?s-kM0KB^$^mdZA5)FrvEvZ-bxH?pa45!X?^su(HB$ z>2jK-N%i@z#FOVFs}y>+ICxygt$&0CR(F!D@A^$GO;>eN*MyM`M@g*P_PU*mT?=9v zKp2S2C(TiS!wu}v@q?j&$2CA8v|X*49!F0 zq==#c5w$}Z#-gNzV^t1}47T_qMwD%wcSJWc_ee^t7!x*s;i3#>i1~v=7j)EZ6eC${ z3G3B=!1iZAxCutPJC8j6ZQJoEXpO1|OG|oh zFzGkW0sDr-GiminJ{(4XvhB%k!uS8)yM4EB z*0c75wSVh>r#8~;1+Sn~@Ogqr$4*S3%+rZ*EmXln!i3tN@#xonU)_J@7$x?%15jjV^NS@9EWy;jfpbwkY5Y`Glq;KZsmuZL=9 zD|{e-x-?asU~_0#N?BE=Z;}u4!@}EDr}CP{_96Zk(gn`H)UrPq#z_DtZBDdCVWl`(sTe0v`JDEs;QP>pM|g*U!jBa}g#t8I>yh z*U|<-)dNRN;)VfCm22VUGuEsX-(z%k`i!rCxKZz3cKa<_u05eDW$uCvH-~}4AsTke z1HcOpVBhVaDZyvJnOZ&F^h`bQV>oyOM(5RF#2T4gew$=wr@(B4)Y8blZRW376U7?^ z!Ra8oiQbsO&ULAavqH|d30FviU4P6?J(zYSo#pDgp={@b@M45u?#O{CfH&kMlD5`= z;K)3Idj7um!`z(mqU}b*>qwzS`#EITtj7jGK8d4B4Qc!=TS8J3W<#H%R3i6BpCg$~ zp>C*hBC+A0Fr3OEzdIDi&-G3Md1@jg6gRHIX0?)BS4p<%U8~P3J6rtRnbRW+Oz75f zZV#{ttMb@s#V!343Qv0$q!j(sJgj9BP>THCqpGyvHQM%2O zLK(ti@q)b@)^FI>&A;+y8ew0GS5=}#zHF&O>;2i{t4GINme=3n1a(Z{&Kmo9*W#rxsG%Zw}hSkvn1YsEHh33 zmdy{)1D1dyo?bj5d$TyUBWHB}z$z}ll{ypepN@Am&C!}Xk&~yMbY%WWvh(y&DF{pu zcGGVJa$n4alsp~E*O+#H&SL|Di%71)(8{5w~rj4>QTe>ISy@x}t<^J_+hSaMF%sCJa@!@T~5Kb~#r79Ms z)fN@|kbGW`Y_A53Z?#BP;y10J4M?qGc~%?U~2)UOV7AqhZM+B$-oGI$#1e=cwboV)wTRBC616qUD>R}FP830nib`UwbmD4&nYXYs_ z7PK{)l|GrwaRIde0-q*!w0%V#Q=xH%>^s&45~ft-I&0;)$1!Dz%@1hSZ3GKs{4tD#IkjvqNnJnYdFJX1p3_1l$wGUT}R`DvIf3nM44mN@7 zjo~->%;=83cJKd=R{qz4IQzv~9l{>jqBGpE5gUi7)O*#H>2e}6TB}*b;#~YI+aCn% z2;1WLGpwhhWPXi*E1X=fKrFbY^#x!OirrzQ_>I{3n7sdq8s`L*Jhnk5@ez8DXR^^? z(K>&oPjvlpGNU~+PBExo!w?d5;O(cd4Da+kt{m^Xn78fHq>N0KmkOeA#nD@9L#-ZE zdi%u4SLd>0I(Ka+Tbc|QnpSyk<#F$zAOzOQ_~BAi+8U96a0Jzmk{SyyTB}$_&um+# z_|D4A!9{Jr=d(5hJy)U3j?%ULc5&B}=7i)mCH&X38s!uoP%b^xuO7zP%LMbp#G1I5 z{ut8yV5_()FC-TLOfyC=A?+^p-};gokPs@aV6=Ptdd$N#RQ&2Jh$+_{<_dO3j^OzZ zYH`f6Y-o~yZaYYhe+n4_!BWv<_7`26UNs-^kD)9FxTwTtygnX_jNJ}43H;9abC*v> zov!xMZ*x8!Wk|yGXauGxL8Inn5%!2+Q>%ZkqnhnnNy%p%_Nq>|C&W|#X$MeezRk_9 zzP4}c@-^;{(5+X+&R`T^QWlFLMDZrSunT18vU4SWp{F*Y$T7`U($DN~(KTa^^hF^> zS{1i-J^&P3jEmin)v3gnR`s-w8&Jrx&AFXxC9`Rc6U#?NS;?#1veN8(5PEBn21Fkm>J1RlWhbOdhEG*&R zY(uAi$1Xd&sP~#q^)jIASF8L%Yi^+sOR$pz9{NJt_)q~t0fxIqhyzyi z8rI>~iX{&0^FKFria3*H!NUDCoV^pGL?K>(!?$dV-jO7Rf=5AE&tQ~tO=aPQkfgWI zR2)VEoS}B(UzmRVz3pa2 zDY2YtnKEzwpIse8^hym zR8yhU*E$bVrSuxmLH<Tz(K6^naDl) zya(-0&=cpX`GR*FFQC+eywJN4Q?({$n6oiJM;!OsNt#mIE(zG+Vpnu?tAEIU%PATfY_jA% zB{E;4uMzm)_PA;PB!Nd~qHM&r<)|nL?qvd!=P|X8_reDeIf^)5FOw!p{cPbS9FovkaOQcP`tS2>*%SEayvEGQik0QL&e2U{MOSDUtTp6q} ziPK`O+5@BSNg16?Jq2lhQn@9ZkLqhYDIH?!wQ`3G106^YiL|lmC*{m9vr!}fldrly z&+K6x=_U8Tq1L7KbCF2t{3tco%VQ(v$d`ztDyMcZ$K*%Q&3mCzPs|J%FL^!H�I@ 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∨ulqId4G+3eA!uV*MtyY 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 Pm-eFvItF3@2LJ#7 { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + const func = new sst.Function(stack, "Function", { + handler: "test/lambda.handler", + }); + expect(func.node.defaultChild.tracingConfig.mode).toMatch('Active'); +}); + +test("function-xray-disabled", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + const func = new sst.Function(stack, "Function", { + handler: "test/lambda.handler", + tracing: lambda.Tracing.DISABLED, + }); + expect(func.node.defaultChild.tracingConfig).toBeUndefined(); +}); + From c737a93c6a1a12f05234b6a822008afa23901d3a Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 18 Jan 2021 20:40:55 -0500 Subject: [PATCH 280/481] Using require.resolve to get the path to eslint and tsc --- packages/cli/scripts/start.js | 22 ++++----- packages/cli/scripts/util/cdkHelpers.js | 26 +++++++++-- packages/cli/test/add-cdk/package.json | 1 - packages/cli/test/base-ts/package.json | 1 - packages/cli/test/base/package.json | 1 - packages/cli/test/cdk-command/package.json | 1 - packages/cli/test/config-invalid/package.json | 1 - packages/cli/test/config-no-name/package.json | 1 - .../cli/test/config-not-found/package.json | 1 - packages/cli/test/config/package.json | 1 - packages/cli/test/context/package.json | 1 - .../cli/test/eslint-ignore-rule/package.json | 1 - packages/cli/test/eslint-ignore/package.json | 1 - packages/cli/test/eslint-ts/package.json | 1 - packages/cli/test/eslint/package.json | 1 - .../handler-function-not-found/package.json | 1 - .../cli/test/handler-not-found/package.json | 1 - packages/cli/test/helpers/copy-symlinks.js | 45 ------------------- packages/cli/test/jest-ts/package.json | 1 - packages/cli/test/jest/package.json | 1 - .../lambda-override-eslintrc/package.json | 1 - .../lambda-override-tsconfig/package.json | 1 - .../test/mismatched-cdk-versions/package.json | 1 - .../cli/test/stack-no-prefix/package.json | 1 - packages/cli/test/stack-set-env/package.json | 1 - packages/cli/test/start-base/package.json | 1 - .../cli/test/start-no-src-path/package.json | 1 - packages/resources/src/App.ts | 23 +++++++++- packages/resources/src/util/builder.ts | 3 +- 29 files changed, 56 insertions(+), 87 deletions(-) delete mode 100644 packages/cli/test/helpers/copy-symlinks.js diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 91d8e21d9d..6c5bf99890 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -14,6 +14,7 @@ const sstDeploy = require("./deploy"); const sstBuild = require("./build"); const paths = require("./util/paths"); const { + getBinPath, prepareCdk, applyConfig, deploy: cdkDeploy, @@ -156,13 +157,12 @@ async function deployApp(argv, cliInfo, config) { // When testing, we will do a build call to generate the lambda-handler.json if (IS_TEST) { - await sstBuild(argv, config, cliInfo) - } - else { + await sstBuild(argv, config, cliInfo); + } else { const stacks = await sstDeploy(argv, config, cliInfo); // Check all stacks deployed successfully - if (stacks.some(stack => stack.status === 'failed')) { + if (stacks.some((stack) => stack.status === "failed")) { throw new Error(`Failed to deploy the app`); } } @@ -466,9 +466,7 @@ async function onReTranspileFailed(srcPath, handler) { if (!builderState.entryPointsData[key].needsReTranspile) { builderState.entryPointsData[key].pendingRequestCallbacks.forEach( ({ reject }) => { - reject( - `Failed to transpile srcPath ${srcPath} handler ${handler}` - ); + reject(`Failed to transpile srcPath ${srcPath} handler ${handler}`); } ); } @@ -544,7 +542,7 @@ async function transpile(srcPath, handler) { platform: "node", incremental: true, entryPoints: [fullPath], - color: process.env.NO_COLOR !== 'true', + color: process.env.NO_COLOR !== "true", outdir: path.join(paths.appPath, outSrcPath), }; @@ -595,11 +593,13 @@ function lint(srcPath) { let { inputFiles } = builderState.srcPathsData[srcPath]; inputFiles = inputFiles.filter( - file => file.indexOf("node_modules") === -1 && (file.endsWith(".ts") || file.endsWith(".js")) + (file) => + file.indexOf("node_modules") === -1 && + (file.endsWith(".ts") || file.endsWith(".js")) ); const cp = spawn( - path.join(paths.appNodeModules, ".bin", "eslint"), + getBinPath("eslint"), [ "--no-error-on-unmatched-pattern", process.env.NO_COLOR === "true" ? "--no-color" : "--color", @@ -632,7 +632,7 @@ function typeCheck(srcPath) { } const cp = spawn( - path.join(paths.appNodeModules, ".bin", "tsc"), + getBinPath("typescript", "tsc"), [ "--noEmit", "--pretty", diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index 6ff906696b..2706e03318 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -27,6 +27,25 @@ async function checkFileExists(file) { .catch(() => false); } +/** + * Finds the path to a package executable by converting the file path of: + * /Users/spongebob/serverless-stack-toolkit/node_modules/typescript/dist/index.js + * to: + * /Users/spongebob/serverless-stack-toolkit/node_modules/.bin/typescript + * or if the executable name (exeName) is different + * /Users/spongebob/serverless-stack-toolkit/node_modules/.bin/tsc + */ +function getBinPath(pkg, exeName) { + const filePath = require.resolve(pkg); + const matches = filePath.match(/(^.*\/node_modules)\/.*$/); + + if (matches === null || !matches[1]) { + throw new Error("There was a problem finding eslint"); + } + + return path.join(matches[1], ".bin", exeName || pkg); +} + function exitWithMessage(message, shortMessage) { shortMessage = shortMessage || message; @@ -153,7 +172,7 @@ async function lint(inputFiles) { try { const { stdout, stderr } = await exec( [ - path.join(paths.appNodeModules, ".bin", "eslint"), + getBinPath("eslint"), process.env.NO_COLOR === "true" ? "--no-color" : "--color", "--no-error-on-unmatched-pattern", "--config", @@ -191,7 +210,7 @@ async function typeCheck(inputFiles) { try { const { stdout, stderr } = await exec( [ - path.join(paths.appNodeModules, ".bin", "tsc"), + getBinPath("typescript", "tsc"), "--pretty", process.env.NO_COLOR === "true" ? "false" : "true", "--noEmit", @@ -250,7 +269,7 @@ async function transpile(cliInfo) { outdir: buildDir, entryPoints: [entryPoint], tsconfig: isTs ? tsconfig : undefined, - color: process.env.NO_COLOR !== 'true', + color: process.env.NO_COLOR !== "true", }); } catch (e) { logger.debug(e); @@ -425,6 +444,7 @@ module.exports = { deploy, destroy, bootstrap, + getBinPath, prepareCdk, applyConfig, parallelDeploy, diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index 39003bb57b..0ab274cc08 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "add-cdk": "sst add-cdk" }, "dependencies": { diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index be590c628a..d0abdfeb7a 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", "build": "sst build", "deploy": "sst deploy", diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index 09576c85ba..56fc80a39b 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", "build": "sst build", "deploy": "sst deploy", diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index de0291ffac..fde9f91855 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "cdk": "sst cdk" }, "dependencies": { diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index 7e471e7057..e836bbf390 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index 31bc460d13..87be66e8b9 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index 5f0d5d1eef..230ff57641 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index 44593a651c..180c458af8 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index b195d60d93..6a9ee52af7 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index ae801da7ca..5210171344 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index af199a8ba0..02434e2317 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index f6fceb44bb..dad881ea71 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index b6719e5619..6b5c5c21af 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index 28ea101f55..caea7243a7 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index a19417527f..2fd266283b 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { diff --git a/packages/cli/test/helpers/copy-symlinks.js b/packages/cli/test/helpers/copy-symlinks.js deleted file mode 100644 index 989af45fbe..0000000000 --- a/packages/cli/test/helpers/copy-symlinks.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Copies the all the symlinks in root node_modules .bin dir to the current - * node_modules/.bin dir with their proper paths. - * - * This is necessary because Yarn Workspaces doesn't install them and the SST - * scripts need the eslint and tsc executables. - */ -const fs = require("fs"); -const path = require("path"); - -const rootBin = path.join(__dirname, "../../../../node_modules", ".bin"); - -const appBin = path.join("node_modules", ".bin"); - -if (!fs.existsSync("node_modules")) { - fs.mkdirSync("node_modules"); -} - -if (!fs.existsSync(appBin)) { - fs.mkdirSync(appBin); -} - -const files = fs.readdirSync(rootBin, { - encoding: "utf8", - withFileTypes: true, -}); - -files.forEach((file) => { - if (file.name !== "eslint" && file.name !== "tsc") { - return; - } - if (file.isSymbolicLink()) { - const name = file.name; - const relPath = fs.readlinkSync(path.join(rootBin, name)); - const fullPath = path.join(rootBin, relPath); - - try { - fs.symlinkSync(fullPath, path.join(appBin, name)); - } catch (e) { - if (e.code !== "EEXIST") { - console.log(`Failed to copy symlink ${name}`); - } - } - } -}); diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index bc7e3bb831..eb1bef1c22 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", "test": "sst test" }, diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index 3c83e8b4ac..208e49a377 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "test": "sst test" }, "jest": { diff --git a/packages/cli/test/lambda-override-eslintrc/package.json b/packages/cli/test/lambda-override-eslintrc/package.json index d0ca914bef..d5677661ed 100644 --- a/packages/cli/test/lambda-override-eslintrc/package.json +++ b/packages/cli/test/lambda-override-eslintrc/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", "start": "sst start" }, diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json index c1c29b344b..cc401f1929 100644 --- a/packages/cli/test/lambda-override-tsconfig/package.json +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build", "start": "sst start" }, diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index 394c40b0cb..4a13a882d7 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index 55a2f3d4c9..b1528123ad 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index d9a141554e..672dec333e 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "build": "sst build" }, "dependencies": { diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index 8ea2fd7843..57209f9e5f 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", "build": "sst build", "deploy": "sst deploy", diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index a210516940..79f652d4bf 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "0.5.0", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "start": "sst start", "build": "sst build", "deploy": "sst deploy", diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index f04944159c..754a8164fd 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -10,6 +10,25 @@ import { getEsbuildMetafileName } from "./util/builder"; const appPath = process.cwd(); const appNodeModules = path.join(appPath, "node_modules"); +/** + * Finds the path to a package executable by converting the file path of: + * /Users/spongebob/serverless-stack-toolkit/node_modules/typescript/dist/index.js + * to: + * /Users/spongebob/serverless-stack-toolkit/node_modules/.bin/typescript + * or if the executable name (exeName) is different + * /Users/spongebob/serverless-stack-toolkit/node_modules/.bin/tsc + */ +function getBinPath(pkg: string, exeName?: string): string { + const filePath = require.resolve(pkg); + const matches = filePath.match(/(^.*\/node_modules)\/.*$/); + + if (matches === null || !matches[1]) { + throw new Error("There was a problem finding eslint"); + } + + return path.join(matches[1], ".bin", exeName || pkg); +} + /** * Deploy props for apps. */ @@ -193,7 +212,7 @@ export class App extends cdk.App { try { const stdout = execSync( [ - path.join(appNodeModules, ".bin", "eslint"), + getBinPath("eslint"), process.env.NO_COLOR === "true" ? "--no-color" : "--color", "--no-error-on-unmatched-pattern", "--config", @@ -229,7 +248,7 @@ export class App extends cdk.App { try { const stdout = execSync( [ - path.join(appNodeModules, ".bin", "tsc"), + getBinPath("typescript", "tsc"), "--pretty", process.env.NO_COLOR === "true" ? "false" : "true", "--noEmit", diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index 2042784dd6..dd089d6dcb 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -1,8 +1,7 @@ import chalk from "chalk"; -//import crossZip from "cross-zip"; -import zipLocal from "zip-local"; import * as path from "path"; import * as fs from "fs-extra"; +import zipLocal from "zip-local"; import * as esbuild from "esbuild"; interface BuilderProps { From d57457448f0afde80ef0a6d5c8ba16ea5280fbac Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 18 Jan 2021 20:47:26 -0500 Subject: [PATCH 281/481] Removing old script --- packages/cli/test/start-guide/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/cli/test/start-guide/package.json b/packages/cli/test/start-guide/package.json index 71a6a57a95..af51719d7c 100644 --- a/packages/cli/test/start-guide/package.json +++ b/packages/cli/test/start-guide/package.json @@ -4,7 +4,6 @@ "description": "tests", "version": "1.0.0-alpha.12", "scripts": { - "postinstall": "node ../helpers/copy-symlinks.js", "add-package": "sst add-package", "start": "sst start", "build": "sst build", From a927f69062a812fcf75bf64191b4307e47d05625 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 18 Jan 2021 20:58:51 -0500 Subject: [PATCH 282/481] Fixing internal package versions --- packages/cli/test/lambda-override-tsconfig/package.json | 4 ++-- packages/cli/test/start-guide/package.json | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json index cc401f1929..b69a247a53 100644 --- a/packages/cli/test/lambda-override-tsconfig/package.json +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -11,8 +11,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/start-guide/package.json b/packages/cli/test/start-guide/package.json index af51719d7c..3ccef6b40d 100644 --- a/packages/cli/test/start-guide/package.json +++ b/packages/cli/test/start-guide/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-guide", "private": true, "description": "tests", - "version": "1.0.0-alpha.12", + "version": "0.5.0", "scripts": { "add-package": "sst add-package", "start": "sst start", @@ -19,8 +19,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^1.0.0-alpha.12", - "@serverless-stack/resources": "^1.0.0-alpha.12" + "@serverless-stack/cli": "^0.5.0", + "@serverless-stack/resources": "^0.5.0" }, "license": "ISC" } From c215d5463255460fbf99cf9f4f20bcc098f377da Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 18 Jan 2021 21:10:30 -0500 Subject: [PATCH 283/481] Fixing test --- .../lambda-override-tsconfig/lib/index.ts | 2 +- yarn.lock | 63 ------------------- 2 files changed, 1 insertion(+), 64 deletions(-) diff --git a/packages/cli/test/lambda-override-tsconfig/lib/index.ts b/packages/cli/test/lambda-override-tsconfig/lib/index.ts index b92d1fbed9..5f8bd50dd4 100644 --- a/packages/cli/test/lambda-override-tsconfig/lib/index.ts +++ b/packages/cli/test/lambda-override-tsconfig/lib/index.ts @@ -13,7 +13,7 @@ class ApiStack extends sst.Stack { // Create a Lambda function triggered by an HTTP API const lambda = new sst.Function(this, "Lambda", { - entry: "lambda.ts", + handler: "lambda.handler", srcPath: "src", }); diff --git a/yarn.lock b/yarn.lock index b489679cbf..e9a36f1462 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2810,69 +2810,6 @@ "@octokit/openapi-types" "^2.2.0" "@types/node" ">= 8" -"@serverless-stack/cli@^1.0.0-alpha.12": - version "1.0.0-alpha.12" - resolved "https://registry.yarnpkg.com/@serverless-stack/cli/-/cli-1.0.0-alpha.12.tgz#ab45369f9cb10a90f100e3354cb57894bddca223" - integrity sha512-6L9ELJHWHlVJDSnBqkeCfYqtQbU8aHMr6GqER05EHQABaW3UeoyMH5oEaK1nb1o9KFiaE+YqZ+0og2CsA7+g2g== - dependencies: - "@aws-cdk/aws-apigatewayv2" "1.79.0" - "@aws-cdk/aws-dynamodb" "1.79.0" - "@aws-cdk/aws-iam" "1.79.0" - "@aws-cdk/aws-lambda" "1.79.0" - "@aws-cdk/core" "1.79.0" - "@babel/core" "^7.10.5" - "@babel/eslint-parser" "^7.11.3" - "@babel/eslint-plugin" "^7.11.3" - "@babel/plugin-proposal-class-properties" "^7.10.4" - "@babel/preset-env" "^7.10.4" - "@serverless-stack/core" "^1.0.0-alpha.12" - "@serverless-stack/resources" "^1.0.0-alpha.12" - "@types/jest" "^26.0.7" - "@types/node" "^14.0.27" - "@typescript-eslint/eslint-plugin" "^3.9.1" - "@typescript-eslint/parser" "^3.9.1" - aws-cdk "1.79.0" - chalk "^4.1.0" - chokidar "^3.4.3" - core-js "^3.6.5" - cross-spawn "^7.0.3" - esbuild "^0.8.31" - eslint "^7.16.0" - fast-safe-stringify "^2.0.6" - fs-extra "^9.0.1" - jest "^26.1.0" - promise.allsettled "^1.0.2" - source-map-support "^0.5.19" - ts-jest "^26.1.4" - typescript "^3.9.7" - ws "^7.4.0" - yargs "^15.4.1" - -"@serverless-stack/core@^1.0.0-alpha.12": - version "1.0.0-alpha.12" - resolved "https://registry.yarnpkg.com/@serverless-stack/core/-/core-1.0.0-alpha.12.tgz#b7c0103a6c975d87fc65f9ad9616d9ab3b919bf7" - integrity sha512-AZrN3cPU0JBapmLrJwR7g4kv4Bwcbo8qZAjMUfNjLLJVRBR6WI17GdNQli4n7qQ02j82WHd03qWl2THoPW6QeA== - dependencies: - aws-sdk "^2.761.0" - chalk "^4.1.0" - sst-cdk "1.79.0-rc.1" - winston "^3.3.3" - -"@serverless-stack/resources@^1.0.0-alpha.12": - version "1.0.0-alpha.12" - resolved "https://registry.yarnpkg.com/@serverless-stack/resources/-/resources-1.0.0-alpha.12.tgz#368fb101242c3e61a7f2ed7a0e7b87055cdbe377" - integrity sha512-PfxvbMDNnkv6SGxhWBqjNfy2bL2nftlpJq5xeNpgw3gKD0r6H+UOFJ7DnQ86rLljclNSg0BnJ5g5yKoYzGOfag== - dependencies: - "@aws-cdk/aws-lambda" "1.79.0" - "@aws-cdk/aws-lambda-nodejs" "1.79.0" - "@aws-cdk/core" "1.79.0" - chalk "^4.1.0" - esbuild "^0.8.31" - eslint "^7.16.0" - fs-extra "^9.0.1" - typescript "^3.9.7" - zip-local "^0.3.4" - "@sinonjs/commons@^1.7.0": version "1.8.1" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" From fa6e774dc5cb60f3f4d0e71b656e9c8f60e47051 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 18 Jan 2021 21:36:34 -0500 Subject: [PATCH 284/481] Updating sst.Functions docs --- packages/resources/src/Function.ts | 3 ++- www/docs/packages/resources.md | 16 ++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index 37d54a08d5..88bba261f2 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -7,7 +7,8 @@ import { builder } from "./util/builder"; export interface FunctionProps extends lambda.FunctionOptions { /** - * Path to the entry point and handler function. + * Path to the entry point and handler function. Of the format: + * `/path/to/file.function`. */ readonly handler: string; /** diff --git a/www/docs/packages/resources.md b/www/docs/packages/resources.md index 4642a71b43..30e9b5349c 100644 --- a/www/docs/packages/resources.md +++ b/www/docs/packages/resources.md @@ -10,7 +10,7 @@ The `@serverless-stack/resources` package provides a couple of simple AWS CDK Co - `sst.Stack` - `sst.Function` -## `sst.Stack` +## sst.Stack The `sst.Stack` and `sst.App` constructs allow you to: @@ -100,21 +100,21 @@ this.node.root.logicalPrefixedName("MyResource"); // Returns "dev-my-sst-app-MyR This invokes the `logicalPrefixedName` method in `sst.App` that your stack is added to. This'll return `dev-my-sst-app-MyResource`, where `dev` is the current stage and `my-sst-app` is the name of the app. -## `sst.Function` +## sst.Function A replacement for the [`cdk.lambda.NodejsFunction`](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-nodejs-readme.html) that allows you to develop your Lambda functions locally while using [`sst start`](packages/cli.md#start). Supports ES and TypeScript out-of-the-box. -Takes props (`sst.FunctionProps`) that extends [`cdk.lambda.FunctionOptions`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.FunctionOptions.html) and adds the following props to it: +Takes the following props in addition to the [`cdk.lambda.FunctionOptions`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.FunctionOptions.html). -### `entry` +By default, `AWS_NODEJS_CONNECTION_REUSE_ENABLED` is turned on. Meaning that the Lambda function will automatically reuse TCP connections when working with the AWS SDK. [Read more about this here](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/node-reusing-connections.html). -Relative path to the entry point of the function. Either based of the project root or the `srcPath`. A `.js` or `.ts` file. +Also, [enables AWS X-Ray](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-tracing.html) by default so you can trace your serverless applications. ### `handler` -The exported function in the entry file. +Path to the entry point and handler function. Of the format `/path/to/file.function`. First checks for `.ts` file and then for a `.js` file. -Defaults to `"handler"`. +If the [`srcPath`](#srcpath) is set, then the path to the `handler` is relative to it. ### `bundle` @@ -124,7 +124,7 @@ Defaults to `true`. ### `srcPath` -The source directory where the entry point file is located. If the `bundle` option is turned off, SST zips up the entire `srcPath` directory and uses it as the Lambda function package. +The source directory where the handler file is located. If the `bundle` option is turned off, SST zips up the entire `srcPath` directory and uses it as the Lambda function package. Defaults to `""`, the project root. From ca510236f19c0ccb17d171019c26bd0e7c4c850b Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 18 Jan 2021 21:58:58 -0500 Subject: [PATCH 285/481] v0.6.0 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/cli/test/add-cdk/package.json | 4 ++-- packages/cli/test/base-ts/package.json | 6 +++--- packages/cli/test/base/package.json | 6 +++--- packages/cli/test/cdk-command/package.json | 6 +++--- packages/cli/test/config-invalid/package.json | 6 +++--- packages/cli/test/config-no-name/package.json | 6 +++--- packages/cli/test/config-not-found/package.json | 6 +++--- packages/cli/test/config/package.json | 6 +++--- packages/cli/test/context/package.json | 6 +++--- packages/cli/test/eslint-ignore-rule/package.json | 6 +++--- packages/cli/test/eslint-ignore/package.json | 6 +++--- packages/cli/test/eslint-ts/package.json | 6 +++--- packages/cli/test/eslint/package.json | 6 +++--- packages/cli/test/handler-function-not-found/package.json | 6 +++--- packages/cli/test/handler-not-found/package.json | 6 +++--- packages/cli/test/jest-ts/package.json | 6 +++--- packages/cli/test/jest/package.json | 6 +++--- packages/cli/test/lambda-override-eslintrc/package.json | 6 +++--- packages/cli/test/lambda-override-tsconfig/package.json | 6 +++--- packages/cli/test/mismatched-cdk-versions/package.json | 6 +++--- packages/cli/test/stack-no-prefix/package.json | 6 +++--- packages/cli/test/stack-set-env/package.json | 6 +++--- packages/cli/test/start-base/package.json | 6 +++--- packages/cli/test/start-guide/package.json | 6 +++--- packages/cli/test/start-no-src-path/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 30 files changed, 81 insertions(+), 81 deletions(-) diff --git a/lerna.json b/lerna.json index 835715cf83..8db22b3992 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.5.0" + "version": "0.6.0" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 6aa870e6ec..d168ff9506 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.5.0", + "version": "0.6.0", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -45,8 +45,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^0.5.0", - "@serverless-stack/resources": "^0.5.0", + "@serverless-stack/core": "^0.6.0", + "@serverless-stack/resources": "^0.6.0", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index 0ab274cc08..0e891993e3 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -2,12 +2,12 @@ "name": "@serverless-stack/cli-test-add-cdk", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "add-cdk": "sst add-cdk" }, "dependencies": { - "@serverless-stack/cli": "^0.5.0" + "@serverless-stack/cli": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index d0abdfeb7a..c6ab4aecd1 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base-ts", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "start": "sst start", "build": "sst build", @@ -13,8 +13,8 @@ "dependencies": { "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index 56fc80a39b..bed71434be 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "start": "sst start", "build": "sst build", @@ -17,8 +17,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index fde9f91855..19b6b51b61 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-cdk-command", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "cdk": "sst cdk" }, "dependencies": { - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index e836bbf390..6b1d1b2b44 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-invalid", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index 87be66e8b9..f33be92685 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-no-name", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index 230ff57641..8593f02df8 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-not-found", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index 180c458af8..1893fdca22 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-test", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index 6a9ee52af7..5c0422b94a 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-context", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index 5210171344..0d0b028236 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ignore-rule", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index 02434e2317..c8690a5317 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ignore", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index dad881ea71..f3eac55344 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ts", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index 6b5c5c21af..cb91b959ad 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index caea7243a7..7323ba0ee6 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-handler-function-not-found", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index 2fd266283b..bd79f2a388 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-handler-not-found", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index eb1bef1c22..306daf1157 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest-ts", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "build": "sst build", "test": "sst test" @@ -18,8 +18,8 @@ "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/aws-sqs": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index 208e49a377..898f4f40dc 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "test": "sst test" }, @@ -14,8 +14,8 @@ "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/lambda-override-eslintrc/package.json b/packages/cli/test/lambda-override-eslintrc/package.json index d5677661ed..d95369e395 100644 --- a/packages/cli/test/lambda-override-eslintrc/package.json +++ b/packages/cli/test/lambda-override-eslintrc/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-eslintrc", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "build": "sst build", "start": "sst start" @@ -11,8 +11,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json index b69a247a53..0abc68cbc8 100644 --- a/packages/cli/test/lambda-override-tsconfig/package.json +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-tsconfig", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "build": "sst build", "start": "sst start" @@ -11,8 +11,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index 4a13a882d7..2796529b6f 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-mismatched-cdk-versions", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "build": "sst build" }, @@ -12,8 +12,8 @@ "@aws-cdk/aws-iam": "1.57.0", "@aws-cdk/aws-s3": "^1.57.0", "@aws-cdk/core": "1.56.0", - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index b1528123ad..fef85c4f51 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-stack-no-prefix", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index 672dec333e..c3612a9904 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-stack-set-env", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index 57209f9e5f..185b2b3dcb 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-base", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "start": "sst start", "build": "sst build", @@ -16,8 +16,8 @@ "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/start-guide/package.json b/packages/cli/test/start-guide/package.json index 3ccef6b40d..f0ab766926 100644 --- a/packages/cli/test/start-guide/package.json +++ b/packages/cli/test/start-guide/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-guide", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "add-package": "sst add-package", "start": "sst start", @@ -19,8 +19,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0" + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0" }, "license": "ISC" } diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index 79f652d4bf..49afecfb8b 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-no-src-path", "private": true, "description": "tests", - "version": "0.5.0", + "version": "0.6.0", "scripts": { "start": "sst start", "build": "sst build", @@ -15,8 +15,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.5.0", - "@serverless-stack/resources": "^0.5.0", + "@serverless-stack/cli": "^0.6.0", + "@serverless-stack/resources": "^0.6.0", "mirrarray": "^2.0.0" }, "license": "ISC" diff --git a/packages/core/package.json b/packages/core/package.json index 5f45ab4432..a3c1624230 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.5.0", + "version": "0.6.0", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index ffd5da8a2b..103bcc4a23 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.5.0", + "version": "0.6.0", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index ff81571040..5e77a7622f 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.5.0", + "version": "0.6.0", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 3510cd898779bea1d6d8249bd73abe48b5c929dc Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 18 Jan 2021 22:06:04 -0500 Subject: [PATCH 286/481] Debug logs not flushed to file on process.exit --- packages/cli/scripts/util/cdkHelpers.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index 2706e03318..f244ca4c64 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -57,7 +57,12 @@ function exitWithMessage(message, shortMessage) { logger.info(""); } logger.error(message.trimStart()); - process.exit(1); + + // Because writing to log file is an async process, calling process.exit directly can cause + // some logs not flushed to file. Need to wait for logs to finish flusing and then exit. + // https://github.com/winstonjs/winston/issues/228 + // https://github.com/winstonjs/winston/issues/1504 + logger.on('finish', () => process.exit(1)); } async function getAppPackageJson() { From f0cd17f3090faf3c403cde5691740e4daad4cac5 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 19 Jan 2021 17:04:20 -0500 Subject: [PATCH 287/481] Fixing sst.Function props in template --- .../javascript/lib/%stack-name.PascalCased%.template.js | 2 +- .../typescript/lib/%stack-name.PascalCased%.template.ts | 2 +- packages/resources/src/Function.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/create-serverless-stack/templates/javascript/lib/%stack-name.PascalCased%.template.js b/packages/create-serverless-stack/templates/javascript/lib/%stack-name.PascalCased%.template.js index 2e05d329e1..a8cfc1916e 100644 --- a/packages/create-serverless-stack/templates/javascript/lib/%stack-name.PascalCased%.template.js +++ b/packages/create-serverless-stack/templates/javascript/lib/%stack-name.PascalCased%.template.js @@ -10,7 +10,7 @@ export default class %stack-name.PascalCased% extends sst.Stack { // Create a Lambda function triggered by an HTTP API const lambda = new sst.Function(this, "Lambda", { - entry: "lambda.js", + handler: "lambda.handler", }); // Create the HTTP API diff --git a/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts b/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts index 5d875b18fb..7bc412bc50 100644 --- a/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts +++ b/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts @@ -10,7 +10,7 @@ export default class %stack-name.PascalCased% extends sst.Stack { // Create a Lambda function triggered by an HTTP API const lambda = new sst.Function(this, "Lambda", { - entry: "lambda.ts", + handler: "lambda.handler", }); // Create the HTTP API diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index 88bba261f2..62ccf6ca2f 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -60,7 +60,7 @@ export class Function extends lambda.Function { // Validate handler if (!handler) { - throw new Error(`No handler defined for the ${id} Lambda function`); + throw new Error(`No handler defined for the "${id}" Lambda function`); } // Validate NodeJS runtime From 10c063274f9a60040b1665800a7d4e8ccf469518 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 19 Jan 2021 17:15:39 -0500 Subject: [PATCH 288/481] v0.6.1 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/cli/test/add-cdk/package.json | 4 ++-- packages/cli/test/base-ts/package.json | 6 +++--- packages/cli/test/base/package.json | 6 +++--- packages/cli/test/cdk-command/package.json | 6 +++--- packages/cli/test/config-invalid/package.json | 6 +++--- packages/cli/test/config-no-name/package.json | 6 +++--- packages/cli/test/config-not-found/package.json | 6 +++--- packages/cli/test/config/package.json | 6 +++--- packages/cli/test/context/package.json | 6 +++--- packages/cli/test/eslint-ignore-rule/package.json | 6 +++--- packages/cli/test/eslint-ignore/package.json | 6 +++--- packages/cli/test/eslint-ts/package.json | 6 +++--- packages/cli/test/eslint/package.json | 6 +++--- packages/cli/test/handler-function-not-found/package.json | 6 +++--- packages/cli/test/handler-not-found/package.json | 6 +++--- packages/cli/test/jest-ts/package.json | 6 +++--- packages/cli/test/jest/package.json | 6 +++--- packages/cli/test/lambda-override-eslintrc/package.json | 6 +++--- packages/cli/test/lambda-override-tsconfig/package.json | 6 +++--- packages/cli/test/mismatched-cdk-versions/package.json | 6 +++--- packages/cli/test/stack-no-prefix/package.json | 6 +++--- packages/cli/test/stack-set-env/package.json | 6 +++--- packages/cli/test/start-base/package.json | 6 +++--- packages/cli/test/start-guide/package.json | 6 +++--- packages/cli/test/start-no-src-path/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 30 files changed, 81 insertions(+), 81 deletions(-) diff --git a/lerna.json b/lerna.json index 8db22b3992..e8667840fe 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.6.0" + "version": "0.6.1" } diff --git a/packages/cli/package.json b/packages/cli/package.json index d168ff9506..0bbf285ca0 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.6.0", + "version": "0.6.1", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -45,8 +45,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^0.6.0", - "@serverless-stack/resources": "^0.6.0", + "@serverless-stack/core": "^0.6.1", + "@serverless-stack/resources": "^0.6.1", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index 0e891993e3..e19dfc73f4 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -2,12 +2,12 @@ "name": "@serverless-stack/cli-test-add-cdk", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "add-cdk": "sst add-cdk" }, "dependencies": { - "@serverless-stack/cli": "^0.6.0" + "@serverless-stack/cli": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index c6ab4aecd1..531e61cc35 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base-ts", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "start": "sst start", "build": "sst build", @@ -13,8 +13,8 @@ "dependencies": { "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index bed71434be..98aa9ec822 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "start": "sst start", "build": "sst build", @@ -17,8 +17,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index 19b6b51b61..d527240047 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-cdk-command", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "cdk": "sst cdk" }, "dependencies": { - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index 6b1d1b2b44..37ae171d03 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-invalid", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index f33be92685..46bc2fb760 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-no-name", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index 8593f02df8..7a9fc35911 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-not-found", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index 1893fdca22..480cacf34f 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-test", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index 5c0422b94a..87118d3193 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-context", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index 0d0b028236..cf85940cee 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ignore-rule", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index c8690a5317..4f5e634efa 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ignore", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index f3eac55344..8dcd0ff996 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ts", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index cb91b959ad..893e17f4be 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index 7323ba0ee6..586f0f134b 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-handler-function-not-found", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index bd79f2a388..d405e13195 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-handler-not-found", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index 306daf1157..a0410a0811 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest-ts", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "build": "sst build", "test": "sst test" @@ -18,8 +18,8 @@ "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/aws-sqs": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index 898f4f40dc..3fb1f484b7 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "test": "sst test" }, @@ -14,8 +14,8 @@ "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/lambda-override-eslintrc/package.json b/packages/cli/test/lambda-override-eslintrc/package.json index d95369e395..1d1fb3efcd 100644 --- a/packages/cli/test/lambda-override-eslintrc/package.json +++ b/packages/cli/test/lambda-override-eslintrc/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-eslintrc", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "build": "sst build", "start": "sst start" @@ -11,8 +11,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json index 0abc68cbc8..5a4574402f 100644 --- a/packages/cli/test/lambda-override-tsconfig/package.json +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-tsconfig", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "build": "sst build", "start": "sst start" @@ -11,8 +11,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index 2796529b6f..6a63c84686 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-mismatched-cdk-versions", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "build": "sst build" }, @@ -12,8 +12,8 @@ "@aws-cdk/aws-iam": "1.57.0", "@aws-cdk/aws-s3": "^1.57.0", "@aws-cdk/core": "1.56.0", - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index fef85c4f51..5480fb6cc0 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-stack-no-prefix", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index c3612a9904..e9ec94dd0c 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-stack-set-env", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index 185b2b3dcb..06861f8cc0 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-base", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "start": "sst start", "build": "sst build", @@ -16,8 +16,8 @@ "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/start-guide/package.json b/packages/cli/test/start-guide/package.json index f0ab766926..ee453ba343 100644 --- a/packages/cli/test/start-guide/package.json +++ b/packages/cli/test/start-guide/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-guide", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "add-package": "sst add-package", "start": "sst start", @@ -19,8 +19,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0" + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1" }, "license": "ISC" } diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index 49afecfb8b..c5d250ef5b 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-no-src-path", "private": true, "description": "tests", - "version": "0.6.0", + "version": "0.6.1", "scripts": { "start": "sst start", "build": "sst build", @@ -15,8 +15,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.0", - "@serverless-stack/resources": "^0.6.0", + "@serverless-stack/cli": "^0.6.1", + "@serverless-stack/resources": "^0.6.1", "mirrarray": "^2.0.0" }, "license": "ISC" diff --git a/packages/core/package.json b/packages/core/package.json index a3c1624230..f88dd92984 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.6.0", + "version": "0.6.1", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 103bcc4a23..a3d022f2c2 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.6.0", + "version": "0.6.1", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 5e77a7622f..af9d446e89 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.6.0", + "version": "0.6.1", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From cb505c36468c9c9ca9eaef745d730744f091c3f3 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 19 Jan 2021 21:29:11 -0500 Subject: [PATCH 289/481] Handling error cases for eslint and tsc --- README.md | 2 +- .../assets/cdk-wrapper/.eslintrc.internal.js | 1 + packages/cli/scripts/util/cdkHelpers.js | 20 ++++++++++++++++--- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2af4b0f6ca..d5dbe906b1 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ $ yarn test To run the docs site. -``` bash +```bash $ cd www $ yarn start ``` diff --git a/packages/cli/assets/cdk-wrapper/.eslintrc.internal.js b/packages/cli/assets/cdk-wrapper/.eslintrc.internal.js index cc16db7e96..2d51376d30 100644 --- a/packages/cli/assets/cdk-wrapper/.eslintrc.internal.js +++ b/packages/cli/assets/cdk-wrapper/.eslintrc.internal.js @@ -18,6 +18,7 @@ module.exports = { }, }, plugins: ["@babel"], + extends: "eslint:recommended", overrides: [ { files: ["*.ts", "*.tsx"], diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index f244ca4c64..945664287b 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -62,7 +62,7 @@ function exitWithMessage(message, shortMessage) { // some logs not flushed to file. Need to wait for logs to finish flusing and then exit. // https://github.com/winstonjs/winston/issues/228 // https://github.com/winstonjs/winston/issues/1504 - logger.on('finish', () => process.exit(1)); + logger.on("finish", () => process.exit(1)); } async function getAppPackageJson() { @@ -198,7 +198,13 @@ async function lint(inputFiles) { logger.info(stderr); } } catch (e) { - logger.info(e.stdout); + if (e.stdout) { + logger.info(e.stdout); + } else if (e.stderr) { + logger.info(e.stderr); + } else { + logger.info(e); + } exitWithMessage("There was a problem linting the source."); } } @@ -229,7 +235,13 @@ async function typeCheck(inputFiles) { logger.info(stderr); } } catch (e) { - logger.info(e.stdout); + if (e.stdout) { + logger.info(e.stdout); + } else if (e.stderr) { + logger.info(e.stderr); + } else { + logger.info(e); + } exitWithMessage("There was a problem type checking the source."); } } @@ -277,6 +289,8 @@ async function transpile(cliInfo) { color: process.env.NO_COLOR !== "true", }); } catch (e) { + // Not printing to screen because we are letting esbuild print + // the error directly logger.debug(e); exitWithMessage("There was a problem transpiling the source."); } From 39e25702695800bb4089cd03420d7ce6828a5941 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 19 Jan 2021 22:12:30 -0500 Subject: [PATCH 290/481] Fixing error copy --- packages/cli/scripts/util/cdkHelpers.js | 4 ++-- packages/resources/src/App.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index 945664287b..0a6b0d9830 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -40,7 +40,7 @@ function getBinPath(pkg, exeName) { const matches = filePath.match(/(^.*\/node_modules)\/.*$/); if (matches === null || !matches[1]) { - throw new Error("There was a problem finding eslint"); + throw new Error(`There was a problem finding ${pkg}`); } return path.join(matches[1], ".bin", exeName || pkg); @@ -177,7 +177,7 @@ async function lint(inputFiles) { try { const { stdout, stderr } = await exec( [ - getBinPath("eslint"), + getBinPath("eslint1"), process.env.NO_COLOR === "true" ? "--no-color" : "--color", "--no-error-on-unmatched-pattern", "--config", diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 754a8164fd..9e6f32cfeb 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -23,7 +23,7 @@ function getBinPath(pkg: string, exeName?: string): string { const matches = filePath.match(/(^.*\/node_modules)\/.*$/); if (matches === null || !matches[1]) { - throw new Error("There was a problem finding eslint"); + throw new Error(`There was a problem finding ${pkg}`); } return path.join(matches[1], ".bin", exeName || pkg); From ed9096b604de065e73109b86000a2e23d6ae1490 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 19 Jan 2021 22:17:53 -0500 Subject: [PATCH 291/481] Fixing debug code --- packages/cli/scripts/util/cdkHelpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index 0a6b0d9830..21b7e5a235 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -177,7 +177,7 @@ async function lint(inputFiles) { try { const { stdout, stderr } = await exec( [ - getBinPath("eslint1"), + getBinPath("eslint"), process.env.NO_COLOR === "true" ? "--no-color" : "--color", "--no-error-on-unmatched-pattern", "--config", From 2bd71ff78e358cec012073e246f4a51b2ac47e1e Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 20 Jan 2021 01:12:10 -0500 Subject: [PATCH 292/481] Fix logs not flushed to file on process.exit --- README.md | 2 +- packages/cli/scripts/start.js | 8 +- packages/cli/scripts/util/cdkHelpers.js | 6 +- packages/core/index.js | 15 ++- packages/core/logger.js | 76 ++++------- packages/core/package.json | 4 +- yarn.lock | 169 ++++++------------------ 7 files changed, 88 insertions(+), 192 deletions(-) diff --git a/README.md b/README.md index 2af4b0f6ca..d5dbe906b1 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ $ yarn test To run the docs site. -``` bash +```bash $ cd www $ yarn start ``` diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 6c5bf99890..3b5efc4f21 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -8,7 +8,7 @@ const esbuild = require("esbuild"); const chokidar = require("chokidar"); const spawn = require("cross-spawn"); const allSettled = require("promise.allsettled"); -const { logger } = require("@serverless-stack/core"); +const { logger, getChildLogger } = require("@serverless-stack/core"); const sstDeploy = require("./deploy"); const sstBuild = require("./build"); @@ -23,8 +23,8 @@ const { const array = require("../lib/array"); // Setup logger -const clientLogger = logger.child({ label: "client" }); -const builderLogger = logger.child({ label: "builder" }); +const clientLogger = getChildLogger('client'); +const builderLogger = getChildLogger('builder'); // Create Promise.allSettled shim allSettled.shim(); @@ -263,7 +263,7 @@ function stopBuilder() { } } async function updateBuilder() { - builderLogger.silly(serializeState()); + builderLogger.trace(serializeState()); const { entryPointsData, srcPathsData } = builderState; diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index f244ca4c64..f8f5a16b76 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -58,11 +58,7 @@ function exitWithMessage(message, shortMessage) { } logger.error(message.trimStart()); - // Because writing to log file is an async process, calling process.exit directly can cause - // some logs not flushed to file. Need to wait for logs to finish flusing and then exit. - // https://github.com/winstonjs/winston/issues/228 - // https://github.com/winstonjs/winston/issues/1504 - logger.on('finish', () => process.exit(1)); + process.exit(1); } async function getAppPackageJson() { diff --git a/packages/core/index.js b/packages/core/index.js index 15331086c7..611bd7658b 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -4,7 +4,7 @@ const cdk = require("sst-cdk"); const aws = require("aws-sdk"); const chalk = require("chalk"); -const { logger, initializeLogger } = require("./logger"); +const { logger, getChildLogger, initializeLogger } = require("./logger"); const packageJson = require("./package.json"); @@ -440,11 +440,11 @@ async function parallelDeploy(cdkOptions, stackStates) { })); } - logger.silly(`Initial stack states: ${JSON.stringify(stackStates)}`); + logger.trace(`Initial stack states: ${JSON.stringify(stackStates)}`); await updateDeployStatuses(); - logger.silly(`After update deploy statuses: ${JSON.stringify(stackStates)}`); + logger.trace(`After update deploy statuses: ${JSON.stringify(stackStates)}`); await deployStacks(); - logger.silly(`After deploy stacks: ${JSON.stringify(stackStates)}`); + logger.trace(`After deploy stacks: ${JSON.stringify(stackStates)}`); const isCompleted = stackStates.every( (stackState) => @@ -791,11 +791,11 @@ async function parallelDestroy(cdkOptions, stackStates) { })); } - logger.silly(`Initial stack states: ${JSON.stringify(stackStates)}`); + logger.trace(`Initial stack states: ${JSON.stringify(stackStates)}`); await updateDestroyStatuses(); - logger.silly(`After update destroy statuses: ${JSON.stringify(stackStates)}`); + logger.trace(`After update destroy statuses: ${JSON.stringify(stackStates)}`); await destroyStacks(); - logger.silly(`After destroy stacks: ${JSON.stringify(stackStates)}`); + logger.trace(`After destroy stacks: ${JSON.stringify(stackStates)}`); const isCompleted = stackStates.every( (stackState) => @@ -814,6 +814,7 @@ module.exports = { destroy, bootstrap, getCdkVersion, + getChildLogger, parallelDeploy, parallelDestroy, initializeLogger, diff --git a/packages/core/logger.js b/packages/core/logger.js index cb8dcd1462..5ba2edea72 100644 --- a/packages/core/logger.js +++ b/packages/core/logger.js @@ -1,60 +1,40 @@ "use strict"; const path = require("path"); -const jsonStringify = require("fast-safe-stringify"); -const { createLogger, format, transports } = require("winston"); -const SPLAT = Symbol.for("splat"); - -const consoleLogFormat = format.printf(({ message, [SPLAT]: splat }) => { - return joinMessageAndSplat(message, splat); -}); - -const fileLogFormat = format.printf( - ({ level, message, [SPLAT]: splat, label, timestamp }) => { - message = joinMessageAndSplat(message, splat); - return label - ? `${timestamp} [${label}] ${level}: ${message}` - : `${timestamp} ${level}: ${message}`; - } -); - -const consoleTransport = new transports.Console({ - level: "info", - format: format.combine(format.colorize(), consoleLogFormat), -}); - -const logger = createLogger({ - transports: [ consoleTransport ], +const log4js = require("log4js"); + +log4js.configure({ + appenders: { + console: { type: 'console' }, + }, + categories: { + default: { appenders: ['console'], level: 'info' }, + }, }); +const logger = log4js.getLogger(); const initializeLogger = function (appBuildPath) { - // Update level for console transport - consoleTransport.level = process.env.DEBUG ? "debug" : "info"; - - // Add file transport - logger.add( - new transports.File({ - filename: path.join(appBuildPath, 'sst-debug.log'), - maxsize: 1024 * 1024 * 10, - maxFiles: 5, - tailable: true, - level: "silly", - format: format.combine(format.timestamp(), fileLogFormat), - handleExceptions: true, - handleRejections: true, - }) - ); - + // Initialize logger does 2 things: + // - update 'console' appender's level based on the DEBUG flag + // - create 'file' appender to log to sst-debug.log + log4js.configure({ + appenders: { + file: { type: 'fileSync', filename: path.join(appBuildPath, 'sst-debug.log') }, + console: { type: 'console', layout: { type: 'messagePassThrough' } }, + consoleFilter: { + type: 'logLevelFilter', + level: process.env.DEBUG ? "debug" : "info", + appender: 'console', + }, + }, + categories: { + default: { appenders: [ 'consoleFilter', 'file' ], level: 'trace' }, + }, + }); }; -function joinMessageAndSplat(message, splat) { - return [message] - .concat(splat || []) - .map((arg) => (typeof arg === "string" ? arg : jsonStringify(arg))) - .join(" "); -} - module.exports = { logger, initializeLogger, + getChildLogger: log4js.getLogger, }; diff --git a/packages/core/package.json b/packages/core/package.json index a3c1624230..f1de6365a2 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -20,8 +20,8 @@ "dependencies": { "aws-sdk": "^2.761.0", "chalk": "^4.1.0", - "sst-cdk": "1.79.0-rc.1", - "winston": "^3.3.3" + "log4js": "^6.3.0", + "sst-cdk": "1.79.0-rc.1" }, "gitHead": "0fab8ab33d6a8c56bae34a6b1feb86655371e928" } diff --git a/yarn.lock b/yarn.lock index e9a36f1462..9937d91aef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1711,15 +1711,6 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@dabh/diagnostics@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.2.tgz#290d08f7b381b8f94607dc8f471a12c675f9db31" - integrity sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q== - dependencies: - colorspace "1.1.x" - enabled "2.0.x" - kuler "^2.0.0" - "@eslint/eslintrc@^0.2.2": version "0.2.2" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.2.tgz#d01fc791e2fc33e88a29d6f3dc7e93d0cd784b76" @@ -3381,7 +3372,7 @@ async@^1.4.2: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= -async@^3.1.0, async@^3.2.0: +async@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== @@ -4060,7 +4051,7 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.9.0, color-convert@^1.9.1: +color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -4079,45 +4070,21 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0, 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== -color-string@^1.5.2: - version "1.5.4" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6" - integrity sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a" - integrity sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w== - dependencies: - color-convert "^1.9.1" - color-string "^1.5.2" - colorette@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== -colors@^1.2.1, colors@^1.4.0: +colors@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -colorspace@1.1.x: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.2.tgz#e0128950d082b86a2168580796a0aa5d6c68d8c5" - integrity sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ== - dependencies: - color "3.0.x" - text-hex "1.0.x" - columnify@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" @@ -4453,6 +4420,16 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" +date-format@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" + integrity sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA== + +date-format@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-3.0.0.tgz#eb8780365c7d2b1511078fb491e6479780f3ad95" + integrity sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w== + dateformat@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" @@ -4719,11 +4696,6 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -enabled@2.0.x: - version "2.0.0" - resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" - integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== - encoding@^0.1.11, encoding@^0.1.12: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -5161,7 +5133,7 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fast-safe-stringify@^2.0.4, fast-safe-stringify@^2.0.6: +fast-safe-stringify@^2.0.6: version "2.0.7" resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== @@ -5173,11 +5145,6 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -fecha@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.0.tgz#3ffb6395453e3f3efff850404f0a59b6747f5f41" - integrity sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg== - figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" @@ -5279,6 +5246,11 @@ flat-cache@^3.0.4: flatted "^3.1.0" rimraf "^3.0.2" +flatted@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + flatted@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067" @@ -5292,11 +5264,6 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -fn.name@1.x.x: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" - integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== - for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -6052,11 +6019,6 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - 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" @@ -6979,11 +6941,6 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -kuler@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" - integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== - lazystream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" @@ -7254,16 +7211,16 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -logform@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/logform/-/logform-2.2.0.tgz#40f036d19161fc76b68ab50fdc7fe495544492f2" - integrity sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg== +log4js@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.3.0.tgz#10dfafbb434351a3e30277a00b9879446f715bcb" + integrity sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw== dependencies: - colors "^1.2.1" - fast-safe-stringify "^2.0.4" - fecha "^4.2.0" - ms "^2.1.1" - triple-beam "^1.3.0" + date-format "^3.0.0" + debug "^4.1.1" + flatted "^2.0.1" + rfdc "^1.1.4" + streamroller "^2.2.4" loud-rejection@^1.0.0: version "1.6.0" @@ -8026,13 +7983,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -one-time@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" - integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== - dependencies: - fn.name "1.x.x" - onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -8764,7 +8714,7 @@ read@1, read@^1.0.4, read@~1.0.1: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@^2.3.7, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, 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== @@ -9061,6 +9011,11 @@ retry@^0.10.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= +rfdc@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.2.0.tgz#9e9894258f48f284b43c3143c68070a4f373b949" + integrity sha512-ijLyszTMmUrXvjSooucVQwimGUk84eRcmCuLV8Xghe3UO85mjUtRAHRyoMM6XtyqbECaXuBWx18La3523sXINA== + rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -9246,13 +9201,6 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -9516,11 +9464,6 @@ sst-cdk@1.79.0-rc.1: wrap-ansi "^7.0.0" yargs "^16.2.0" -stack-trace@0.0.x: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= - stack-utils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" @@ -9559,6 +9502,15 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== +streamroller@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-2.2.4.tgz#c198ced42db94086a6193608187ce80a5f2b0e53" + integrity sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ== + dependencies: + date-format "^2.1.0" + debug "^4.1.1" + fs-extra "^8.1.0" + string-argv@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" @@ -9851,11 +9803,6 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== -text-hex@1.0.x: - version "1.0.0" - resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" - integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== - text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -10013,11 +9960,6 @@ trim-off-newlines@^1.0.0: resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= -triple-beam@^1.2.0, triple-beam@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" - integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== - ts-jest@^26.1.4: version "26.4.4" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.4.4.tgz#61f13fb21ab400853c532270e52cc0ed7e502c49" @@ -10433,29 +10375,6 @@ windows-release@^3.1.0: dependencies: execa "^1.0.0" -winston-transport@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.4.0.tgz#17af518daa690d5b2ecccaa7acf7b20ca7925e59" - integrity sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw== - dependencies: - readable-stream "^2.3.7" - triple-beam "^1.2.0" - -winston@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/winston/-/winston-3.3.3.tgz#ae6172042cafb29786afa3d09c8ff833ab7c9170" - integrity sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw== - dependencies: - "@dabh/diagnostics" "^2.0.2" - async "^3.1.0" - is-stream "^2.0.0" - logform "^2.2.0" - one-time "^1.0.0" - readable-stream "^3.4.0" - stack-trace "0.0.x" - triple-beam "^1.3.0" - winston-transport "^4.4.0" - word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" From 1693554604f7a2805fcb29b668c40b3e8b3ab81f Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 20 Jan 2021 21:55:03 -0500 Subject: [PATCH 293/481] Moving to the eslint node API instead --- .../assets/cdk-wrapper/.eslintrc.internal.js | 30 ------- packages/cli/assets/cdk-wrapper/eslint.js | 81 +++++++++++++++++++ packages/cli/scripts/start.js | 16 +--- packages/cli/scripts/util/cdkHelpers.js | 59 ++++++-------- packages/resources/package.json | 2 + packages/resources/src/App.ts | 52 ++++++------ yarn.lock | 7 ++ 7 files changed, 144 insertions(+), 103 deletions(-) delete mode 100644 packages/cli/assets/cdk-wrapper/.eslintrc.internal.js create mode 100644 packages/cli/assets/cdk-wrapper/eslint.js diff --git a/packages/cli/assets/cdk-wrapper/.eslintrc.internal.js b/packages/cli/assets/cdk-wrapper/.eslintrc.internal.js deleted file mode 100644 index 2d51376d30..0000000000 --- a/packages/cli/assets/cdk-wrapper/.eslintrc.internal.js +++ /dev/null @@ -1,30 +0,0 @@ -module.exports = { - root: true, - parser: "@babel/eslint-parser", - parserOptions: { - requireConfigFile: false, - babelOptions: { - presets: [ - [ - "@babel/preset-env", - { - targets: { - node: "10", - }, - }, - ], - ], - plugins: ["@babel/plugin-proposal-class-properties"], - }, - }, - plugins: ["@babel"], - extends: "eslint:recommended", - overrides: [ - { - files: ["*.ts", "*.tsx"], - plugins: ["@typescript-eslint"], - parser: "@typescript-eslint/parser", - extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"], - }, - ], -}; diff --git a/packages/cli/assets/cdk-wrapper/eslint.js b/packages/cli/assets/cdk-wrapper/eslint.js new file mode 100644 index 0000000000..3f0f629d36 --- /dev/null +++ b/packages/cli/assets/cdk-wrapper/eslint.js @@ -0,0 +1,81 @@ +#!/usr/bin/env node + +"use strict"; + +process.on("uncaughtException", (err) => { + console.log(err); + process.exit(1); +}); + +const { ESLint } = require("eslint"); + +const baseConfig = { + root: true, + parser: "@babel/eslint-parser", + parserOptions: { + requireConfigFile: false, + babelOptions: { + presets: [ + [ + "@babel/preset-env", + { + targets: { + node: "10", + }, + }, + ], + ], + plugins: ["@babel/plugin-proposal-class-properties"], + }, + }, + plugins: ["@babel"], + extends: "eslint:recommended", + overrides: [ + { + files: ["*.ts", "*.tsx"], + plugins: ["@typescript-eslint"], + parser: "@typescript-eslint/parser", + extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"], + }, + ], +}; + +const inputFiles = process.argv.slice(3); + +(async function main() { + // 1. Create an instance with the `fix` option. + const eslint = new ESLint({ + fix: true, + baseConfig, + globInputPaths: false, + // Handling nested ESLint projects in Yarn Workspaces + // https://github.com/serverless-stack/serverless-stack/issues/11 + resolvePluginsRelativeTo: ".", + errorOnUnmatchedPattern: false, + }); + + // 2. Lint files. This doesn't modify target files. + const results = await eslint.lintFiles(inputFiles); + + // 3. Modify the files with the fixed code. + await ESLint.outputFixes(results); + + // 4. Format the results. + const formatter = await eslint.loadFormatter("stylish"); + const resultText = formatter.format(results); + + // 5. Output it. + if (resultText) { + console.log(resultText); + } + + // If there is an error then exit with the status code + results.forEach((result) => { + if (result.errorCount > 0) { + process.exit(1); + } + }); +})().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 3b5efc4f21..d1be3f2393 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -23,8 +23,8 @@ const { const array = require("../lib/array"); // Setup logger -const clientLogger = getChildLogger('client'); -const builderLogger = getChildLogger('builder'); +const clientLogger = getChildLogger("client"); +const builderLogger = getChildLogger("builder"); // Create Promise.allSettled shim allSettled.shim(); @@ -599,18 +599,10 @@ function lint(srcPath) { ); const cp = spawn( - getBinPath("eslint"), + "node", [ - "--no-error-on-unmatched-pattern", + path.join(paths.appBuildPath, "eslint.js"), process.env.NO_COLOR === "true" ? "--no-color" : "--color", - "--config", - path.join(paths.appBuildPath, ".eslintrc.internal.js"), - path.join(paths.ownPath, "scripts", "util", ".eslintrc.internal.js"), - "--fix", - // Handling nested ESLint projects in Yarn Workspaces - // https://github.com/serverless-stack/serverless-stack/issues/11 - "--resolve-plugins-relative-to", - ".", ...inputFiles, ], { stdio: "inherit", cwd: path.join(paths.appPath, srcPath) } diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index 6b574a75cb..5994ab5def 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -5,6 +5,7 @@ const util = require("util"); const fs = require("fs-extra"); const chalk = require("chalk"); const esbuild = require("esbuild"); +const spawn = require("cross-spawn"); const sstCore = require("@serverless-stack/core"); const exec = util.promisify(require("child_process").exec); @@ -170,38 +171,26 @@ async function lint(inputFiles) { logger.info(chalk.grey("Linting source")); - try { - const { stdout, stderr } = await exec( - [ - getBinPath("eslint"), - process.env.NO_COLOR === "true" ? "--no-color" : "--color", - "--no-error-on-unmatched-pattern", - "--config", - path.join(paths.appBuildPath, ".eslintrc.internal.js"), - "--fix", - // Handling nested ESLint projects in Yarn Workspaces - // https://github.com/serverless-stack/serverless-stack/issues/11 - "--resolve-plugins-relative-to", - ".", - ...inputFiles, - ].join(" "), - { cwd: paths.appPath } - ); - if (stdout) { - logger.info(stdout); - } - if (stderr) { - logger.info(stderr); - } - } catch (e) { - if (e.stdout) { - logger.info(e.stdout); - } else if (e.stderr) { - logger.info(e.stderr); - } else { - logger.info(e); - } + const response = spawn.sync( + "node", + [ + path.join(paths.appBuildPath, "eslint.js"), + process.env.NO_COLOR === "true" ? "--no-color" : "--color", + ...inputFiles, + ], + { stdio: "inherit", cwd: paths.appPath } + ); + + if (response.error) { + logger.info(response.error); exitWithMessage("There was a problem linting the source."); + } else if (response.stderr) { + logger.info(response.stderr); + exitWithMessage("There was a problem linting the source."); + } else if (response.status === 1) { + exitWithMessage("There was a problem linting the source."); + } else if (response.stdout) { + logger.debug(response.stdout); } } @@ -294,10 +283,10 @@ async function transpile(cliInfo) { return await getInputFilesFromEsbuildMetafile(metafile); } -async function copyConfigFiles() { - return await fs.copy( - path.join(paths.ownPath, "assets", "cdk-wrapper", ".eslintrc.internal.js"), - path.join(paths.appBuildPath, ".eslintrc.internal.js") +function copyConfigFiles() { + return fs.copy( + path.join(paths.ownPath, "assets", "cdk-wrapper", "eslint.js"), + path.join(paths.appBuildPath, "eslint.js") ); } diff --git a/packages/resources/package.json b/packages/resources/package.json index af9d446e89..108651d451 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -29,6 +29,7 @@ "@aws-cdk/aws-lambda-nodejs": "1.79.0", "@aws-cdk/core": "1.79.0", "chalk": "^4.1.0", + "cross-spawn": "^7.0.3", "esbuild": "^0.8.31", "eslint": "^7.16.0", "fs-extra": "^9.0.1", @@ -36,6 +37,7 @@ "zip-local": "^0.3.4" }, "devDependencies": { + "@types/cross-spawn": "^6.0.2", "@types/fs-extra": "^9.0.6", "@types/node": "^14.0.27" }, diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 9e6f32cfeb..6e84bd6fc0 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -1,6 +1,7 @@ import chalk from "chalk"; import * as path from "path"; import * as fs from "fs-extra"; +import * as spawn from "cross-spawn"; import * as cdk from "@aws-cdk/core"; import * as cxapi from "@aws-cdk/cx-api"; import { execSync } from "child_process"; @@ -29,6 +30,11 @@ function getBinPath(pkg: string, exeName?: string): string { return path.join(matches[1], ".bin", exeName || pkg); } +function exitWithMessage(message: string) { + console.error(message); + process.exit(1); +} + /** * Deploy props for apps. */ @@ -194,7 +200,7 @@ export class App extends cdk.App { try { metaJson = fs.readJsonSync(file); } catch (e) { - throw new Error("There was a problem reading the esbuild metafile."); + exitWithMessage("There was a problem reading the esbuild metafile."); } return Object.keys(metaJson.inputs).map((input) => path.resolve(input)); @@ -209,30 +215,24 @@ export class App extends cdk.App { console.log(chalk.grey("Linting Lambda function source")); - try { - const stdout = execSync( - [ - getBinPath("eslint"), - process.env.NO_COLOR === "true" ? "--no-color" : "--color", - "--no-error-on-unmatched-pattern", - "--config", - path.join(appPath, this.buildDir, ".eslintrc.internal.js"), - "--fix", - // Handling nested ESLint projects in Yarn Workspaces - // https://github.com/serverless-stack/serverless-stack/issues/11 - "--resolve-plugins-relative-to", - ".", - ...inputFiles, - ].join(" "), - { cwd: srcPath } - ); - const output = stdout.toString(); - if (output.trim() !== "") { - console.log(output); - } - } catch (e) { - console.log(e.stdout.toString()); - throw new Error("There was a problem linting the source."); + const response = spawn.sync( + "node", + [ + path.join(appPath, this.buildDir, "eslint.js"), + process.env.NO_COLOR === "true" ? "--no-color" : "--color", + ...inputFiles, + ], + { stdio: "inherit", cwd: srcPath } + ); + + if (response.error) { + console.log(response.error); + exitWithMessage("There was a problem linting the source."); + } else if (response.stderr) { + console.log(response.stderr); + exitWithMessage("There was a problem linting the source."); + } else if (response.status === 1) { + exitWithMessage("There was a problem linting the source."); } } @@ -261,7 +261,7 @@ export class App extends cdk.App { } } catch (e) { console.log(e.stdout.toString()); - throw new Error("There was a problem type checking the source."); + exitWithMessage("There was a problem type checking the source."); } } } diff --git a/yarn.lock b/yarn.lock index 9937d91aef..6ff6e406b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2858,6 +2858,13 @@ dependencies: "@babel/types" "^7.3.0" +"@types/cross-spawn@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@types/cross-spawn/-/cross-spawn-6.0.2.tgz#168309de311cd30a2b8ae720de6475c2fbf33ac7" + integrity sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw== + dependencies: + "@types/node" "*" + "@types/eslint-visitor-keys@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" From fc1fda631c0c5abc55dc72f839ca95101145e432 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 20 Jan 2021 22:46:54 -0500 Subject: [PATCH 294/481] Moving lambda to src dir in template --- .../javascript/lib/%stack-name.PascalCased%.template.js | 2 +- .../templates/javascript/{ => src}/lambda.js | 0 .../typescript/lib/%stack-name.PascalCased%.template.ts | 2 +- .../templates/typescript/{ => src}/lambda.ts | 0 packages/resources/src/util/builder.ts | 9 +++++++-- 5 files changed, 9 insertions(+), 4 deletions(-) rename packages/create-serverless-stack/templates/javascript/{ => src}/lambda.js (100%) rename packages/create-serverless-stack/templates/typescript/{ => src}/lambda.ts (100%) diff --git a/packages/create-serverless-stack/templates/javascript/lib/%stack-name.PascalCased%.template.js b/packages/create-serverless-stack/templates/javascript/lib/%stack-name.PascalCased%.template.js index a8cfc1916e..bd0d891815 100644 --- a/packages/create-serverless-stack/templates/javascript/lib/%stack-name.PascalCased%.template.js +++ b/packages/create-serverless-stack/templates/javascript/lib/%stack-name.PascalCased%.template.js @@ -10,7 +10,7 @@ export default class %stack-name.PascalCased% extends sst.Stack { // Create a Lambda function triggered by an HTTP API const lambda = new sst.Function(this, "Lambda", { - handler: "lambda.handler", + handler: "src/lambda.handler", }); // Create the HTTP API diff --git a/packages/create-serverless-stack/templates/javascript/lambda.js b/packages/create-serverless-stack/templates/javascript/src/lambda.js similarity index 100% rename from packages/create-serverless-stack/templates/javascript/lambda.js rename to packages/create-serverless-stack/templates/javascript/src/lambda.js diff --git a/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts b/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts index 7bc412bc50..aac3c8843e 100644 --- a/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts +++ b/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts @@ -10,7 +10,7 @@ export default class %stack-name.PascalCased% extends sst.Stack { // Create a Lambda function triggered by an HTTP API const lambda = new sst.Function(this, "Lambda", { - handler: "lambda.handler", + handler: "src/lambda.handler", }); // Create the HTTP API diff --git a/packages/create-serverless-stack/templates/typescript/lambda.ts b/packages/create-serverless-stack/templates/typescript/src/lambda.ts similarity index 100% rename from packages/create-serverless-stack/templates/typescript/lambda.ts rename to packages/create-serverless-stack/templates/typescript/src/lambda.ts diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index dd089d6dcb..4ebe2440ad 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -50,10 +50,16 @@ function getAllExternalsForHandler( return externals; } +function getHandlerCopy(srcPath: string, handler: string): string { + return srcPath === "." ? handler : `${srcPath}/${handler}`; +} + export function builder(builderProps: BuilderProps): BuilderOutput { const { srcPath, bundle, handler, buildDir } = builderProps; - console.log(chalk.grey(`Building Lambda function ${srcPath}/${handler}`)); + console.log( + chalk.grey(`Building Lambda function ${getHandlerCopy(srcPath, handler)}`) + ); const appPath = process.cwd(); @@ -100,7 +106,6 @@ export function builder(builderProps: BuilderProps): BuilderOutput { try { zipLocal.sync.zip(dir).compress().save(zipFile); - //crossZip.zipSync(dir, zipFile); } catch (e) { console.log(e); throw new Error("There was a problem generating Lambda package."); From 1ff6b3e0b18587d75fb1a3b3c6f5bdf4029ff768 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 20 Jan 2021 22:51:33 -0500 Subject: [PATCH 295/481] Fixing docs with new handler prop Closes #56 --- www/docs/installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/docs/installation.md b/www/docs/installation.md index 8032a2ff18..d70292e2b1 100644 --- a/www/docs/installation.md +++ b/www/docs/installation.md @@ -129,7 +129,7 @@ The sample stack also comes with a Lambda function and API endpoint. The Lambda ```js new sst.Function(this, "Lambda", { - entry: "src/lambda.js", + handler: "src/lambda.handler", }); ``` From 84ea8fdc2ba49ac7be0d1646263c64303b471361 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 20 Jan 2021 23:04:16 -0500 Subject: [PATCH 296/481] v0.6.2 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/cli/test/add-cdk/package.json | 4 ++-- packages/cli/test/base-ts/package.json | 6 +++--- packages/cli/test/base/package.json | 6 +++--- packages/cli/test/cdk-command/package.json | 6 +++--- packages/cli/test/config-invalid/package.json | 6 +++--- packages/cli/test/config-no-name/package.json | 6 +++--- packages/cli/test/config-not-found/package.json | 6 +++--- packages/cli/test/config/package.json | 6 +++--- packages/cli/test/context/package.json | 6 +++--- packages/cli/test/eslint-ignore-rule/package.json | 6 +++--- packages/cli/test/eslint-ignore/package.json | 6 +++--- packages/cli/test/eslint-ts/package.json | 6 +++--- packages/cli/test/eslint/package.json | 6 +++--- packages/cli/test/handler-function-not-found/package.json | 6 +++--- packages/cli/test/handler-not-found/package.json | 6 +++--- packages/cli/test/jest-ts/package.json | 6 +++--- packages/cli/test/jest/package.json | 6 +++--- packages/cli/test/lambda-override-eslintrc/package.json | 6 +++--- packages/cli/test/lambda-override-tsconfig/package.json | 6 +++--- packages/cli/test/mismatched-cdk-versions/package.json | 6 +++--- packages/cli/test/stack-no-prefix/package.json | 6 +++--- packages/cli/test/stack-set-env/package.json | 6 +++--- packages/cli/test/start-base/package.json | 6 +++--- packages/cli/test/start-guide/package.json | 6 +++--- packages/cli/test/start-no-src-path/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 30 files changed, 81 insertions(+), 81 deletions(-) diff --git a/lerna.json b/lerna.json index e8667840fe..f1d243cbb3 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.6.1" + "version": "0.6.2" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 0bbf285ca0..49cd57563d 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.6.1", + "version": "0.6.2", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -45,8 +45,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^0.6.1", - "@serverless-stack/resources": "^0.6.1", + "@serverless-stack/core": "^0.6.2", + "@serverless-stack/resources": "^0.6.2", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index e19dfc73f4..2893442cc6 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -2,12 +2,12 @@ "name": "@serverless-stack/cli-test-add-cdk", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "add-cdk": "sst add-cdk" }, "dependencies": { - "@serverless-stack/cli": "^0.6.1" + "@serverless-stack/cli": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index 531e61cc35..ea68ffc129 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base-ts", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "start": "sst start", "build": "sst build", @@ -13,8 +13,8 @@ "dependencies": { "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index 98aa9ec822..b1c797f303 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "start": "sst start", "build": "sst build", @@ -17,8 +17,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index d527240047..c85ff9319a 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-cdk-command", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "cdk": "sst cdk" }, "dependencies": { - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index 37ae171d03..a10fab3220 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-invalid", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index 46bc2fb760..ac256e1bb0 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-no-name", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index 7a9fc35911..c4a62ab718 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-not-found", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index 480cacf34f..e4bdd3dd74 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-test", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index 87118d3193..b65ee1e872 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-context", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index cf85940cee..c067a892b2 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ignore-rule", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index 4f5e634efa..9ae56d8eaa 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ignore", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index 8dcd0ff996..3ee0a32a1f 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ts", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index 893e17f4be..fdc38daac4 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index 586f0f134b..61bcf3d86a 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-handler-function-not-found", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index d405e13195..6cb6d4b85c 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-handler-not-found", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index a0410a0811..d133b14e30 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest-ts", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "build": "sst build", "test": "sst test" @@ -18,8 +18,8 @@ "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/aws-sqs": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index 3fb1f484b7..e7fd08c103 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "test": "sst test" }, @@ -14,8 +14,8 @@ "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/lambda-override-eslintrc/package.json b/packages/cli/test/lambda-override-eslintrc/package.json index 1d1fb3efcd..14588df66b 100644 --- a/packages/cli/test/lambda-override-eslintrc/package.json +++ b/packages/cli/test/lambda-override-eslintrc/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-eslintrc", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "build": "sst build", "start": "sst start" @@ -11,8 +11,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json index 5a4574402f..3e1d97b6b2 100644 --- a/packages/cli/test/lambda-override-tsconfig/package.json +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-tsconfig", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "build": "sst build", "start": "sst start" @@ -11,8 +11,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index 6a63c84686..c779338dd7 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-mismatched-cdk-versions", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "build": "sst build" }, @@ -12,8 +12,8 @@ "@aws-cdk/aws-iam": "1.57.0", "@aws-cdk/aws-s3": "^1.57.0", "@aws-cdk/core": "1.56.0", - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index 5480fb6cc0..72ed734032 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-stack-no-prefix", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index e9ec94dd0c..54283e0c48 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-stack-set-env", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index 06861f8cc0..f38f06c1c6 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-base", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "start": "sst start", "build": "sst build", @@ -16,8 +16,8 @@ "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/start-guide/package.json b/packages/cli/test/start-guide/package.json index ee453ba343..2bf8c5d1da 100644 --- a/packages/cli/test/start-guide/package.json +++ b/packages/cli/test/start-guide/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-guide", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "add-package": "sst add-package", "start": "sst start", @@ -19,8 +19,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1" + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2" }, "license": "ISC" } diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index c5d250ef5b..2f97b53799 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-no-src-path", "private": true, "description": "tests", - "version": "0.6.1", + "version": "0.6.2", "scripts": { "start": "sst start", "build": "sst build", @@ -15,8 +15,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.1", - "@serverless-stack/resources": "^0.6.1", + "@serverless-stack/cli": "^0.6.2", + "@serverless-stack/resources": "^0.6.2", "mirrarray": "^2.0.0" }, "license": "ISC" diff --git a/packages/core/package.json b/packages/core/package.json index d9dd67d5bf..e2a962d39d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.6.1", + "version": "0.6.2", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index a3d022f2c2..bc6e2f4ed2 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.6.1", + "version": "0.6.2", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 108651d451..2a3e9e9d64 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.6.1", + "version": "0.6.2", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 967b8f9d84f288f8fd3cfdde5ed9b284bd455bab Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 21 Jan 2021 20:47:04 -0500 Subject: [PATCH 297/481] Update README.md --- README.md | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index d5dbe906b1..219b74fdf5 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,23 @@ -# Serverless Stack Toolkit (SST) [![Slack](https://img.shields.io/badge/Slack-chat-blue.svg)][slack] [![npm](https://img.shields.io/npm/v/@serverless-stack/cli.svg)](https://www.npmjs.com/package/@serverless-stack/cli) [![Build Status](https://github.com/serverless-stack/serverless-stack/workflows/CI/badge.svg)](https://github.com/serverless-stack/serverless-stack/actions) +

+ + Serverless Stack Toolkit (SST) + +

+ +

+ Serverless Stack Toolkit (SST) +

-Logo +

+ Slack + npm + Build status +

Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.com/cdk/) that: -- Includes a complete [local development environment for Lambda](#local-lambda-development) - - Supports remotely invoking local functions - - Zero-config ES and TypeScript support using [esbuild](https://esbuild.github.io) +- Includes a [Live Lambda Development environment](#live-lambda-development) +- With zero-config support for ES and TypeScript using [esbuild](https://esbuild.github.io) - Allows you to use [CDK with Serverless Framework](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html) Getting help: [**Slack**][slack] / [**Twitter**](https://twitter.com/ServerlessStack) / [**Forums**](https://discourse.serverless-stack.com/) @@ -21,13 +32,26 @@ $ cd my-sst-app $ npx sst start ``` -

-sst start +

+ + sst start +

+## Live Lambda Development + +The `sst start` command starts up a local development environment that opens a WebSocket connection to your deployed app and proxies any Lambda requests to your local machine. This allows you to: + +- Work on your Lambda functions locally +- Supports all Lambda triggers, so there's no need to mock API Gateway, SQS, SNS, etc. +- Supports real Lambda environment variables and Lambda IAM permissions +- And it's fast. There's nothing to deploy when you make a change! + +[Read more about Live Lambda Development](). + ## Documentation -[**View the SST docs**](https://docs.serverless-stack.com) +[**View the SST docs**](https://docs.serverless-stack.com). ## Future Roadmap From 58dac50edf71b45f0ed723b55567c4a72ac174e3 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 21 Jan 2021 20:47:49 -0500 Subject: [PATCH 298/481] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 219b74fdf5..31f67668ac 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,8 @@ Build status

+--- + Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.com/cdk/) that: - Includes a [Live Lambda Development environment](#live-lambda-development) From 2c2078039252fad83e4a90752bb18a36bdcfb989 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 21 Jan 2021 22:16:10 -0500 Subject: [PATCH 299/481] Update README.md --- README.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 31f67668ac..aaddca075b 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,16 @@ Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.c - With zero-config support for ES and TypeScript using [esbuild](https://esbuild.github.io) - Allows you to use [CDK with Serverless Framework](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html) -Getting help: [**Slack**][slack] / [**Twitter**](https://twitter.com/ServerlessStack) / [**Forums**](https://discourse.serverless-stack.com/) +[![sst start](https://d1ne2nltv07ycv.cloudfront.net/SST/sst-start-demo/sst-start-demo-2.gif)](https://d1ne2nltv07ycv.cloudfront.net/SST/sst-start-demo/sst-start-demo-2.mp4) + +SST also supports deploying your CloudFormation stacks asynchronously. [Seed](https://seed.run) natively supports concurrent asynchronous deployments for your SST apps. And SST deployments on Seed are free! + +SST also comes with a few other niceties: + +- Automatically lints your code using [ESLint](https://eslint.org/) +- Runs your unit tests using [Jest](https://jestjs.io/) + +Behind the scenes, SST uses [a lightweight fork of AWS CDK](https://github.com/serverless-stack/aws-cdk) to programmatically invoke the various CDK commands. ## Quick Start @@ -34,11 +43,6 @@ $ cd my-sst-app $ npx sst start ``` -

- - sst start - -

## Live Lambda Development @@ -49,7 +53,7 @@ The `sst start` command starts up a local development environment that opens a W - Supports real Lambda environment variables and Lambda IAM permissions - And it's fast. There's nothing to deploy when you make a change! -[Read more about Live Lambda Development](). +[Read more about Live Lambda Development](https://docs.serverless-stack.com/live-lambda-development). ## Documentation From ebc19117ff80c35653197efe935883c06fee3c36 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 21 Jan 2021 22:18:05 -0500 Subject: [PATCH 300/481] Updating docs with live lambda development --- packages/cli/README.md | 2 + packages/create-serverless-stack/README.md | 2 + packages/resources/README.md | 2 + www/docs/about.md | 32 ++++++-- www/docs/background.md | 67 ----------------- www/docs/live-lambda-development.md | 69 ++++++++++++++++++ www/sidebars.js | 2 +- .../img/sst-start-demo-architecture.png | Bin 0 -> 344494 bytes 8 files changed, 100 insertions(+), 76 deletions(-) delete mode 100644 www/docs/background.md create mode 100644 www/docs/live-lambda-development.md create mode 100644 www/static/img/sst-start-demo-architecture.png diff --git a/packages/cli/README.md b/packages/cli/README.md index 91aa27db24..f34bfdf301 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -1,3 +1,5 @@ # @serverless-stack/cli [![npm](https://img.shields.io/npm/v/@serverless-stack/cli.svg)](https://www.npmjs.com/package/@serverless-stack/cli) Part of the **[Serverless Stack Toolkit](https://github.com/serverless-stack/serverless-stack)**. The `sst` CLI allows you to build, deploy, test, and remove Serverless Stack apps. + +[View the @serverless-stack/cli docs here](https://docs.serverless-stack.com/packages/cli). diff --git a/packages/create-serverless-stack/README.md b/packages/create-serverless-stack/README.md index 4c3f118041..be1aaf3184 100644 --- a/packages/create-serverless-stack/README.md +++ b/packages/create-serverless-stack/README.md @@ -1,3 +1,5 @@ # create-serverless-stack [![npm](https://img.shields.io/npm/v/create-serverless-stack)](https://www.npmjs.com/package/create-serverless-stack) Part of the **[Serverless Stack Toolkit](https://github.com/serverless-stack/serverless-stack)**. A simple CLI (`create-serverless-stack`) that helps you create your Serverless Stack projects. + +[View the create-serverless-stack docs here](https://docs.serverless-stack.com/packages/create-serverless-stack). diff --git a/packages/resources/README.md b/packages/resources/README.md index 0a6f9bf04d..cb161af718 100644 --- a/packages/resources/README.md +++ b/packages/resources/README.md @@ -1,3 +1,5 @@ # @serverless-stack/resources [![npm](https://img.shields.io/npm/v/@serverless-stack/resources.svg)](https://www.npmjs.com/package/@serverless-stack/resources) Part of the **[Serverless Stack Toolkit](https://github.com/serverless-stack/serverless-stack)**. + +[View the @serverless-stack/resources docs here](https://docs.serverless-stack.com/packages/resources). diff --git a/www/docs/about.md b/www/docs/about.md index f34c22adef..acfebb2771 100644 --- a/www/docs/about.md +++ b/www/docs/about.md @@ -9,18 +9,32 @@ slug: / import config from "../config"; -

Serverless Stack Toolkit

+

+ npm +

+ +

Serverless Stack Toolkit

Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.com/cdk/) that: -- Includes a complete [local development environment for Lambda](working-locally.md) - - Supports remotely invoking local functions - - Zero-config ES and TypeScript support using [esbuild](https://esbuild.github.io) +- Includes a [Live Lambda Development environment](live-lambda-development.md) +- With zero-config support for ES and TypeScript using [esbuild](https://esbuild.github.io) - Allows you to use [CDK with Serverless Framework](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html) -

-sst start -

+ + +--- + +SST also supports deploying your CloudFormation stacks asynchronously. [Seed](https://seed.run) natively supports concurrent asynchronous deployments for your SST apps. And SST deployments on Seed are free! + +SST also comes with a few other niceties: + +- Automatically lints your code using [ESLint](https://eslint.org/) +- Runs your unit tests using [Jest](https://jestjs.io/) + +Behind the scenes, SST uses a lightweight fork of AWS CDK to programmatically invoke the various CDK commands. ## Quick start @@ -34,7 +48,9 @@ npx sst start ## Example project -We use SST as a part of the [Serverless Stack guide](https://serverless-stack.com). We build a [simple notes app](http://demo2.serverless-stack.com/) in the guide and the backend for it is created using Serverless Framework and CDK with SST. You can check out the repo here — [serverless-stack-demo-api](https://github.com/AnomalyInnovations/serverless-stack-demo-api). +We have [a demo repo](https://github.com/serverless-stack/sst-start-demo) with a couple of Lambda functions connected to and API endpoint and subscribed to an SNS topic. It allows you to test the `sst start` command. + +We also use SST as a part of the [Serverless Stack guide](https://serverless-stack.com). We build a [simple notes app](http://demo2.serverless-stack.com/) in the guide and the backend for it is created using Serverless Framework and CDK with SST. You can [check out the repo here](https://github.com/AnomalyInnovations/serverless-stack-demo-api). ## Future roadmap diff --git a/www/docs/background.md b/www/docs/background.md deleted file mode 100644 index cd804b2d88..0000000000 --- a/www/docs/background.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -id: background -title: Background -description: Why we created the Serverless Stack Toolkit ---- - -import config from "../config"; - -## Local Lambda development - -Developing Lambdas locally is painful, you either: - -1. Locally mock all the AWS services you are using -2. Or, constantly deploy your changes to test them - -Both these approaches don't work well in practice. Locally mocking all the AWS services can be hard to do and most setups are really flaky. While, constantly deploying your Lambda functions or infrastructure can be simply too slow. - -The `sst start` command starts up a local development environment that opens a WebSocket connection to your deployed app and proxies any Lambda requests to your local machine. This allows you to: - -- Work on your Lambda functions locally -- While, interacting with your entire deployed AWS infrastructure -- Supports all Lambda triggers, so there's no need to mock API Gateway, SQS, SNS, etc. -- Supports real Lambda environment variables and Lambda IAM permissions -- So if a Lambda fails on AWS due to lack of IAM permissions, it would fail locally as well -- And it's fast. There's nothing to deploy when you make a change! - -You can read more about the [**sst start** command here](packages/cli.md#start) and [try out a demo here](https://github.com/serverless-stack/sst-start-demo). - -## Using Serverless Framework with CDK - -[Serverless Framework](https://github.com/serverless/serverless) is great but deploying any other AWS resources requires you to write CloudFormation templates in YAML. CloudFormation templates are incredibly verbose and even creating simple resources can take hundreds of lines of YAML. AWS CDK solves this by allowing you to generate CloudFormation templates using modern programming languages. Making it truly, _infrastructure as code_. - -However, to use AWS CDK alongside your Serverless Framework services, requires you to follow certain conventions. - -- **Deploying all the stacks to the same region and AWS account** - - Serverless Framework apps are deployed to multiple environments using the `--region` and `AWS_PROFILE=profile` options. CDK apps on the other hand, contain CloudFormation stacks that are deployed to multiple regions and AWS accounts simultaneously. - -- **Prefixing stage and resource names** - - Since the same app is deployed to multiple environments, Serverless Framework adopts the practice of prefixing the stack names with the stage name. On the other hand, to deploy a CDK app to multiple stages, you'd need to manually ensure that the stack names and resource names don't thrash. - -SST provides the above out-of-the-box. So you can deploy your Serverless services using: - -```bash -AWS_PROFILE=production serverless deploy --stage prod --region us-east-1 -``` - -And use CDK for the rest of your AWS infrastructure: - -```bash -AWS_PROFILE=production npx sst deploy --stage prod --region us-east-1 -``` - -You can [read more about this here](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html). - -## And more - -As a bonus, SST also supports deploying your CloudFormation stacks asynchronously. So you don't have to waste CI build minutes waiting for CloudFormation to complete. [Seed](https://seed.run) natively supports concurrent asynchronous deployments for your SST apps. Making it 5x faster than other CI services. And SST deployments on Seed are free! - -SST also comes with a few other niceties: - -- Zero-config support for ES and TypeScript using [esbuild](http://esbuild.github.io) -- Automatically lints your code using [ESLint](https://eslint.org/) -- Runs your unit tests using [Jest](https://jestjs.io/) - -Behind the scenes, SST uses a lightweight fork of AWS CDK to programmatically invoke the various CDK commands. diff --git a/www/docs/live-lambda-development.md b/www/docs/live-lambda-development.md new file mode 100644 index 0000000000..f416589081 --- /dev/null +++ b/www/docs/live-lambda-development.md @@ -0,0 +1,69 @@ +--- +id: live-lambda-development +title: Live Lambda Development +description: SST includes a Live Lambda Development environment that allows you to work on your Lambda functions live. +--- + +import useBaseUrl from "@docusaurus/useBaseUrl"; +import config from "../config"; + +SST includes a Live Lambda Development environment. Let's look at this in detail. + +## Background + +Working on Lambda functions locally can be painful. You have to either: + +1. Locally mock all the services that your Lambda function uses + +Like API Gateway, SNS, SQS, etc. This is hard to do. If you are using a tool that mocks a specific service (like API Gateway), you won't be able to test a Lambda that's invoked by a different service (like SNS). On the other hand a service like LocalStack, that tries to mock a whole suite of services, is slow and the mocked services can be out of date. + +2. Or, you'll need to deploy your changes to test them + +Each deployment can take at least a minute and if your internet connection is not great, then the feedback loop can be really slow. + +## `sst start` + +To fix this, we created `sst start`. A local development environment for Lambda. This command does a couple of things: + +1. It deploys a _debug stack_ with a WebSocket API to the same AWS account and region as your app. +2. It deploys your app and replaces the Lambda functions with a _stub_ Lambda. +3. Starts up a local WebSocket client to connect to the debug stack. + +The debug stack contains a serverless WebSocket API and a DynamoDB table. The stub Lambda when invoked, sends a message to the WebSocket API, which in turn sends a message to the local client connected to it. The client then executes the local version of the Lambda function and sends back the results to the WebSocket API. Which then responds to the stub Lambda. And finally the stub Lambda responds back with the results. + +## An example + +Let's look at an example. + +sst start demo architecture + +In this sample app we have: + +- An API Gateway endpoint +- An SNS topic +- A Lambda function (api.js) that responds to the API and sends a message to the SNS topic +- A Lambda function (sns.js) that subscribes to the SNS topic + +So when a request is made to the API endpoint, the stub version of api.js gets invoked and sends a message to the debug stack. This in turn gets streamed to the client. The client invokes the local version of api.js and returns the results to the debug stack. The local version also sends a message to the SNS topic. Meanwhile, the stub api.js responds to the API request with the results. Now the stub version of sns.js gets invoked as it is subscribed to the SNS topic. This gets sent to the debug stack which in turn gets streamed to the client to execute the local version of sns.js. The results of this are streamed back to stub sns.js that responds with the results. + +You can [try out this sample repo here](https://github.com/serverless-stack/sst-start-demo) and [read about the **sst start** command here](packages/cli.md#start). + +## Advantages + +This approach has a couple of advantages. + +- You can work on your Lambda functions locally +- While interacting with your entire deployed AWS infrastructure +- It supports all Lambda triggers, so there's no need to mock API Gateway, SQS, SNS, etc. +- It supports real Lambda environment variables +- And Lambda IAM permissions, so if a Lambda fails on AWS due to the lack of IAM permissions, it would fail locally as well. +- And it's fast! There's nothing to deploy when you make a change! + +A couple of things to note. + +- The debug stack is completely serverless + - So you don't get charged when it's not in use + - And it's very cheap per request, it'll be within the free tier limits +- All the data stays between your local machine and your AWS account + - There are no 3rd party services that are used + - Support for connecting to AWS resources inside VPC is coming soon diff --git a/www/sidebars.js b/www/sidebars.js index fb2b6fda61..8430decb96 100644 --- a/www/sidebars.js +++ b/www/sidebars.js @@ -1,6 +1,6 @@ module.exports = { docs: [ - { Introduction: ["about", "background"] }, + { Introduction: ["about", "live-lambda-development"] }, { Usage: [ "installation", diff --git a/www/static/img/sst-start-demo-architecture.png b/www/static/img/sst-start-demo-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..5eddb7c23b814ab1edd40e0cfe1c334834aeb4cc GIT binary patch literal 344494 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

Rdn$ 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

-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 N(iz<8^ixLO{|D_$w@Uy3 literal 0 HcmV?d00001 From d3a6bed260df08c4f916231f2011dc334858dc39 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 21 Jan 2021 22:43:37 -0500 Subject: [PATCH 301/481] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aaddca075b..05a36379bd 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ The `sst start` command starts up a local development environment that opens a W ## Documentation -[**View the SST docs**](https://docs.serverless-stack.com). +[**Check out the SST docs**](https://docs.serverless-stack.com) ## Future Roadmap From da93a286072061f11a4cf3289b8b1bf0231e8b82 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 21 Jan 2021 22:44:57 -0500 Subject: [PATCH 302/481] Tweaking docs --- www/docs/live-lambda-development.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/www/docs/live-lambda-development.md b/www/docs/live-lambda-development.md index f416589081..1e1434157c 100644 --- a/www/docs/live-lambda-development.md +++ b/www/docs/live-lambda-development.md @@ -41,10 +41,10 @@ In this sample app we have: - An API Gateway endpoint - An SNS topic -- A Lambda function (api.js) that responds to the API and sends a message to the SNS topic -- A Lambda function (sns.js) that subscribes to the SNS topic +- A Lambda function (`api.js`) that responds to the API and sends a message to the SNS topic +- A Lambda function (`sns.js`) that subscribes to the SNS topic -So when a request is made to the API endpoint, the stub version of api.js gets invoked and sends a message to the debug stack. This in turn gets streamed to the client. The client invokes the local version of api.js and returns the results to the debug stack. The local version also sends a message to the SNS topic. Meanwhile, the stub api.js responds to the API request with the results. Now the stub version of sns.js gets invoked as it is subscribed to the SNS topic. This gets sent to the debug stack which in turn gets streamed to the client to execute the local version of sns.js. The results of this are streamed back to stub sns.js that responds with the results. +So when a request is made to the API endpoint, the stub version of `api.js` gets invoked and sends a message to the debug stack. This in turn gets streamed to the client. The client invokes the local version of `api.js` and returns the results to the debug stack. The local version also sends a message to the SNS topic. Meanwhile, the stub `api.js` responds to the API request with the results. Now the stub version of `sns.js` gets invoked as it is subscribed to the SNS topic. This gets sent to the debug stack which in turn gets streamed to the client to execute the local version of `sns.js`. The results of this are streamed back to stub `sns.js` that responds with the results. You can [try out this sample repo here](https://github.com/serverless-stack/sst-start-demo) and [read about the **sst start** command here](packages/cli.md#start). From 1f7b382aeff7b3154034d8d56410e59b999dd3f6 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 21 Jan 2021 22:58:16 -0500 Subject: [PATCH 303/481] Appyling default eslint env --- packages/cli/assets/cdk-wrapper/eslint.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/cli/assets/cdk-wrapper/eslint.js b/packages/cli/assets/cdk-wrapper/eslint.js index 3f0f629d36..484a6faa20 100644 --- a/packages/cli/assets/cdk-wrapper/eslint.js +++ b/packages/cli/assets/cdk-wrapper/eslint.js @@ -11,6 +11,12 @@ const { ESLint } = require("eslint"); const baseConfig = { root: true, + env: { + commonjs: true, + es6: true, + node: true, + jest: true, + }, parser: "@babel/eslint-parser", parserOptions: { requireConfigFile: false, From 5a64a86cdd12788a3a5c4f2f3aa03fcb64a7bcaa Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 22 Jan 2021 16:53:19 -0500 Subject: [PATCH 304/481] Adding DocSearch to docs --- www/docusaurus.config.js | 6 ++++++ www/src/css/custom.css | 16 ++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/www/docusaurus.config.js b/www/docusaurus.config.js index b68fb200ad..a828e907fe 100644 --- a/www/docusaurus.config.js +++ b/www/docusaurus.config.js @@ -110,6 +110,12 @@ module.exports = { ], copyright: `© ${new Date().getFullYear()} Anomaly Innovations`, }, + algolia: { + apiKey: "89c24ba093a7153c016644142b1260b3", + indexName: "docs-serverless-stack", + // Turn on when we have versions + //contextualSearch: true, + }, }, presets: [ [ diff --git a/www/src/css/custom.css b/www/src/css/custom.css index b591d9b3b8..6d4b06bf2a 100644 --- a/www/src/css/custom.css +++ b/www/src/css/custom.css @@ -13,7 +13,7 @@ --ifm-font-color-base: #383736; --ifm-heading-color: #383736; - --ifm-footer-background-color: #395C6B; + --ifm-footer-background-color: #395c6b; --ifm-color-primary: #e27152; --ifm-color-primary-dark: #de5b38; @@ -58,9 +58,13 @@ --ifm-code-font-size: 95%; } -html[data-theme='dark'] { - --ifm-font-color-base: #FFFFFF; - --ifm-heading-color: #FFFFFF; +html[data-theme="dark"] { + --ifm-font-color-base: #ffffff; + --ifm-heading-color: #ffffff; +} + +.navbar__link { + font-weight: bold; } .docusaurus-highlight-code-line { @@ -82,6 +86,6 @@ h1 { text-transform: uppercase; } -html[data-theme='light'] .footer { - --ifm-footer-background-color: #395C6B; +html[data-theme="light"] .footer { + --ifm-footer-background-color: #395c6b; } From 6c16c3fc14929ac5ab43abe30de7f32bdc4622b9 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 22 Jan 2021 17:22:12 -0500 Subject: [PATCH 305/481] Fixing copy --- packages/resources/src/Api.ts | 36 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/packages/resources/src/Api.ts b/packages/resources/src/Api.ts index 76bf57d6e7..bae539aa3e 100644 --- a/packages/resources/src/Api.ts +++ b/packages/resources/src/Api.ts @@ -105,7 +105,7 @@ export class Api extends cdk.Construct { // Validate input if (cors !== undefined && httpApiProps !== undefined) { - throw new Error(`Cannot define both cors and httpApiProps.`); + throw new Error(`Cannot define both cors and httpApiProps`); } let apiProps; @@ -135,7 +135,7 @@ export class Api extends cdk.Construct { // Validate input if (accessLog !== undefined && httpApiProps !== undefined) { - throw new Error(`Cannot define both accessLog and httpApiProps.`); + throw new Error(`Cannot define both accessLog and httpApiProps`); } // note: Access log configuration is not supported by L2 constructs as of CDK v1.85.0. We @@ -149,22 +149,22 @@ export class Api extends cdk.Construct { // get log format const logFormat = JSON.stringify({ - requestId: "$context.requestId", - ip: "$context.identity.sourceIp", - requestTime: "$context.requestTime", - httpMethod: "$context.httpMethod", - routeKey: "$context.routeKey", path: "$context.path", status: "$context.status", + routeKey: "$context.routeKey", protocol: "$context.protocol", - cognitoIdentityId: "$context.identity.cognitoIdentityId", - responseLatency: "$context.responseLatency", + requestId: "$context.requestId", + ip: "$context.identity.sourceIp", + httpMethod: "$context.httpMethod", + requestTime: "$context.requestTime", responseLength: "$context.responseLength", + responseLatency: "$context.responseLatency", + cognitoIdentityId: "$context.identity.cognitoIdentityId", }); // get L1 cfnStage construct if (!this.httpApi.defaultStage?.node.defaultChild) { - throw new Error(`Fail to define the default stage for Http API.`); + throw new Error(`Failed to define the default stage for Http API`); } // set access log settings @@ -182,11 +182,11 @@ export class Api extends cdk.Construct { // Validate input if (!routes) { - throw new Error(`Missing 'routes' in sst.Api.`); + throw new Error(`Missing "routes" in sst.Api`); } const routeKeys = Object.keys(routes); if (routeKeys.length === 0) { - throw new Error("At least 1 route is required."); + throw new Error("At least 1 route is required"); } routeKeys.forEach((routeKey: string) => { @@ -204,10 +204,10 @@ export class Api extends cdk.Construct { const path = routeNameParts[1]; const method = allowedMethods.find((per) => per === methodStr); if (!method) { - throw new Error(`Invalid method defined for route ${routeKey}`); + throw new Error(`Invalid method defined for "${routeKey}"`); } if (path.length === 0) { - throw new Error(`Invalid path defined for route ${routeKey}`); + throw new Error(`Invalid path defined for "${routeKey}"`); } // Get authorization type @@ -216,7 +216,7 @@ export class Api extends cdk.Construct { authorizationType = authorizationType.toUpperCase(); if (!["NONE", "AWS_IAM"].includes(authorizationType)) { throw new Error( - `sst.Api does not support ${authorizationType} authorization type. Only 'NONE' and 'AWS_IAM' types are currently supported.` + `sst.Api does not currently support ${authorizationType}. Only "AWS_IAM" is currently supported.` ); } @@ -226,7 +226,7 @@ export class Api extends cdk.Construct { ...routeProps.lambdaProps, } as FunctionProps; if (!lambdaProps.handler) { - throw new Error(`No Lambda handler defined for route ${routeKey}`); + throw new Error(`No handler defined for "${routeKey}"`); } // Create route @@ -245,9 +245,7 @@ export class Api extends cdk.Construct { // Configure route authorization type if (!route.node.defaultChild) { - throw new Error( - `Fail to define the default route for route ${routeKey}.` - ); + throw new Error(`Failed to define the default route for "${routeKey}"`); } const cfnRoute = route.node.defaultChild as apig.CfnRoute; cfnRoute.authorizationType = authorizationType; From 3992960b638b76e205e1c03dd698febf56d78ae7 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 22 Jan 2021 17:58:17 -0500 Subject: [PATCH 306/481] Fixing tests --- .../resources/.build/test-lambda-handler.zip | Bin 500790 -> 528733 bytes packages/resources/src/Api.ts | 4 +- packages/resources/test/Api.test.js | 135 ++++++++++-------- 3 files changed, 74 insertions(+), 65 deletions(-) diff --git a/packages/resources/.build/test-lambda-handler.zip b/packages/resources/.build/test-lambda-handler.zip index c2d03144659bfba49a644e998bdf3178e6fbb63f..7b3dabdaf2c9cfdf9d8df0f88e64706e3655213f 100644 GIT binary patch delta 397403 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�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
6tzE# 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

ANWa1YhMH9Mc#mL!4bS@L1RTIIF2I4WnY> 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%0DdKWb*v7^;leF~(X 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 R#b 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̳k5Q4atwzqqpZ!F_>w(gE|@O?p8 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%0D&l<^Z=g`eflGoAa*+u8+Wf%vLyUb|{-_ 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

Kaqra8boQ69q*U7h#yT! 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˴aORCMY&#j(#E98AJbrxENh3 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�-cbMK=sh8{6G>?rS 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 { "GET /": "test/lambda.handler", }, httpApiProps: {}, - }) + }); }).toThrow(/Cannot define both cors and httpApiProps/); }); @@ -24,9 +24,9 @@ test("api-cors-default", async () => { }, }); expect(httpApi.node.defaultChild.corsConfiguration).toMatchObject({ - "allowHeaders": [ "*" ], - "allowMethods": [ "DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT" ], - "allowOrigins": [ "*" ], + allowHeaders: ["*"], + allowMethods: ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"], + allowOrigins: ["*"], }); }); @@ -40,9 +40,9 @@ test("api-cors-true", async () => { }, }); expect(httpApi.node.defaultChild.corsConfiguration).toMatchObject({ - "allowHeaders": [ "*" ], - "allowMethods": [ "DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT" ], - "allowOrigins": [ "*" ], + allowHeaders: ["*"], + allowMethods: ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"], + allowOrigins: ["*"], }); }); @@ -68,7 +68,7 @@ test("api-access-log-redefined", async () => { "GET /": "test/lambda.handler", }, httpApiProps: {}, - }) + }); }).toThrow(/Cannot define both accessLog and httpApiProps/); }); @@ -80,10 +80,13 @@ test("api-access-log-default", async () => { "GET /": "test/lambda.handler", }, }); - expect(accessLogGroup.logGroupArn).toContain('TOKEN'); - expect(httpApi.defaultStage.node.defaultChild.accessLogSettings).toMatchObject({ - "format": "{\"requestId\":\"$context.requestId\",\"ip\":\"$context.identity.sourceIp\",\"requestTime\":\"$context.requestTime\",\"httpMethod\":\"$context.httpMethod\",\"routeKey\":\"$context.routeKey\",\"path\":\"$context.path\",\"status\":\"$context.status\",\"protocol\":\"$context.protocol\",\"cognitoIdentityId\":\"$context.identity.cognitoIdentityId\",\"responseLatency\":\"$context.responseLatency\",\"responseLength\":\"$context.responseLength\"}", - "destinationArn": accessLogGroup.logGroupArn, + expect(accessLogGroup.logGroupArn).toContain("TOKEN"); + expect( + httpApi.defaultStage.node.defaultChild.accessLogSettings + ).toMatchObject({ + format: + '{"path":"$context.path","status":"$context.status","routeKey":"$context.routeKey","protocol":"$context.protocol","requestId":"$context.requestId","ip":"$context.identity.sourceIp","httpMethod":"$context.httpMethod","requestTime":"$context.requestTime","responseLength":"$context.responseLength","responseLatency":"$context.responseLatency","cognitoIdentityId":"$context.identity.cognitoIdentityId"}', + destinationArn: accessLogGroup.logGroupArn, }); }); @@ -96,10 +99,13 @@ test("api-access-log-true", async () => { "GET /": "test/lambda.handler", }, }); - expect(accessLogGroup.logGroupArn).toContain('TOKEN'); - expect(httpApi.defaultStage.node.defaultChild.accessLogSettings).toMatchObject({ - "format": "{\"requestId\":\"$context.requestId\",\"ip\":\"$context.identity.sourceIp\",\"requestTime\":\"$context.requestTime\",\"httpMethod\":\"$context.httpMethod\",\"routeKey\":\"$context.routeKey\",\"path\":\"$context.path\",\"status\":\"$context.status\",\"protocol\":\"$context.protocol\",\"cognitoIdentityId\":\"$context.identity.cognitoIdentityId\",\"responseLatency\":\"$context.responseLatency\",\"responseLength\":\"$context.responseLength\"}", - "destinationArn": accessLogGroup.logGroupArn, + expect(accessLogGroup.logGroupArn).toContain("TOKEN"); + expect( + httpApi.defaultStage.node.defaultChild.accessLogSettings + ).toMatchObject({ + format: + '{"path":"$context.path","status":"$context.status","routeKey":"$context.routeKey","protocol":"$context.protocol","requestId":"$context.requestId","ip":"$context.identity.sourceIp","httpMethod":"$context.httpMethod","requestTime":"$context.requestTime","responseLength":"$context.responseLength","responseLatency":"$context.responseLatency","cognitoIdentityId":"$context.identity.cognitoIdentityId"}', + destinationArn: accessLogGroup.logGroupArn, }); }); @@ -113,7 +119,9 @@ test("api-access-log-false", async () => { }, }); expect(accessLogGroup).toBeUndefined(); - expect(httpApi.defaultStage.node.defaultChild.accessLogSettings).toBeUndefined(); + expect( + httpApi.defaultStage.node.defaultChild.accessLogSettings + ).toBeUndefined(); }); test("api-default-authorization-type-invalid", async () => { @@ -124,9 +132,11 @@ test("api-default-authorization-type-invalid", async () => { routes: { "GET /": "test/lambda.handler", }, - defaultAuthorizationType: 'ABC', - }) - }).toThrow(/sst.Api does not support ABC authorization type. Only 'NONE' and 'AWS_IAM' types are currently supported./); + defaultAuthorizationType: "ABC", + }); + }).toThrow( + /sst.Api does not currently support ABC. Only "AWS_IAM" is currently supported./ + ); }); test("api-default-authorization-type-iam", async () => { @@ -136,12 +146,12 @@ test("api-default-authorization-type-iam", async () => { routes: { "GET /": "test/lambda.handler", }, - defaultAuthorizationType: 'AWS_IAM', + defaultAuthorizationType: "AWS_IAM", }); - const route = Object.values(stack._toCloudFormation().Resources).find(resource => - resource.Type === 'AWS::ApiGatewayV2::Route' + const route = Object.values(stack._toCloudFormation().Resources).find( + (resource) => resource.Type === "AWS::ApiGatewayV2::Route" ); - expect(route.Properties.AuthorizationType).toContain('AWS_IAM'); + expect(route.Properties.AuthorizationType).toContain("AWS_IAM"); }); test("api-default-authorization-type-none", async () => { @@ -151,12 +161,12 @@ test("api-default-authorization-type-none", async () => { routes: { "GET /": "test/lambda.handler", }, - defaultAuthorizationType: 'NONE', + defaultAuthorizationType: "NONE", }); - const route = Object.values(stack._toCloudFormation().Resources).find(resource => - resource.Type === 'AWS::ApiGatewayV2::Route' + const route = Object.values(stack._toCloudFormation().Resources).find( + (resource) => resource.Type === "AWS::ApiGatewayV2::Route" ); - expect(route.Properties.AuthorizationType).toContain('NONE'); + expect(route.Properties.AuthorizationType).toContain("NONE"); }); test("api-default-authorization-type-default", async () => { @@ -167,10 +177,10 @@ test("api-default-authorization-type-default", async () => { "GET /": "test/lambda.handler", }, }); - const route = Object.values(stack._toCloudFormation().Resources).find(resource => - resource.Type === 'AWS::ApiGatewayV2::Route' + const route = Object.values(stack._toCloudFormation().Resources).find( + (resource) => resource.Type === "AWS::ApiGatewayV2::Route" ); - expect(route.Properties.AuthorizationType).toContain('NONE'); + expect(route.Properties.AuthorizationType).toContain("NONE"); }); test("api-default-lambda-props", async () => { @@ -184,19 +194,18 @@ test("api-default-lambda-props", async () => { runtime: lambda.Runtime.NODEJS_8_10, }, }); - const route = Object.values(stack._toCloudFormation().Resources).find(resource => - resource.Type === 'AWS::Lambda::Function' + const route = Object.values(stack._toCloudFormation().Resources).find( + (resource) => resource.Type === "AWS::Lambda::Function" ); - expect(route.Properties.Runtime).toMatch('nodejs8.10'); + expect(route.Properties.Runtime).toMatch("nodejs8.10"); }); test("api-routes-undefined", async () => { const app = new sst.App(); const stack = new sst.Stack(app, "stack"); expect(() => { - new sst.Api(stack, "Api", { - }) - }).toThrow(/Missing 'routes' in sst.Api./); + new sst.Api(stack, "Api", {}); + }).toThrow(/Missing "routes" in sst.Api/); }); test("api-routes-empty", async () => { @@ -204,10 +213,9 @@ test("api-routes-empty", async () => { const stack = new sst.Stack(app, "stack"); expect(() => { new sst.Api(stack, "Api", { - routes: { - }, - }) - }).toThrow(/At least 1 route is required./); + routes: {}, + }); + }).toThrow(/At least 1 route is required/); }); test("api-route-invalid", async () => { @@ -218,7 +226,7 @@ test("api-route-invalid", async () => { routes: { "GET / 1 2 3": "test/lambda.handler", }, - }) + }); }).toThrow(/Invalid route GET \/ 1 2 3/); }); @@ -230,8 +238,8 @@ test("api-route-invalid-method", async () => { routes: { "ANY /": "test/lambda.handler", }, - }) - }).toThrow(/Invalid method defined for route ANY \//); + }); + }).toThrow(/Invalid method defined for "ANY \/"/); }); test("api-route-invalid-path", async () => { @@ -242,8 +250,8 @@ test("api-route-invalid-path", async () => { routes: { "GET ": "test/lambda.handler", }, - }) - }).toThrow(/Invalid path defined for route GET /); + }); + }).toThrow(/Invalid path defined for "GET "/); }); test("api-route-authorization-type-invalid", async () => { @@ -256,31 +264,33 @@ test("api-route-authorization-type-invalid", async () => { lambdaProps: { handler: "test/lambda.handler", }, - authorizationType: 'ABC', + authorizationType: "ABC", }, }, - }) - }).toThrow(/sst.Api does not support ABC authorization type. Only 'NONE' and 'AWS_IAM' types are currently supported./); + }); + }).toThrow( + /sst.Api does not currently support ABC. Only "AWS_IAM" is currently supported./ + ); }); test("api-route-authorization-type-override-by-default", async () => { const app = new sst.App(); const stack = new sst.Stack(app, "stack"); new sst.Api(stack, "Api", { - defaultAuthorizationType: 'AWS_IAM', + defaultAuthorizationType: "AWS_IAM", routes: { "GET /": { lambdaProps: { handler: "test/lambda.handler", }, - authorizationType: 'NONE', + authorizationType: "NONE", }, }, - }) - const route = Object.values(stack._toCloudFormation().Resources).find(resource => - resource.Type === 'AWS::ApiGatewayV2::Route' + }); + const route = Object.values(stack._toCloudFormation().Resources).find( + (resource) => resource.Type === "AWS::ApiGatewayV2::Route" ); - expect(route.Properties.AuthorizationType).toContain('NONE'); + expect(route.Properties.AuthorizationType).toContain("NONE"); }); test("api-route-handler-undefined", async () => { @@ -290,11 +300,11 @@ test("api-route-handler-undefined", async () => { new sst.Api(stack, "Api", { routes: { "GET /": { - lambdaProps: { } + lambdaProps: {}, }, }, - }) - }).toThrow(/No Lambda handler defined for route GET \//); + }); + }).toThrow(/No handler defined for "GET \/"/); }); test("api-route-handler-override-by-default", async () => { @@ -312,10 +322,9 @@ test("api-route-handler-override-by-default", async () => { }, }, }, - }) - const route = Object.values(stack._toCloudFormation().Resources).find(resource => - resource.Type === 'AWS::Lambda::Function' + }); + const route = Object.values(stack._toCloudFormation().Resources).find( + (resource) => resource.Type === "AWS::Lambda::Function" ); - expect(route.Properties.Runtime).toMatch('nodejs10.x'); + expect(route.Properties.Runtime).toMatch("nodejs10.x"); }); - From 052177e1e39a09de479d24c24ca85152d4790b6e Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 22 Jan 2021 18:04:32 -0500 Subject: [PATCH 307/481] Add getFunction() to lookup function by route in sst.Api --- packages/resources/src/Api.ts | 15 +++++++++++++++ packages/resources/test/Api.test.js | 25 +++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/packages/resources/src/Api.ts b/packages/resources/src/Api.ts index 57bb15b883..7b24a9b538 100644 --- a/packages/resources/src/Api.ts +++ b/packages/resources/src/Api.ts @@ -85,6 +85,11 @@ export class Api extends cdk.Construct { */ public readonly accessLogGroup?: logs.LogGroup; + /** + * Functions indexed by route. + */ + private readonly functions: { [key: string]: Function }; + constructor(scope: cdk.Construct, id: string, props: ApiProps) { super(scope, id); @@ -189,6 +194,8 @@ export class Api extends cdk.Construct { throw new Error("At least 1 route is required"); } + this.functions = {}; + routeKeys.forEach((routeKey: string) => { let routeProps = routes[routeKey]; if (typeof routeProps === "string") { @@ -249,6 +256,14 @@ export class Api extends cdk.Construct { } const cfnRoute = route.node.defaultChild as apig.CfnRoute; cfnRoute.authorizationType = authorizationType; + + // Store function + this.functions[routeKey] = lambda; }); } + + getFunction(routeKey: string): Function { + return this.functions[routeKey]; + } } + diff --git a/packages/resources/test/Api.test.js b/packages/resources/test/Api.test.js index 5b9bd4564e..a0ab391643 100644 --- a/packages/resources/test/Api.test.js +++ b/packages/resources/test/Api.test.js @@ -328,3 +328,28 @@ test("api-route-handler-override-by-default", async () => { ); expect(route.Properties.Runtime).toMatch("nodejs10.x"); }); + +test("api-get-function", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + const ret = new sst.Api(stack, "Api", { + routes: { + "GET /": "test/lambda.handler", + }, + }); + const lambda = ret.getFunction('GET /'); + expect(lambda).toBeDefined(); +}); + +test("api-get-function-undefined", async () => { + const app = new sst.App(); + const stack = new sst.Stack(app, "stack"); + const ret = new sst.Api(stack, "Api", { + routes: { + "GET /": "test/lambda.handler", + }, + }); + const lambda = ret.getFunction('GET /path'); + expect(lambda).toBeUndefined(); +}); + From 004c604eb63d658073ac58b028f064e8aaf3352f Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 22 Jan 2021 18:16:50 -0500 Subject: [PATCH 308/481] Fix linting --- .../resources/.build/test-lambda-handler.zip | Bin 528733 -> 0 bytes packages/resources/src/Api.ts | 15 +++++++-------- packages/resources/src/App.ts | 1 - 3 files changed, 7 insertions(+), 9 deletions(-) delete mode 100644 packages/resources/.build/test-lambda-handler.zip diff --git a/packages/resources/.build/test-lambda-handler.zip b/packages/resources/.build/test-lambda-handler.zip deleted file mode 100644 index 7b3dabdaf2c9cfdf9d8df0f88e64706e3655213f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528733 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

saIcs(_-o$vhd1snH&3~x@S z(404#=@vK`!-gl(5H0-xXWSn+4lbs3tiqZIa6j(C2a%|lbv+3=E`>58=)w~mcbU)~ zmFw-)^6yN)(mWinr;p}~qTvMw;FS-oKOwW{9G2glF>S$&r@Z9|lO;=lzS)u7(PcIT zTc60r5>RRemChTFnFJFAb#^>}92NVV$;1P2tqJkABv@*P_=daN^ z>`K4ccmmt-9s`+;LHf_sFAikq`gO0SAUKujOvuhzib=phSIT>j)G z)q;k7_^&L#+g|how3qf|0T2M({6l>(fTDu-v5^d^H??`z_SX|^e6zTyx1o_i4q4se zC6NNYPTLJVz17OFOtevUe#@h-5IxvN^pse6C44oR5V-^L06A(5!;}kF^p$~p)UNyH z@9vnZ(f;4IX~Yrv%{)sCqY(hc$h6iT`}auf>8xwJ4vu(*-_$eT@tU*e>;_s{Mf;ev z7k%WGII9rk4JAO>F-jk}Z=Pyg9QnHL-3H>Wc_S){0xJp1%{1C@MJ{Q)*lP*+`#BS` z06aj$zq{T~^Wl-~DvK_nssGwn$t$2Da#zxYNiri1$=apr?G7|)g;DE@h zlNeTe;P(CYZ@n#Gy>Qx;8~0fsE$~~UeoKd}#$W@`Upytb6=3Z$PYsm({uxP1`lf~2 zd21tfUcYN}#Iew_v!|IaoHAF$I=L`i#?+};e5u&)htkuVOdJxr2Gd;X?5vw*Fq~i0 zFI$^#S)0J2q#r*<*qUYX8TCJA@zTZzbFOz@H*MFh(E2RJlnU( zj?Rq6eng5a&Uaho6bcG<*|2#reCVW-5B#piGi#;njp&dn`C)#uJ6lDcKtlxNygGlc zU`LZS4cD@$-rrZ-G104(+t~TwN^}*l_*C=jVw~8F z%gnG%!q??4cmhttj2;{G+$@btpgBA_8o$hQN7nHdA3sj-9R$FUI%%>LSD5|RB_kOd zs{B|)T}ZN8mP09Sn8*a<1P(J&^v9FDMrob6ok@>nf@ex zjZ}qdEg3h+=M7TzlWmrnKuL0e5m?2nmykW}g3YQd*z!TlWdcS*OhP3XA17u$a*c0K&IJn{7g5=|J#3n z)){S-Xl5y{KIav_%|-X_MWBO`?qkun-{~=0;)cnx6}s?7=>&U!oGsMz+$rF+5st~A z#@@nYEk?)m$6{yzK0v|0k3YJF4locf6U=M-fJ5jQ;Qhmj$jSFeWhbfm->fEfWIhK< zY{@FT%Ni4nv)Rm~Sote2>Et3lpALpbp%4dwAcCbR6OX$o)g-21tvSngoe~^O`a|_n zOKq^sz)Dz0sn+?kVM0y?3yPhpKoTuSdErXYRBf3chV1%ncf4`n(2kIAzLs2Gp~e6+ z8gKqt5#yYHB`h`kV!B{&l0qeE2KN3d;D=bM*2l=ai^Q&gfJS?NA0IwBx&ISjX#>rc z*{ltvW;T{bJJl$ciUvd6FNVtcZ+u7eK@v^xPsWvnQ}ZOekuQ1z5H|;dC2QNsQsUnb zSdaJLa!fL~%=&34B}VKodud!&E@MSv+lPCJsQP13Us#Od` z_#Lf!blk_D*8h}u)=<-QmxT<34wMpW=!OvZwloAk_5IPCI3Ww=F2XA8jIk?}G=oh# zfIab9>&Xo?Aj69LG#1T^yf;2dm9$|~DiBtA4Ab>=`YA;cKX5$>P68;uVd?uw&B6}XddfDc7h~+w>eXJ+<(jHF_2bHyxrDDa_c7<?FB>Sfm#17DQ!^^QdsU z%8c&FT?)mQSHs#n?$ffKT3o<@YlU{3E4iBVocUZ`9Gqnrp*h*;MsM)H<_}YX)XCSK z<3>M5mUX$VyfW&_0IBm!ly#ri)W^g3!Y^BsWWH(;)kZH&SbsuQdtOFgX#Yx0zdn8Vd7$sTb4ub3b(dqbf2XRxd@64(`WS7Si%=u4`YA7`wX zrj%T{B$RJ1r-HD}NGIE1)NP_4$2+}xV@jc@B;4Io%+dy~!h z$il*^(u>MwZhzT+zfJhW> z!hYdJ4gt((vvk0?!9VP)#lSMP^tY?!Bv2Qtsqs13_!x4(txe?v*@F;C_Z{!n&07mT z+PduP7v-}8HXJe8u=!O%EVjWh)yUH3>h19pk)r^>SDp6HnuDWjUO6t45Y=e^kB?FX z6G=I~QlxHN`J{I(eQ^wDI-J9gvFHL^yGHn)@Z}$8eudcl^0!dp1^EE0dAvp35Keg@ zaCBsmuB->`-yLyx=dF}%?q3m(PJTk2c^bqn@OUX*apW<6*TkCH(+B0LK(Dl#F6UO# z@1twC_8-C;SIGLuPRLFtl-XmllT2w>Ip_DZsymOG3Wq{H^eEJ2D5*M+@^%n>n)&T9 zJ$FN2Lbg_Mg}Ob92}Re6H5dzaIPHtOO3u-zk6ODjxxG6GE*>MnV3NR0_?Qx$%|h|d zIFz36VIbVv^b?u3PmSzq)n=-8$-P;i$^$dr=D&$05>A)(EJ#?oVa-y&Zw?e{qPnM@ z3mcjD0@t=}ZOhRteME#9td0r{jP%BC_t2UgM;&|nOQqZs<1!*rmXS<1irWB~@G8$a zm{v2JXg$gp%nsY+uCXU?`4i;1d4;jZh$IWxqnWkrO>#wC+#MbFqalnKD8eQ_^QCEu zz>-(g7b|7ErL=fB$^CH2!Tyh-Y=*4q7!C%aq444n*Pkkvqy3I@EOLVYJmB_xYcU&X zKB&CxqLW6{tnL0oryi5207gK$zc7uMYC1A_)_@LI02C3?Z?ylWys5l;7U9T+o&wd! z7sRgak5*LIlXUjbh0%GyDgTdDi%c7)hiHEnG=F9NCObN>Z}v2aA#x!aYU0bLtP%bb z|AG5u5Er;%fq!Udxbg@Hc-0JrPKWOiKgU@a4~e~slhZ)7+xOvOzhPQ10k@g6iULea zBfk!!uB|b+CLyF57vrd({@l3vjOqCkfZ1&|ow(sPTbZ6p>Z%=16YUL))$m!_t1+C^ zWDhx#pbn)uFezW!zTj040PUw74jLR=&bZZ!)Nmupn6oo*jotSo`wmYkcx#9lYUU`g z|KMY@jv@l{mbc#JF>TWE^Nw7|wOYja72->gOOgQIvC(c;g0-k-2KYhDp0bvFm}keD zm*tvmFH1U_u%t>7SW`|kM7G?SFp^Edg@1;L)`iD49^CP{i^PJjK^Ah;ikPE>wJdTz zm8Ph3^D5OaTj{POxN>ZzYOlC~sid_;oXp+G2-Uqt#tfs?`=@g4mX%U{?xi{ZJn!r0 z`&ol@1EHfYuxKXF|KrA+WD+iN^*KO-MM*DwXI`usB`y;PzEosPVsw zdT7P@%wE2aQ_27)+e3{h`}^vmCo0 z%+OyW^`H5$zXx4POsWTxxVIgFL!Q88v}+JwWyBHNW0R;s0iIIpjUNZR#oi9n#}fio z`EQ!=^WnR>*|dIFn`!u&i@U|n4L3SssrqU)$-q!t4E#$Ne5iOs<=poRxH-#}raj^~ z^SU5aFP+s?%O{Yd9(q0o79KVRz5;jo&1}rYRp}!D;e0dbv+XZASkJ~8pl7;VNK8sF zpU*FwVU_wli73$<-|#HM)aIru{wFPWy4{xdB`&|TFCP%AdGV#9w0%M&@D zQN;!<=a8v32FFgMSUfyYdvweEX|qeSy0QD}RO8Hd+}3Ok;1A1c}yk-n=C#Lg$c)d4d&$fHO<^U=f-h1EM zX|mogJoyja130Kr*rejm?E==@I`E6N62)1vFM%*&LigA=>svx1q8iy_6V|FtR}|=a zGXVinpX}C0dpL|mrUqTf3Pgb@Xa}7kB;@sbV(*fK*rck7%njWtrui)^qyKh5ZRU!< zJnx;3y`myP|2~{V?TH1^W{-`Q{22GZ4xsSU0;eC`!Ew7pV$FKhmZ}i-Pfq>JcO9~Y zjcbCv*uk3&S4}-MKZwxrT|%wPocd)@hE5LcjGapra3fly+~fEVqWHH}BINx4Pbw66wJ30y<6c*DIrVdxOQle|HAjw0#k0Y6(Z(* ztQhA==FZxn7OL^%a9!V96fH5GbQ5qN3H`jNELg5&wa2W&6eF41xir}gD^&^c7wCzD^hI?hW*VOPCi--FufvJ-wx zz$9b*0G9;WrngMKGbQ7vEWA=Tam|e&qws}Gcrb?Ime=q4u^SV<%fG>5o!hcss#g+= z=tGj0@>eFG01iaVpV5XK5$ghrh7vg(M_B87*+tz*(}~->=zC2cFbdeOPuC(pCzi%t z?WGCEleh&CiD&`$0BDN*)7dq|%qr=hY_w%<@QMVRaT7(o+ywBk=_A#VlG}Nf8sByd zJc7d}W(RkLyZoOBozn{^%dSY&vdOxCG`|e&=1B<6u4GmNcu|bax!x-2?)3NGYVt_i zBH@lm-jTe98gMDLa?Zq=$^8ESLO{L0@g+!9I8Up#MUxw`GTILbA{o%*t%u5UQD9?@ zR(5*=AAz7Epso8mpU~owJ(AsHtMGLApxf+=%mow|HF-e;$zslYeuzl{1 z%LO5xEpzvx{IPi(bkfUN(yAiQl$v?O05Cw$zhr88QP`|)C>_X*nv$-AyiUr8IGb^i z+W9&{Fk-e`%lBEPa$MZCGr9!xdTfStdx=J1v*)3z2VzNkr3#T8?vAZ}HXG%kY;YBg z>nJd3X?Y#aC*s$C$tVICLNeUKR=gp9*T=+OHeF{H93qe z9S{?>Tj8PQq~9Bk=Lrvc@z#ou*}X*HZDLb?Xx_}K=dg#+-XQ|y-Jkzw{qB>X=T!KJ zOrq(}-sdSI9IkMp9(>NnrXp|Sbb_4G+PLN}1EPcw|J++uwebWxTzimOsIQG?aJE5> z@Z?qAuXIM;MloF0P7MA&|w8+C`WNX5SZEN326uUzn(Io8CKXYSH_AT)x0(lZ_3EB@~6* zO~&ep(okJ2zo}P`TcE+FuNXP6V&;J2P|o7hs_Y_QKqIYcQ0f%ir6N8M!jh)KpH+Rp zM|~VH5xOg8L08A7hFTs0aqzxX;~N=N$6CDxBv81X_KCcgO>ciDs1_bQef6piRr6LE z5j42$^@!Ve=Nr^04UW@s+W%Q+^QilFnCmBOYRl8?|ElE*ON%o!W!%61mH7{YG>$;A z!0UwJ#1h_~3X%?w7hCloflqZ#2}+)!O6Khfzz+!}yWwj@yww&zFW1bE-ZZ%2hCTb^ z`OBmO?N!BJ!ftjEHiyj2<2t^xgZ@V;7(pnd1Xj+6yU@{oT*}n~6Bye3ieoB`D1mza zem=wV$Wk)pys5nzIgT)0bR0=Q@gsDtdf@TU zEu)c*1Q7CSULFlnhJaJ7?P1#;t)bHW5Qv`1Bz8tI15x!amGzBfhXwVb+g1_0jX zjMuM8hR}35i4Kb|ruh;8K0v|0jg=`Sdde0P>(5h%jaYH>__$pqQ{=6x=O3H8(d#OY zIVN+ny%-f5863}6L<{EGk6`1nG0q|9Vwh^wl1WfKdwPl?%HpsH?tg$2f(eIY{k-wn zDlLK%4;^+m+qdkH^;#z9`dY(IoajtFH3+=wY;LVdtiE{wER{Qh zH?m`eY14SsQ(}cQLnQMYgHIhKc0g7|Zs6J)(iu;n!SBUhb?|-v@qf;1xN_oi4*{%) z4SHN?ZqWKIrQdHnmT`7LI6w~ST2Nvb3sDWK`Hhh#OWVgc)y*x2}o|3*x$F)?<5x3e!B(JbTvfWUq(iB z_}}Dj#v2BWxeIL!i{Q5MYNmZ209V02Ywi3(GNQyCk4KdhtKM>}DU}!jJ4&)>v|h9_*D8cRvk0kt5s6YC=3MOy$mK*hh!O0c=lvN(U}=ZXA> zN*b_0f5flH4e5k{2i;FVzsjbHSqiLw2B)4L68d6htF;4JHDZx3RyIS^N@D=6^B)VN zmBV!{&cOKmT7Beun(1LlBCV`pyl>B0tbI0>y9KiVCP3N0!+wS}Ta!P{lx(m$CwXLJ zF#Ok(N>xiIHE>35&n5mC;-ZZ<*kNr%qcCg@_A=B5t}ZzHVUvcy#0+n6U71U`4hgRd zw!7+ce3lN+Geeb2V_>lSFaTQn?Q%u9nqf=&w$$x5B9maPRoFLJbD65hLP*|vcE9F5 z?hJ6WS@*iG==h{B6$;U5L*Xdw6d}a-QpmhA=3J8o%n%&S%rFF=vzVyd2VibvW&8p! zF14?(9ua+*z2jdixbXZQeVczHu3{;zMvBv|+ZNARsxjt?`L{gPjXO4g|S;`wECCKc!N&arz*qFA;#YDsmj;u+cpH@n)C=hSf) z<+);4tx=9F6uTAUVUKL0P3;<}Nfd|XT2DGYpht>!BlXR#-zUa_)=`^sGtV*5ItDd_iYfqIRg>YWuYQu?;y*1yuzT5&6-<+GIaeTQqUp?#Ww0lC3ZC<{fBVy3Z$!$;QpRNTaU$ypIy2(-@HKO>G0R4>(<>FLtN>yCBk- zP)j6?x#&buBdeyC)iWKK>E{h-^N={eYmSF;N;e|7bCe7hh71af2`Ma_!hFgp3d!LY zJdWH(|Cf7jqghVREKLkOlur^AfN8x-Np|DmIrm8}f}c6<;eR~S6G~bcu^e&E%V!0x zB3A}QvR<;Z-~~0tvn=Snd_QZe z=~2c?(K{3=p&WD8n~5fWWfQ`G)P5rnN1INCiZ7NqdMj}r%a?Q+ebvabzQ)LTXtOza zDq9t!$KQOt_t49VEk7L6^5@In)^Pxe{$;V8Unm001UH*}qkq zYEwNge-t2rs)l5sHUN%b$~=bX5mJ#}0tf9ZvH&_j#lQIijqNE$*g?sL_4%Up`^|&K z3J!s$3J0XaluzA4=yIP(VU4N=gyjO7Ba9s{TYQyF1}LTk?M_NV81Xw0QJ$8fzpVvR z;>~6qfWqjhMtcWKGT!(|cVu?u+40Zx+T8+Z_F5DZnQP3fuc`{2Xm~fM|HoAF>E)}> zfM(3gr%3C~$b+!?%kn;w&<3aFDa2wtEZu$Vm9)1thR_-JEU8T?^n9#0UYb_#>844 z1u6gv)%e{fDD5Iv7%a4GO4~yPLz!4&gNbDr`F%dT&85e7+rCr`N;e#jE!i!zMe8P8 zX)Ny55EhiMgMg29ywv(_Zp*F%xQUWP;@~#d_t?l{hW1m|e$%?zSX%A{=~){z+5UXMJajJ_C?kf2&fWyJ;%Hhn2 zLiG4=)aal|+_0eerPty1S&ThMAanOlc5zriPT*xyMh}`}Px^{1ES4VO3>y?(Fi3)SU#CnDpIv1g z=raT827jCqCKk$&IjX_58b`5x{S_7`i=5l`O^~=xzUi9-@ zz1p(xzfhL{sIco*mZ(?~(LA`Zc4N2avL=MO%08ku`TEe$s0hn^7Brue{ZYpz@U<%O zeQYt;UiHukeTtZ1$1M>696;m0&e7zx#uMvkdtJHIpn6)y&ZxmUJ3$G~_sXVky&s|{ z+sY-JWw@2i@CW12i?0@hiJn=uD!2HKW=i4QK-gl^>wcV*2q+RW3m~;1uCupPR9;2h zX2~;}8ZLS~y>v|VF`Nj>x6E=aC9~4$9>cbCf0T!$GTi8p@r$EGaZI{D);T&NrFwG z{?#C$Uhjyc^tlGJY6Qe0F-R2>MQ(EAn8j4w8v;3*^hR7#S;n*2?Q1a;yw4yPM{`Ow zTbX&kk&{`n?%^!maxDMYwJ-Ok42fwn z)vHF0!s02MW;#ur?DuHBr`mYHoJAb^=g7O?n1%r$8nD587`Kk0xVAElf0K&aa6pxK zj?5Rn@~$w}-)Duxg2rHekNk*)ngl=T`&;g_qmntUunX9Fk)Q_0Q4AT;SF3uQ)N0i) zU||mqu3c}_Lz>CVg~~+Ua(A~}g+SVfoQh#2YUnrc$~BH$43cN^(Cq-E!JT&2&tm)e zOGlR&qYrn17;3CtOjB~7$!(H+0dTt#HE+cbXPRgZzJ?Arb0rMQc?=a|CD+>(=an!P z?VxJh0grke2(r#d+tu|%Efkh%ka>K=O`@Qibyh&a#*^~M`Ql@A@O)NIN^zD z({<#j&#jka5CtD9Py67eS`RKDTVNS~LrQW)7=>WrzSUfS`upvd()z6m`w7D2Qb(^= zBY0-+dBi7Hd$KO_u5ZVNUsLC#c^g|bsHb<8U0q?n6|1rx+F{MK5qlGGUDP2m0rqK`wti4pK%>P=LqjGOmT`6*GIy+1IX zP^+*LFRG_2C$+}^d*||P|1~5F1a2PR3*jg+!t@=Iv&z8&-?66R_Vh29*ai@-@>g>z zj>SmCjXX+QY+|KFO4iRS}s096;m0X!Xvc zczTZ8Byc6{N2=z88l$%yDtRv4>bo!HV43dCgen!Z@_bjU)9}Eef7TIwl&Qj_4osi984K@yE`>nn;9!QA*_5q zn4<$cLCBhhcgQaoFv_AQ-;UzAd;sRpOOv!a15&82+*yr!f4dk)EGvD(>UWC6Ae|g% zP4)B9K^YeaI?}F>hUpJz=ZU)R>y=0FV0CfuW^sR?`_+D^Yl^PS@Fw(0Gb~dnro!RF zT$@pNA11pmDPnhBzQot$_q-(|0jfg?2g4|yk(T5^6_-=sM5izhh!47Y&l8y@T*<5d z(ItG@B0}n6gRBvCU^RYWL#m%3)b=480N7RhLDP>6PMSK$I9ZGIpUtFCZBG?Xd8Y4cu!E^uS>9V;`|Oj7B^g(z1trjGrF770S0X?ZHlx` znskGf9L*Xo4Yt}sJT!{a*Jp`9%xdWEN@|C}$hQ0GfCwmh zRry%w6)w5}7(nO0_J-sAmIT`y)pm?#34{-!{Y13F;MV>%vzzmQDXmF-uWN!YqEx@L z`BK5D;vU6fpBwuFCbkJFG5>C^?2Yx!+K z6*PeB53B@kawD5=(W8W`vxqjV`pD45AgZx>X}x8LGfJ>DJAB5yQJ;Fcw6A$-XK9wd zF5VmWQ6H~79#2B&_Kks=vl0L3%N6rECq!(*;T4e?^#T^Ml*n!wxtBFz2}~lB z&m%O_Cq-=i<^ZC!11rUcj5XE@hz-h}Ayft)R=FJDFB1|@Ql!|9G*nrd*nBu2j--2qNLcH{=@qKPl0oO;ZWzzoD|IqGir`9emE8bP7(vk<=8h5^iFzAI-aADAg~)g8 zTM&@CDlYhS?gR_9@J!uL@bNthNtT>04v6JK`jwmCNPii7fdPaq} z_?$SF3&6sft z9MiqQgp_ zSCuBMHxe^%gZLXv`41Rb0U?Ana$wB;od#c(fJXh)BO%l0QTWzgJ@QXldXhu4A{5Rh zstC&JqFo(Ieql1F8Q(6;B1^cw@~A1so;~1;z$1^ENCovDh(G<41q7!Jhrs$guw@3h zjVQ5^22ctRFb+Tfqo>(EOTCdTwZUy~;mhK)k+^y0gWTYZ<+Yo!$1Xq-f3h#=))I*i z&ir%H!n&QeKMr-5g^Y$5gXo}asSux~FFSJiaRrJZrk8>qnb$sMOufEUT>8?A^-^>)(m zNld|*d85M;geO3!?YSB z7g}NzB6K25z2ji30lOBEhRs_J@710lYxmZ@;_uRej{ePi+L9qE1g+@AbPv`&l{H~i zeAF{D+eyYbIWAoUpWNwsAlpULECtS6f`$VKg0m~peK|cEJ;%B+tM_nN-3zaUQ=ada zF~CAozTEOJi|_$D`n~q}hEjOGH0I9u;4?2X?QghWVsLy3%*!!v*@>WD6#zUy!@m#E z+Nj0_UL3^RcPUBr8oD}}!_PQXS%Tc>8iNR0X>vPYq!2HgclsLrhUPjj|x4YHY z=WEJ+MMCCGOseUGys){EJCNM@*4M!Sm1(-M;bY@&wvO)FG{74onpx*5yNLCL_nH4> zVp-+ZR<8QTjS;JCn}zg`>@{LgS6=&7hq6~M+sCBREYo)T>%6ZokKy}6#%?g{f&QA( ztGX`JLu9pPR~Quj_OR&U1X@npfl`S73xM>j$cRqOq* zyh4`si5f7i(>pfb%^>iyF9Nx`L5d@!U1z>N7pH4-tOmYyV_(F85j0Q)UFS$`tBCaa zzm!?oY!=`AyFPl9y)lWreI@Q_OCX>n+uSl+C`}6jz(W`!d`902Dy$zcO%?`284Z`oFKt z{sk%PvfXt{LzyD6Pk{bWb#&H#D-0@ax^|X~q>?d)`YlI_ybfnuP4)-0UQ0JM5wCk8 zjH=kB6{GnT!72ePI@@^ew<;m8!Zk~-okB}v9jHqeU=$%RkK{Ecx`L=;!=Hy@YZ(s7 zil5I2&j^_sY=KgH>gj{nC%WFgcl4zulJ1cBuG3t3YNZn5mG?ux4P3UPRq$c#%MWQf zr=iq!(U&CIxpmnJ274aDBPeCf_^Ky#Uic|_G&Vu`|0f7kEN$x_(~X&WSCV&1dbfQs z0`j@X=ssA;?tZx|LSTvp$kB%%(;LZatwN=wK;Qdah9L|n1W|~mq(7s?otTZLOR7-~ z=bpMvPie!hV+2Y7BmuW~&2ee3EyvHTyyhX%x&9)#=$WXP4vU-xg2RG3D(9$12<&DD z<>@?GPahOuqq1|69~RRS;xi6>wU|+LdZ|Sg?ZBt7*qZ7AXUsS!+9AishR3Sz!@*n{ zZ*hur;3?c%fS@BurRnTfKlP^sEdewkNq>P@>lGuE!IZ)G_V>4x1qA2+$Yn9JfAg1} z&6X`aANMyC*j8(fu~<1Qb%rk0xG06sv$zr~l3cSYE? z<(YoF1N%hiI3lNz3J|}4wwLT+Jsx*eN=cM!|3luxvR@N~T^RCqw>N?tfrLxDUipg) z0&=GItNtN-=S*~5c(0+!aj5Wc`Op z{1}ZHLM&22dFgFu73KW{vSZ9hr1i)`I-hthDynGPk;Z1xt+5h}+Xmb0evF*c1+~+% zXSV#1Dl4S{g+7e3eg$lOmLB9wcxxoC=|{6$H-I5W>NyX6LfN{Jxe?irB!3hPD3IMg z`i7yrS=dY1sm;c~4jBA_j(?@$L+M`Xafb}=l~maqRRBalyT8$lemRe1$i~J`)e6nE z6&I`HPhVd?qzNbj%Jt>24zLe`_xT*tVBgPMwLN$plI`*!6S`|-HmcEumyU1Tk)EK> zUvqZJQf{yBrKSV@Tq=-BuYVFB-0?oKMArL`=Je&Z1)HhD#numIxRApXM6O-nJ}ZIa z6gd?B!koCBjkpK=ZAx}e^IhOHF2oG5W>Lzg8YTj-sWkT!+@VDfLP^Eqx{jpJMj}VA z0iO9|tn-^H+yO-2kNb0opP5o)`6PC`SagpShT?JeY4#L(=JgX=B1^-6hk@r{u)9z$cE6Vs& zRoj9;&^{E->q)nOo^r9$v-p*}-BGzpoqQR0?9Q1R4h%qw)KjBaQn#bF@|^Fa67m^LFPU;E1TVsf3})S{O`8$sHwZ~8MjRo69awINm| z4~ddj3>4kk?VNk8Je^~+Fv_lOr)}G|ZQHhO8}GDj+qP}nwr!n#*N6KXx<==zB$c7f z$;9T)0G60-rpTMdJ8?nXh&+;J0C%jSBk;i8gkcZ#L_4rAsY`V_*|I1 zV*F1E3*9_sfgAackenATHdjAd`Jb?)QViwZiwqNpjL0~0&wssZUGe#h;Y6Pg$v!b9 z^0SudwXV76E$>f=kOMYi8md>y?d5gQQIm6ApW4gDzed1)XGi#~GSi@3h)|`FsH@K; zA-k;b=DZbwqJ0l6m--;_Se{_9xDRO#1cSHAl6f7ZT)%k|3t1K(%)Z1x!Lh3bqlySk zVNF4!Lz@VtIukjK4vWr(sTkb6pAO9bJeB^Nfk2N3M52T%L5K}1v*ryFd-0xuSc;z% zf-@_+;bwWoRs*9fnUkzxh(5W1Y$BqI#N5#};Tf)oe9tA*3u_Lp2+(@+H zLNj8Mh#V9@(304ex>VW$ZhhhK%{;d<^%F|8u{NF%qO#!Aylt*^Ju=af+M!Gc7Q3#e$fJ> ztjDn+b$!qP1^ssTsMEGN_GZX_xq92Y0Xsz2QGY-%nHzlBv>h@f3@&B-iuqLlC1D!-;IT=X8oq$MRZ@|p423xR% zDf1e|DJlBdBl;2$vi`%G`kZ}sm?Y($UEk*)`gT2ue!x8{+_{{9QE>e|`x;zaCgI2C zC~8y^KIg$QXPk2qT8S0_vQCBPPU<^S_v&$p9V+~cFMQK2EiRX}Em+E$FW9}9Z?uDy zAojq_n7{gWMw|@}h5X6g6e-(GPm4q&T#gmby2s3nt-k;o0%d)+R!$tqd}&v1xq$uz zS>sl)ER;}{lnNNCX|;diT8y~_<7?EucQ0%LYN~?j=MxhG-%6?S&=LeQaALX4iZ(Wu z9$2b?P6Ycr5If{qp${|Rrd)LG%^cgVyL7Ov>5E3eNkd*fVpbu6yi}NP0femWbh2I_ zy)OLImqswPtr4MJ=h=gqW>#m%yc(Ctq+*R0%+TW~6Xtj=g2gP|hT^e+fSj zdQm^H6hs`2NMB+=?*k<&Ms$n|kH0|zlX)8+hVd5D91-7;>FDw7ZC032%*9tx+}~S9 zY_FawyQ?T(Wsud+K8-&cQmbDxnfQWF-}e^{i1g!^|4sw~nLTi6G!muD{-#w9zB8Io zW4r$|jcrHq$s*I&zrZ!H7kiIx6U2mjFL;NIH#8c>0nRZ*Dt?@{Y%Co4j$nrF78!@k ztP4P-kFSM{K$D|=B!ssj5Pg6JgR0`XF(Z7f5SDXOG??dH&*BvElJUC zC)0dJDZu=Z3C}*wyuR6PASX?uK0soPZo?O=IYTvC;T}(O$QINcW?szn!&pI8PVd2V z@ucaV^y6N7l98%x94*;nOEu1;@~GNNZ)CJr+v9q$m0Gkt70)%q0kY_dHhs>!eBTq+ zfIt~nPH-TLBAEFDFbhogRRwCa_MoVEdGGLSw8l9im(~tdB%O*BY|9i-Ha{#Mn6ITi z;;Tu?rP2D@iyfvY+4i`uH`c?M6S|AJ3BMi?wSvhJsfv${5P@jqcO`JrHO_oqf)lf! zN}*!D=Ir_wx(Klue*?mL2F}wE5LVWpf=}W2G0B9jf)(h}%B9D&(W4ud!c=r*FvHgO zY^0{L(*Q;rNIMBF&%8%Vt0B7{`cLmf`jZSISL*WB4BqPI~^UfOp7)1)#r-#rtF;+v#)Ma{p^=7xn@hMTP;uFV zX+$hKfN(AYMF&Xv65G1!N;0FLh3l0*HIUZkH=HU!WfRySRSB0lozeiJ3;zekFqgbJ zkMEOh#rr~KIN!CnLdvw6fXYiuwf%lf$BWRtc}HSULTNInU(QUngefqCutI1DUm|NR z3`h)opC7Nh(R(5kF!iHV-OfUYs?akQM)`W)4(oecbl9AoVmYq~!U*;9BmD{xsN^3v zRv2VUpKE)-z{|&UnKcj{jDU`WsN_-v-HF~ClR9j0t<{3j0(B(GINTXtrE~3X;4-_o zUVP8AL%v<^?2rEUb-a^KM=uc|umn!(xcxz$QSUctKN#jT9vgkh~(918EC zbP;bP4F!&Ftc`SvWQec0={n64uvjt}uI7Ms*uaWDYE>kk-Z_S2Y8Fbh+U$haS*tN4 zaO`VK@hV(p0+PjMmNuvMch4Yw_C5~yfw*^cf9qs8tpKhFN=u4HJWM!u(~bhkFZllp zQqMY6o8tJ_b8h{LiT8j4=Bu&AY@Rl9$_Ov4JS$026mr8ft@s-TOkFyNHLI5@tP?ZO zU?8}whp?wmc&&mdcEu9TqL@(z-s^k@m-JmLW!bLUT<*AaDA`@+orReFJJ%`0@pxnH zB2Uh>sSkT}FinPAJ?A!+vaR3$h@6Jdm%<8dEAd{~wQXK@0i=nl9^TGfgstoy=XJ|j zFi8!wnfFM8(PPaV2ndt+{&Q?za|Ws-1W`&0ivOG;V2#H{!b2Fy?rS2|h#QPjn10~H zKBhNw@}%;E7Be4-7__-n1Jy~D*Rbb@t4po38W0vnO3Y4PC~VRQB-7d5@qm(ZcXIGY z94LmVw1^sy%a(~R%}Z+LzUt$?9%^ahlD2CH7ztM0SX=rO31+%sdxZ3zSfoM+p{+5G z9&!{N(w8dYO%?yxFXV%$f{D3lD7(p$MB9A;6Uu5e^VNi;;|kn)&TH+zNeB&7sBOOU zr=p&R0{u>D^HypL>Z3{?q;4BWRu0^g7P`t}>s9(5KXZ!5`^fOS`_U$+vhtL%aumjYl4oc1ZWLD`SVjS4?e zT>z*GRQ8pk4=g6E4!ZTrbB3#!U#{CiT-i2^>=@~;X_Fdry8NgUUF=ANulv*V+h1So z!?Ayd%Q|oKq9#@V{_PWZvVDzq|H-&Jnb?}aNwC7$QEgL3+<{3Gx<%zF$ac(JN7(6* zldX3{5bLtJ_y(Zj#E#-BojTmUyDHy-&1Q97`fBiEx}_yD93QAVXgf;WmN8R|QX%Eu zBKGKw!Sr`N0*M_H9y(sC`V+1LuNufo<`5X$i zBzoI5Td0VEPZ5iOaO?ndI3Ev7NC>ncVdVL}&^S9q?FQoFH0e17F8ezT|HG!0LJGVlrTae^&5N}CBlCa}@xJS&Ex&GO)!4g$xoIrB==V46BH zh*DOEaddrzIeH=U{h37&Z6ZkCHJl?Qvnp@YZHu(dF3$b1BS*^_qaNO8b>GbLokn?l zo1*U-I@aT)j{X@&DQj&Z&k1gZg~c6fpenW&ylsD=*HUDUPubzukVCs!+K@b$+5PV7 zPM$R;GqYt~ukk1N0~$poRo}2x>h|zF_far7TvLtw(R3p7UK2&{XGTpsR+6sB=_W%* zqps+_a@}QMrYCq0iWmS*(3C1-P=WU2y1*9Tdmer@q>yn!Im!%cQIIs;OD~D=Ycv_0 z+19<8Q++&5LAX?ZnnL&SvyenT4iG&-JN@hSCLQwRApNSpe0b!rxoq;-ouzkK-)(@ zbcPtIkLXh4Wvi=9gjS=CfJk^qFRRMS64!21sNN1)ZaA2Fny!b7;^^WNhq2tKt>0NW z+zRoqpW;Um%pgki-?4J{%hemmCzlsXV&TF#n=&caRq?6?vA1f?+&I2;2|DLiI&iA8 zSS+$%ug5y-Bz)3d^p@7ZkFd@VSKfsds~Wy_qs=JpriS<+GP9YtTa=w?QtwaM6=<9M ziPlY3qvHhdxS8hWn=qK^=nbCMFFD4KRTAx9kmg^GzCjv=q8BD=Gh+7zCycIsH?`?w zpHd2l6N>QCRWADv_wM8@7UAGUTdwFzOpi@VuA0B2nA?nR{zr=)(ZM9@P7Q|9m(^2ilV@am?@RqK|!eL&%7;Hw4IqXjwkZ3w62)BH%#&oq#)9Ki2!!;PR@FBmrzw^kh9bU^H(^kV0c4NQL!vltTkk0hm0a zfL2)WJ>XFC7F0BE$(uCd^2XuqPoo6y{gpJ~H!a=R@_G0~m!yI78dlx%0(HF>YaTv8 z{*LDV5KKXdl8n`+O?*Hl5bSXd>J%3f%&gBQHt0 zA`3OObf>wqHk4)Hf0S8rMIq{CIyBIYjwIiQ+v)%`fl0j;_z-_}>HQ*EAk1Qh&Cx{+ zd4La>fDSY=>^=&!LTe#surh7Gql*l{VxT`q-)~EvPVV+kY@))ovQ|n|5{hf?cG;HN27uc?ABo3Mgp^(^*}(@kiB(xVJppEm|WY z^Ts}%t^PwVn?3^`L$W9PTjdD{|FkFd3@|7?&DSoeJjD9(PCbGTD7x}XRZQ%)`JkK7 zzkRA^Ok2m6c6l(Hfi>&Q7-;)S2yalE0Z;`l`);&_LBZ>U^^MMWwz$AI!nBAi;Q>aB zWD#|-cugPhYPUwgixZ=gK4u-L^@C^G#@1)Y@2Mu{?Z?$0!r&`at(t6J(AIRwCW@&v zPjDh0uo=Fx9l1kPH`I4_dO>(C6cEZVj9JopzDk5acKiVb!Q;}hfn zt$g8rmFNv?)k$=cpc|)0`V1n<2AN4l(lE?EEzFoOP9@@qweL|r9ZurF7z^}) zX#H-nU5N)pU=Kjm$so_?*FSi$gBM=O`!DI zSH6o)NxvfhI{x6Y7QiQg+|Iv{1aCULHL+}xx>xGeAboALAm5m${#EsAxMp3WXDn@} zOuLi)h7yksDcY}+kbYdEUwZ)10r0=1(07jXWsB+(Iw3$^|Dv`pdnw|g1Ar!Q(YJ)$ z2k)9o_6_3W=9aCjQOfpRuTxoR&e2S}ol?u8Z1cKuf&)SHyDK-#qk$oth)A}0#kIT~ znMl%5ho&Y-FvoSmHyOiyk?^<$y` znF052CKH2+EaUo3F~(Zlhc^k1fZ0q2J&MYAL^^-n?W3rdHAA;c(@8Hdgi}(1R*>47s)vdk^?}aURP93%B<=40@glGLT*rC0B?cnniqE@xRvKLeU+E@4rCJ|oa+M# zn^@#Hi{FsAvXdeD7+VxbjX3;LTHV>4f|cGWX@OjK zg_POo{=1ZRV%aaIWJ){gY`fnwu^~g7@(=v~=H09dBk$`L0a_r4%skVu3RDlpCjeV+ ziKTy|95q8J!=0YQG4X|=m@W)$^5+r5(FfT*wDyo=%cU{DDtUEssN?_M%P>g+k1f2| zk`dQ_==zdRzwz|N%k$Lp=rVAUj@n*c?*s)!tlf+N<0znzZ8!e2Mr4)!e}lx$ z?Z>IyX-{$DCumipyV8UbZZcA!m|7c7)1EXQ9XFpfdZRoDj^8(551neoWuirN{<__X zz!F!@2hrhkw*(84LS6N@sSAZkjMiyoH6Y6Z&ak#DJ&@4mGJu`b&O?!>b*6tjNpzqm zdHh3+Ji#_p+iS01S9Yr!5FP4l%u|L<*7)@-0cC(0&)+Fop6BFP)8y_2+XQx!@9jfq zlIXGwHvZs89J583dOe#iL6%V|hE_tkNK3!a}@8msiwsYQ9~ zNi2LPp3CeVm0uJfKVbY^OaWK3fK3HOBYDCH1WnrY6XoShMmT^95VfyCZ4BdPYL{sB z_=z$8hBj`ps(vX%xor^uW_R0x=1c_FW)zxPffHxF;&F&0-*yuQqlWdrT$c7F<#K3r z$_pph7lb=;pk2oyp!vJ=6ul(Obv2IKBn=yz?j$+}ng6y8(L+3{{J$ssRO$Dh-365q z@s35~bX3eT)d|P)uVQKIMdgdRV6Cl66Xp_&qcce1GgVFU!k|JGC>O^%y*##8?Sp2# zVRkGrIlLd|assS_&pWb&B;_RJ`+G7gm;}9b=-SKrYtwcdy4^QQyF-z-IaC$N zkSqN803Lx}e2Etzvd{1^Mv~k#XKr)?%;l(g5JJ;`M<52M{ILpEWCESL`3(Shj&D%i zqQu#IO%4;OhLML6DxL#NuS$NCj+(dyC{_fjL_I)4qjHetWB(bqyNnP5ZQ)3L~ju z^9ZkizmwHb#Sa#+uds;y!Kuzpn2KZ)%m$Xutw{jxgWi5UqEkuK^$h+iC0@hAAafS2 z3)jO(mt1vLa)`cZi_L{z&Nv{!BLh-5*p%TmTfIPu&#kT+$`1q>S+L`Z{Y+D9NtYJI zD#m%QlHiuvvtLbx&J$)NEo8?`q$Sqnvdm-mt{Wu`t-Fbl{spW>RK~P}FmqNfW zt=KGcKjNCMtj}uh&wGCbfTzMV%c8uK6t<>tpQ92;o1zeXY!8yQCj&Yurr(73Xi1ps=_YIqYme zER=NQkoWOo69uE>yC&WYSGl7?UnkaJXl7>LNSh6`nr<e@Di6)iq2oF(QzT-5@fF6<$aUG_FzgCIa8!o& zlK1`v9%97c4J;~VefsCT@J}jv!nGktWG6jAeaX6U=Q-VyDAT)kg1ni?oyp+H^wxu^ zEMuVFdzZ}u5;rNl029`Itk0>^pI8Lz1ekn0-hIKa7@pkcyn|5*H;Zu-P2#%O0e8+c zwi6t{e+x&+3dDirgyUX%?GkvLbS#3b0zfaEFGY**6ob$8{pNNUt@GMP?N_xidz)$t z@djM{s;Z2xt4~l+4y^unB~t z;qsPLsv05scHm`)Yn~^u6*#?s&q=Sfh^)%I2EK=yu#K(Eo#RdvF4FZU-&ZWusK15j z>+9B3vcdQg#o(j?o1vg4WZsHfcp*{U0fnR9ARok504qr2-~>>3z%tEwN#KLqvHTZv z#XjRE)3rfJNV2SCwegi!5){=%iU~)$2v7xz@JD8!;iyX2s;mSg6Pd+K&!dk-0CgFs zXt*s7umhb{ZJaP+DGja8O5GJ6IS(XEZWvg^ES0r~zBbPeH(eL3*C%0zz9irHJ zK&lF`OaaZ;(ywi2B#%KYiGIs#oXI)wto*OO_$)+D4$GRu?fJg$dvWnHS6? zJddX0>ZMZRW*N4=G)Uo`-;&34o*Dy3*`ls9fFJa;^jrx9{!w8)t z^rCpHZD^FLmBTLPXcq;E6#jIq+i9U?L$wxwuy4`Ng=hdXK+L~WE*Q4jxW<26T=c?N z9=1+_d#Lf(-yApL4$um}{sFxXzLBrdrwSLvnp3mDi=&t8+(gae^n5)aH*9 z98E^#X~jaz%RlwKvA{N@D=lz?J2dxmRBI@w(I%+!`(gHL>7I+e?d1-ow6fK4kr(~^ z_~rY3v)yBGp!%!-)v4-jkfj^n#3yr3K29T)+PbQt>lL49VArqbA&lOc@S!K~ALZ+C zOLXR#!%Ge>3dS-?Xlpn;(Gb&H0{}U z$ukXv!uEmdiGq09 zX`kS|qQ~%A+l=gUbOfi5*4iY1m|w>59I-xdQ?UM|nW3&hh>Spcl@b@2ZX@blgNnt~ zT2y@iUqGP0aX16>sms2|QsRP!eDsO#EJk`(a|!OP>l-DH4^giLsAwCb<^zJnE0k;5)V8_(Xa5rb74A4K112XOJ8!ml&N5nNka8eGU_#{r zPCC1`!U+_mt(>&|%$L$69P2<|G3|8Lrv;%`0o^_!OGfLYD4TG9)e0>;T zy)2;Ir|3%BAS4d@hM>0Z@f654BSmUcfAX5e;~Y3c=(OW2dAOMAqsX-rR&MUudJ>;x zMD~mc?(>R;Ww8^DkqVi)czR!;=z!Vmj|!d_u+~EaMtk4piqMKJHe{#ZDnYzK@*5Fo zBERVx8ZvSAuD+RqtqIN^I`q?{h5PoZvG_toW6NS(r}Gqt?u}W33q!H0p5uFQJO?4d zvCbE?6|hCZUo~gI6mL#I43LoYp}KygudT_s6!klugHWR2;SE*0uA|jKuc<@Gl$@&Fq_gVIoJ%QUqxfsKS5q9 z0+2%)JFQ8LXdjns5xUTiIM{Exf->!A>Sx}5?v+ggVs~h;faI37P8d6$<*~a@v zqM~XE%AG6XdoezEO0WUEk{q*`o(e&HVi_PSGW-GYlB5@jVYJYzw))Z14UVXP{g4YA z+?aCR8Xcx1c~2qq*{cw#x9JM9H=dOs-C{Q(=!0Oq)`1n7w$WxO#sDoq(!WSxF3OQ< zvo{rVj{$V1^&cACQl1D2(3Nq<&$iIZ!{Fv5sl4W0i!$<6+IIO(8wyUUPI#ke7rbTL#To@X)nWLpR7ew znETK1w!7SQ^Mx^miwQQg^aRP)8g#uY76$iuD9~r;ySf+(JV{dqVLa>08=v#pFIfR; z^9Wv=0g{6zl(oVQ`Kb}tTJj6r%{iz;ZrdUX7Okb(Z03KfYvL#XhkMbBq4LqCVJ@}i z=30sGmKFq_faFWR?b|o6IH>JogpsNYC;LdB;!P6;#=pxXmhzar)bMQ&)lbXVhu&F_&X z{)8ly^cS;|5NIyO(-k_ICQOT7Q1HL2EK;AQqS9$p&o)&3aVSPSJ_pB|jW-YvhzQlG)1C94t+$FTTdD}t&D1lXciAOWP5aXKtswOtg<#7Z*OM2^>f;eWF zXeLO;Z^BS9SIx$=q@tAAUozt-%>YrqUa^nxr*iF47%=1Q=)0N_N0)B_KV04-DhWoJ z1!FBs4LKv;Qm6c2kvL8~unD-!Tb(XdKzsnk1E#;whADQ9{J?s$1DQ6qB0fDKh5@!l z!L9t4UzVZ^B^G0LSblbW3Sk}1o~tYnG!iOE4Th3)|Gchq^x&@+w z>0$0Z0fq>2A}XJ=rZEg@8d%^U2Bto~`(hs*kH|*$zQ_bkww-vL-t$r z`TN1*{P$F_04YG$zv+1J?k(Vzalc%QM>^F%!Wk`{71ErecoBbohsn-yT$DCuE^S8? zo*E83?cC;einHNPdm_zTi&-BE60Z+>*OQoejCgtSpnaj?G<^s~pgDPqdzDM)G-;wmIK z4FGb1^*%BphwXcRuVY|NDH?a~^3~Ynla)Fk1BCP|V&Hc*?{fAh{(Dpo7Y3+G+FQ~v zgH#*c&=bZs|b*b)cjsozJtr|QFBC46eAOpd*grQw61ifh?A=g zs3BH)*|70QB~s;0w{{H#d*JOO4&`78K9CUz*q_bPUcl(ojL^Ohbi6i|FJyGHqcms}TMyOY}^##O66MK%UZr;8hcsKS6VCPV;p1WvW^V<+G zDINksuGXMu_Bq2j(;x?FiXw4`p;045O|$DnLQHCfcyGM7DmL>CNRJ~jzw-6*K>#U0*1rXV(((lbusQbT{oudjUlt!bT|mMS zRa~A=>VLZ>lGAwjCrPJ#lluugc|NEEx`j_4gDhyATk9}5Oq15B_jX6AyoTB{V)8HN zVoV0)h!eN=4JZA=m9VmI9_9l%@gJY_zd2b!w~o9yGNUC6iFD!pLE_4 zuA`dePxc=<_0CrPV%(h+yl$YbiN(pZ$lO_y+abh%K>dU9rWdMhrQy2Yj(?0g_3&Mg zT}or{ZrQsiojfaQ6=j!Vq7VbTR676o-9?D<{R_y|d3~5f)*)>dM&A1VWkQZ`{+!N; z4m9r(o-|JUmvkO;D)BIt8@(^z0eqn{(RMnKktw#?OcXcbfI)`&gvJ?;t6QS%;l24Q zxx0mW+Atp!^J3E--^9MXMCwlWm9jv6!jIFI%jxR#Z}I8=!vUa*#nL_3pqNL4SWtNC(ljvM#m zWH`rr&HZvp&;2OoN5`zWoT6t!oW(P8QOrHeA-{*fpc+CfWwt2xiTk2fvnwmp6aqMR+=8Ad6v9m)O*6 zRIXGb@3rf%+_Uv1R80*-9uy_~$v1n0s;HNC6@NS5O;8e_R;l`=3c!t%Oa}YK?CwTA zkZ>Tq))SuTCD71bSEo&TfNrYR*jS)m&OWP>KQK86*>84npA%wy9OX)z7B;vkJe#4W z+~8;rn^CTtD?3se_IFH@Su6H zlYZ=8opB4gs{Sa@!2`4_o2r-Tq)F4Uym#qJn~P+V9Dp>4jTyNm^K0!xlAJmIq6YFr z7|(&jgWfb3f=9DJx9>+z@W_*icG}@+~i=Ya`3-{q|Znqf}F<{Kyh>K#Q4a2QQi@$e8z>o)#6`1O6NbX0g4%=CdmJ{nP zqunmN^B83e)$TPuY$3@x!_k-8rmJK+niMY^R)CwvaTd_b>OzxhVmjLJr}5~$c+ng~ z;Bl)w1wB_Rlds!WbMBqZob1|8_8QN0md%WB)d)@|w`eY|50=F(^DPUyZvoL1a58X% zqay?2BsUW8gY)HmKSY{tQhT<1oJ;|RP_s}Nhz#aKLU;q;0fAC*B)>eC5|k#IGO&*0 zWRSFG-1wMd?=(R~8(*p`u7?uzYZfwLJ080QSn=-q)Ia&%% z)_IYSPLpS%aDU(JL?01Usex0361t=A=wY>SI+$x&$zT|~|NHpi_*K2p`-cRT3t~dW zVOh##j09Px(C|oNf>0|L8C!AX(Zy`X5@d}Q({y6RbPHpS4GR!Fg8PZBF4^RDMg^_c z6LmgnkVid+%56ETkSgE6%1xT>Fl;ITS^*LT- z*MMN4=-7L6;)Ro*qIvpQq;(~aHd+$=!BjIe49tq8P|!n9q-XC0=TFWiPT+EI=&ADb z!uCXH3`0F% zK?e%BlF>6rSw1?y(6_ZN&hbOm;(Uc7crP;CN4(`;$xbMDZl%Ho|CdPXuAk1 z1mRsP@s7!H4d^{BQd_f_Fo!w10zZ6+^k8-p!o6Ev1knIu`xW&aTD8dx zCu)knfGIip2+T-HD1XFuT->1>k{WF#JE&{K+9P?axyt;<{1M7{cH6j<70_D{cq9 z4glLsdn!SM*TM6IF2Z)XGG&^f1`{n|WzrKGZR14KVH*QJGO5o2hy}L$An4L>Ozy#7 zEksiZ%*;gAV<|xiSw>NfN0?&v6$-?l@pRLZl*MG019uF57%JeVQb);1Tyb|#e*p`5 zXn*b-QREiyVzcI`~sJ?y{N@i%KW~l&Ye+Uzhk2 zY64vrf?-y5P{?!e4TeRKwEF9uIY?IPhXG|bd6S}^Mlj{tqX7@fb-Dpfa39r& z`pF3tn@0EEEHxBaSSV4u5MiD27g(HiM3!3Z_h5ejGol2pqOpUk>Z`F@sSC)A-A1^R zA>;~EUPV_Y;S6joVB<~{u()zif`}5P?;3CtWJ@W)AU1T<5xNbW11JR)JfT|KWaws)EA6-`UMW?*iUsIs0-mq!rQKdwz2JKf&A@vXHvTUL zx5eF#FiNjw6rHWqPl}7o#WZ2E)#(mZ*S(1O9|~#G8lebuV^?QJU%LJyJu;(?XNp?k zO*M%z7Lq;a`Jv%*8JO^INaKvH$gFXTkQy4sPlF~$zx z&y!inT;o0Q)6K^r+>Q_u54-BaIz@rn)*NF~f>uLTs~;0Jn|O@93LL{*t$gC14cuvK zwlhUWoC%Cn3C~@1;!RP1MW?oJM-o=)e}pX)rbzr#_~O2U`Y_Z^Z@(!tz;+CxIsYyr zTL=>3_J$c1%WvHL2gVk9+NJylBt0MO36~6#S+_7xPXPUsC?*_B*ve?4wT+-}GNnWJ z$db{;;K!4KWEzGyYfs6QUZ@Mbe^KO^Q4KUURidm-m!n z=nY68t;yEODxJg*1!qiiNkE-&mynGaxBwYI=D%M2yW6tR55N}YJ_k)pC(pWRp#drs zooH54-9A3r=Ur=(-u{KI=))uTF+5lfXAb}O0n^>M;iA-c<1%#aaq;j{b*Wow?S@mj zomO)Gjk38k$gDm$I)C_`5h zVYmE1Mc!1lZmA)}-ECul$*$`Ry}Z@G2R&hGl!-al-*7 zi%%Ecen~THvstg@HT=#z7kGA%S{)VG;^*jCXmD&=&k;aass#}n&ONZc+}O6#yI&O( zjR4~1o(y_Ed#(V~w0p*UC(koDw(FUgMERr6L|G@3l+Ui;ip$x@3@=s1YKcj*;w;{l zi1uz5QjLPU337{dz>|90sT+K(ZVQBv;{UD4L6`J>q+1@_CN61Is3)v z@;sxy;q31>>FmHZ!+r_=?;p#()+NAqX2F81 zveHWa$975hot+W>LGIg%JiOZAToQtFk9(+PNs+5 zkNq?jj@J^ir4zc}JHdB~{Lbejl&{XfMVl0OSsyIV>Pl^LlW|7znIMql z<-hq^PVf@Mi6zT(TrQS`>HD&f^NoKR3yQ@FM4S1?0#2wXIel8WXXf!fr3(o$ZxW{n zFm!|zotRVT7fBu#gy{E(ZwcH>>B0B5YmTTQenfP7bh83DKh~<_s06OVgV+475_j2X z#`%e9k1}M9i*}TTdT?x8dB0hd!wSev&lxkN4)coSS5i5IWK+8|-72)>@%`#w@!!ds z!05p`1fc*CK<>ZRNENVuu})5}e(?v^Z21a%GH*cE*dv}VkemPpTqk1CDSx1;gxgDI?weja92L^IM*Szkr=0D$J{{+h?fd|Cd9oGyQRl$1c%>RVO6|KVX* z7KzKYAB~1fg1(tI5YMBkL@enI6wV^XwHXXG6*P!ePr?*J8hJMJ6Ua6-BDKwbh5O$1 zNxdb_mMpQzf=F^J3shd7T#@`UUMpYnpyp^4ixB-8d8!x0#E1WS6@!w=buI-b2ywDC z8e9H3ae?Z-7C}=>D#MAc&6IEK_Tv)*c0OO~Dd4$K9G1lW zyn;^4I9)%jh0dmeWc{X20lIQD6@oscSe#4_vsHq9a7xOmdS7TnA6TYl7I{Q?(5hz2 zd*b-VBUE&bAf^K|VH^#6oQw@;E#C}KXc)fxAva{ESM%TWdsYhoA03MLPP%PYv&%)dS zkv|>WBtyf4na3fLIIYaUd0vujMkG;H?mW1^6u;qB5b%Wz*)uQt6+QI1pJ9=yeNawv z-$op&3qb`$+A)(Q?6(LgGN{78+y82st~}coT9LhWG;~ROMz<)B#SsfUF-f+b=E-v* z8Ox~?Az{Ts-;#pgz5YJ_zLFFXb>`6US>cq;)kO6Ak?(AISUFWSx)l9yZLxKqPxH2` zx9H`7M6`I`g>vUZVsSK3=f~?$m5#c8u^co=;ebbDmfo9+VQ0iHTP79H`v}F^F8*{5_-rsWK zw@?%)m8A)2MfNMcBTMn8)qIw+uVfVs<*P%uWFNIt265xIL?coFV*(uTSeN=S^i4g= z*^b6c_=(aPw9aF?M~;vi6CX>7Q$rKR@i=qTOa$?pngEHOG~BLa=obK2;IOa2w~|8w zav5kv*cytT!zHff%{L9^UKP)dPiiFT)%M_#%%8cKc`s%1n5#YyD03A{cv^=KE zbNQjGNqf(%8>&LxE@W=}J|k{{id9#ra8A16k<*H=dduFN8B9aTYWfqj*P-zk1xstdAG*nRvJsrRr=%M_IsyRuuMVr zCF@4&`^m#O;q03)vW+fi%6*2RCLW4jht!Qp7_3o)EWY(nh4gClwp8$6BuQsq;p)%` zld>wLoy*-`b*tW}`qUblAvn!-W2*)_?Xz@ozqVeqR^wTJoVQYC#o&$3Tn-mWJ z%(DIQmJuF2$<eQa&23956AO1ucl|qt1c@mrH5bsqazWKTJva<3;WH=ZQp1L((kGQmUBJk(=WEJG;sC{dr>5wvr819Z4C)cp@ArMuoMC zsLSp|ScK5S-ZFI3hxzNvB=Hy`zMN=ZqjEw)=-TEhjU}uoRQ*j7OH2O%Z{-2iOjj4^qsSf{Ct5Fm+L7V$}1*P-Q)Z&ZX*#H?p z=D!F(1Au3Hm~n*S4}+G4%Mq8@1zk=Wjz+EN#og;-s)W&iUFr@sd!O)gjwQ8(e@BBg zpU@5M2wd5Z^{P^ie$GsrOw`3uoJQl#g#iq>MPf3%kvx>H2W$=J9t&e$G10#DXMgmPLm)l#h)M*PsMpe5^Vsn$%wrX?Gx;z9 zY^pogUT59QeVA7TmT5jKnha(~7MNAtrEd#f5+$i)cCu7NmIsWev$9%f)zU0@YyQ9H?woNNkJw`=5h>PT0tT0<%C6j0IJk;N6Px(HLMKX$031N$ zzpM9j12X~LErCoRh1?TRU5J!5ChYD8?R4sEFEx7G}0X|t?{J2oUae>j%IeT z^U5U`7W1Rr7&=uIN1v@GTl$i?1xg(GkwYg$7o|xp9l`B9fRv(}E4*VAIhq%hZ5llM z#ab`lNaNWDMX`mhFMiIKA{fm5I-HeO>5Zy|{bm{F7+!exw^&Sz!WDm+_$lDr*Ug!t z^muR0tQTEkOi*&MUsjU6b17-)cD2vPXi9}5e(}RnIMA(UvmA;_rC?E3k%e4H&|#^ti<}elWz$|Iq=%}mvLfPnF#xR<>nD;Jl-7wE zYvlIUr@OmNMQ4T?;XZbC>a-quof{aRhGBO#ERg-XMi)qvJXin~Kk+qQ0`vFm z_V~;KoeJZZ8J3-$QBk`gyt^69rr0vH*OYOpCPf$OmA0)RgW9}49wpb=|1|flk^a~K z#`;oPnR%6Irup9_gG{zeu9H4+8{En2f}8G!-^CTR5)W9igH%ZmIk7Q@QcOsQEX8i1 zASZzgA&t7hu*8=u+Wxv2yh42XgvXUMKntyDubh(eK&W6ch29QBafeG*JIou`+gZuW z5@Ib~v}!B!U0GXXl~Mp0Kgu-%{cN%SD4dsE<0sMF3potPNt!j zr{GzC-Fg&=LiK}8V1bGWg^umOt%@ymQdM5A6~yp~-S5bwG`)|UGB*~#%1n!B*QVhX z!6o9<=5S?rnOf8+o?K7 z?Zb=CB_X|-5yl*XXx*VxV)h@|FO+9{kr4SmG-jTjuE7x~T!Scxg5Wm*5kT(0 zWUoR$k9V(; z?&)5$o7b_oa=bnr0E6sM{eTouov&}M%aBOX}j{{WLa)EJNx!FowE9F z$E%Q3+;kwBjD(%9SR| z$O+L!Ie0$}%{}|FzGMW^0w33SJ>QHfm{6v`Eeyi9lqAj~iv%yB%W9g|vAB_{4k}to zW6XWY^E`}#&d<>z;1&)8m{6}VM0TVInDD%X0J})khteF1eCOx*vldhTNdjVMX0o<*0u3OC4&V8T z*JTb{$3X8ZEPq^VGrj_Yw^pFDtytp+uRqP1a6hQk)mdQA5E}2X-@^a6`f^W%X)$F# z6u5h&UenN6<9n@;bl(AanGA=wvV|6=Ld>v(XHql_7s9)j-zRH?A6Dymu9xM63=xY> zM(9*etZlnfbS_M^wHe#Sj&0j^vSZt}ZQHi(WXHB`+t!<;zwW;I&l!K!m=|-5^~_aw zwd$e-(dT_1D%-7pZtMGvd~{=;RtkXk-=@1YtoE5;8r3)RA2(fRi1d$JJ|$esObF;L zpR(WT&OMk=M88vA8KPPd^6*MNzZ*;@*)G>_hM#YplCb4edYuK|K29CH(Ph_3yj@~@ zU>*N9SIBFw>Bb;Nv0nS0)0=e12*hf+M9BE7)Jpl|m4aS@$U#06h{*^c`uVbC7w+ig z7A=~BZ6`ygOkD0<$AN@6Ve`tIADUV~ZXCL+zRw*pno~w%ZFdF9xbv-9-%vKIL58ay z?#=6-{(16XD+bneS1^mLQ#1`+0E^q_UaNg|-9q=qLearrP9MnyyRb!OQQ=|D#z0@^SgvRp@CH9cb>ny zwUeZZdptD2-#FFnZ=WUcIfMhQgNaiA^Gro zgZYbjCzybL5aB97O0)+Y1dKUoV<(*B26((3Yb2F)itk|z99}T!VHFId7s!=0s4)!P z+!vSIe_v6Wada9e6&xjm`*7=YYg-OfkIu;v(a*u6O& zEg+-OZvt|VHAd9dWMF(5zRlqa3wgTRRW9xFh=!qrhoekUSWFbZVXcy$Pl!QO50fh+ z8NA;TAFcD&~%1MwedYmVowa&wetRCPKP2x}EsiiL=#HE1~7 zLw_fpxLCb&sU`n2-$Ep*DsEjJStOcJtUOeUToWNlF>s*9ghpC2EaDI8&+0f)cPzSK zNY&||11hUwTt%orMWPFCKXxx~9D3nYCtg0YX%Xm%iyIRaz8;?(97J-wDAsUwDD{^O zu9(2YCMlnZ%qCmq!eLW@>CSonb6=36As#sOhK{+;>^P*8-Yr9(W6~g#v{d*wwS{%q zY6uu)$yJONkmu%}?-kIcA_bQgX{T9tWh0ZvrKMW18hs`;a# zIW|Oo;*YjQ2_pimvD_4Uu9>us&q(=tpuC#_%9pb>bW?zuGjm=)pVDdFD{RLF(}Tn zR1-(#)jP}k)mohro#O$7A=Sf`V*&fqO+2S6=bIC}DE_Vvq^tLX0zsu-ssSxNLnqr* z)0(2k!GjqtF5H3GD;>Z8sulK-go+}0R`%ol31Uee+e8#3f462!Ee9d4ZK11Lsus?v zFQ{>T=as{3H(iY!{}M4xmaM3_bCnkk<>wh0vq9J94pUkFlAw^GItawd7wASH1#NH` zqmnqg%o`9^oL8r_l_G81SWyt%y(|73`|?c~c{Ad9%c6{iZGNweMtK}0MBev&s!f;M z`y!0apvgHAAPj^498^R$!N%JPB-i~+9U9?DqbxA{sbtP9ncHvZDa~Hw4ht<$J`@h- z96|Hkf&DU( zZ;LM{cNP{wLp@P%?*%9H$Sna`d{URkRs%3tn9BX3v!gw?JoPI()sGt#!lwYkT0YMi`gr(3t?uTY~VP_r`v#pL4#HWA>z<@A^Hk@7uiWb_Ae9% zt@CXPJZZ-L`;z{{(J}svpk<$QZ4n|W}fupdZW_{G2N#|F($79a-#^5NCQcZ*Ua;pNDf|Y zr*}2n;$%bbZx>Ftlh4z`*AV(qN-5DBiP5GGyFdS)v|K++D2SEzuc z-8pjQ?94`xUs4w7RGS1>m|j_@X|k?w^X0E^Lyg_KDcDXj!PdRm2iH($=5z9iR z%)iRhZ(GZwyJtRRft4dN!Opc0mC*40j_L~##2s>m92tJCr$L4{INnw+d|`3`OU{L# zywMtkj-3$P(4l1cCO26TbI^A%2F!qr)8xX)<5~|h0is({b%a^fU10hvG;oB&7@VN6b#)^` z;eF0DxQen-8-+iv`xA9{cWmRdKwK>z*lx#TG1r$gh8zO!0*@Ffo06;!4Hz8lk7T_& zICJ=B1O8YD$R50ow>S8PHE!mFj$)+!E5T1ckFCSjIHI(3cSi$_YMR|f_V+C7R%W|B z%~l-8kQ-1fSz|m}nYw2E18S;G!eO}1I+E(z3Q@0y;<3k1nmQP6UyCY0W%jak)v1B% zrX=;F%x-dt(uHlT(ZhlVFl^+F&_nnkC!%<0kz`!lLcMUg+) z!}FD++)#%L3aE6?`K(-XvbD*VM^fg963#B z%d#pWwJX3oNI71i`=C4Fg9+LE7G?aymkMnJ*aPm?0_p#56~yWU z@iy+J3voocis7S100%($zruJ#-{dT5V%f-FV#2%6WDo2&2+R7JiKP$v2y~u@Tj_Pc zZ+IT+oC@MDSAe4Jh@;!?`poiU=DVU!B8(s*Jl#@F!hb=9sc8XN$d>3Iyr#MD#of#& zE;D7A)=_i}xCVq=?BRoZ_lFWXD?L9{J zTTKCZR(hf0>Ct}@zhA7f)u7Di?ViTfY!(bXUZxv_&Ff7*6Q>Bxosg2|12^4P_0f72 z467>~Ny1uX%I0Se3nRCm4zGBPNSUL%u+9An;?@$)ty}I&q#ZZo!Y@~+jk%eAlD13N z$uh|Fo?JsQ1Ib>t;}}$i9$WGQG}X?2U_Nxre0e8Sc!K%IX1Wgb2%sxWTE}zCLO?qV ze!ui6rik}|?PP`FjCc(OwX%)(7U}whdNH2&;?y}a6GbO9)1~?3K&bqA0#t}P#)sgk z?>RoflgJnnVl{pP%LrnhGXZ*{qkjKuPsJ)8)dvUa1)=HIOHLQSir+?QV%PT>9SxVgl`E4lfzL< zLK#Y(iuF_`3S@o7e=B5v7ye$p0{B(U2-e~v=DLLR7G-Y=leHuQTrOO-;j3sebSL}? zvuI>-Wz1JjpvO&gC8syD$-%T;k$-B>xwrIOkYqd3)fRZF8^Q19$lGU=e=YPl2tdj- zJxWn5Nfa*My-U)Xs}A&Fx#zZIT^w!_%Jo`hu;|rnVof4jVL8>AS4YjjV;6mCp@J<*%hn0ebj@k2=HMWv z*;+cAi!Xh2x)Q9&vO7dgOeEq}Yw{x&F5I3;E#i<3>$y!WZoPK}w;%Yr|9p6Cj2QIe zJBx2gQF;#u`W7Ut8vhI7%7q-jJ)V}CntlwcDDJ#F$cAAa4oFMYze(o# zGK^jh6UrV7k6rn#{dc>%$}tP0m5SledDxSyvaY^NRVZbvT5tL7jtdeZc1WfV`a}9@ z;GRbJozVCOb6J9$Ra3T2ZM|cREL0YI5rCi;KRE8h3T3jQVP}_PSAO@^p&! zbmT-G0SXn@(u#G6nYajhGF=se1|^_ltO6Oa%bi~p;t3Ee$H#|=zcLj9e zG81CL5>{0jYj>bv5gELUD=din58%*n(X> zH})`kQ>jqbUO5w87WOw0603X5a%EP4NF{Z0Q|<+LheJ{jF5G##$)7t}mMf5Clc6V^ zK{i#?NL>tig`|gK`W9YyUL`y(zb63KLP1BE`J-a%I|xN(psJ0ByM|U~zxnl=jVXqz z7lD9%33Hm3CB%&!6TL07NgJFyYV9Jx~hzd18#%(-KUX#Di<^|*^czK z1p*<4S0rahzvI*EVkysY>;6*}D@PN!+B5`knao!pqB(b`&80ChG;xL6oNm&xXIrAj zAMy*dVb;C!5t;jmB9ln8$kTYYqq5uNs5pfuJeB8LnWWtLe@#Q%szlCE?pM8d9vtQT zN7Aq+u0fvsFh~SBcw@te!3wNm!&{EZ-#MhlH{#1~k=&sv&Fc_ou3;oijvn-@MmYsN z&}=IeQ$s!MYe;nyaW?)|sVF(chPSXTpeq9wr?NHE{IqbmhxWC_eStwVg>C`ZHzJGsr)?>lWD*r$Qv1K}lWhmHshf zG$h4GL{9esseo>gct+X!KisW=tljn2|M$5Xz!uAEpCiX@w#QCFRP@>Og`B(Eb0LFe zE5)gMf#h4Tk8eW^1!WNcXI9nW__u^E=s5UkFta_^9O)*SJsM|nuJgF))Xw26C#sMO zJS=v>&YH^@)jRqL-D(Zh4&sxY=BUn3$L&o!=vL~2?R7FDjRW<34_@uZQzqsE%lj?R z0HIDrPkZu_Q1&g$s(;^z&^5W^3Dqe8S9|D@ysy8bz{+6we#k9i>-jCSAYaKrej#O& z=X$>n`)@jh4~~GC9T=scNP$zM6U3qSu4g%j>X*5p+1_*gz*(uECEX{^HkT)~U3iGf z(8QmfPCg4p$xyG0Gl@YDDh;;@b8&yM_0ov9wx^a@q?UH#+vJ6zD2QNUZR_zQ_@h>v zTRou9?3){${j&y*kJu1?hUuO{IJ^7#3c_`8#X}i^lSlC7f&2eX2&l{K?u^mM%N55i}Z*Qcb1Y?i{29wDLAv@~hZR z*&{SsPcEftUc}$wT5>e~>ao z?qnkvDgx_5NOA)y-T7hfl58Q=X8rpjVwzwndP@QoXJMX1RI!@^QlQWt_{ zb|_9uy+$cA>B3*zXXyqEy5#2D~B1OTdzGql=k8;Q9V=I7Q>QXc<+K1pJHf!H&A6Y3aCupjpUE zP{4z|#0^4#URyP+;O(5OKUa?|OR_cBw{O`ncKz-{^vPo4sbSai{k_GdMCh|R-v`)| zFUNTdC&!M#tfWwv+XtWavYf6Lz;;9W!9|XZrtDh#s9x$M=Novju zDPDWio4?6YKeU0>$aI<2VDO&r`C~saGILcm)Bk z2LlWv>Q4xqtX)FM!fC?8qPQ+%wo!j84s`*+q-Zy{joSB1&y;#u`+8Gx8Z*5$`nIaP z9da7+QI`SLU42wyBpWx)h}(lFnuZc=!;AT^rf7Pm@ZCAO8KGFQ6x?tCm_T2anv>%TFAkQ1+Z|7gOGsJ z-e=Oa-FW4A9kBdn4QerABE(&OMp*uwzCC+K3=~Ih|I@IP;JNXb!a z{JQcuNaiyvAy(gw9V4P?$J(7wDwtFk;yNd8QM^g^Z^7KT)}kGowS@Zw_^jYQub%x( zovp&f`lu#PlclpB7+NFU4Z!=OdFLxdC8tRfCuV<~V2LHBBf=C=>$;XFTc=Gej?iMC zEZl_jb4gFtXwphCa(?m!0@j8j36MKV_Xu*72%L2Ge2R1*3b|pKLaQs{tpi;+l}$G0 zO1E(kWwsNqCO)pRwIe9YUykA!1!+j?_PBsq9sLPXJVbCoUlYT5x3(}A_yV1!4}jkT zu^<{6^BK5rC<}Ro-E9)o8E;8r#XHw=90e~s9@z&Qbil0%XnQL@yP9I9;!NM-bSH^0 z+XWW@KS030#3?!uakek5s&jfMs?<4CQJ-gHsB^-w9rH7)-I@NSWc0zrp0XGol1R|8 zGD?QGmd26yySv3rG#yETPgV^1xv?Q2*(veVJbIhpBx!x{?XJaS{5%cZIN6caMrp+KcdFiSA5neh}ODqKDSuKAV=po zF;AZ-o2&i&xzD4iVtWGR;wk?57#Q`uqQxFaw?|csb*n40jJRzW$FNXomi3^duhB;M zsL0R<8yd+ow_%H98QKHVc-Gn7^)pTp@DZZzR;Y>kH^w1X^mG_I(*2jpLUh64$hNi{ zs*&tt$<0n}L0ooqq=uG=NX#Sla`F|D(~?7GaBKt{` z?1i>rF;iS<71mg#D^g<`Fr$$BEHB32!RWeCs{@oy1obcFC(zq@xiI#`<^{DhigIg+ zdZ?ogvo?dMpN=o9J%Olm{D5#Q#Y&~uPd2QW<)`7qyyI!#|;gy z1-Sg9({TWhZQa_Uu*;b3BL{711fy~yewLEF%MaG*wN*6_e(gXd*KjUTMAeb48~VM7 zxsDbGosbS165+0#rLw6@s=Bj`!Eo&x6-{hu;Yu{4GWw3C^2Yi_m?Z7C zp9S46Mt`O5qx~i~hF_VNsxJE-=?dl-XddeK4ujY&X2|WQGWSIXQVF}CMCU_74+IwV z%=Okr_5jnmdc$wuhBgb)OIwT=zuQOEdjvai&o_y~IEJ$h+ttkDomT|zX^_*HC%;%u zC<7;?oXoK-a;f6VY3%94L3etV{gkXpx#`nSXJ@paJMw1`$HEu}E*7p9Gw{gxMFsG! z{Hj2$tt)M~Q?M{Rv@E!7+qP}nwr$(CZR^{%ZQHhO3mO`HtxU{Qm3ik6a~mq|M0AF^O12}M4q_123z(i z2T)^%c~mVj4uc(Gu-@Wx<+n~l)~n9MZNere**sq44ANvxDF^GT;9>6CAplj13hVtx zEYW(cFip6x(#qyJzj#7t1f`#fB}v_5{wk&vchBTgSD^bB5k$QUq3zv# z)|QxfWGkZR9p_LU*bPY$%F1=2!yHID8F+B!E4<_HzymWF6DOvRxB((J30v|jTh~1b zfY$^6s-eq`zN$H$nkrg;8<}^SOR0s@H~GUa!Dq0L=p=(0&K>~c(C3+MmtfYwqQ5Hq zi!up45vyZvzy>dskE?7X*1up?xXM-1lb6Iw3t*+8fqi?Z7WPb9!!UM{1_hpf3Ur>F zB}E~~wx{m=r)x#poC$F5C){iSp>^tnS7v!lziE&kknX0Kxj6S46QGXer*oP!90v&b z5f`M?)7?1l&hn+b*CT@+aNsW|lPKvPV&RePMBMB095c<$!LP#XWj^FZA+R7AyF|5} zd+%dtQej{aK(%!5&Bax7%)+v!#cp4HL{~;Q>@;WuuL2`819*4r6!qB|1jmxX)DQK- zo{Jcx;mn<(UbeF4^R&xNuvCOPGxWYG)zgXo%EG(vO(-*p(KdyS zCMK90@7U<11asJ90snz}3}{mqD!|(AvAqR!$hjF~*JsS+f2Z9xD>N0Nr^2jQ~2!&F2PsXjf8`$7lW;s_D-$>iuTll+WL{zFp zLVV~*h<(jl_7Zu{r2d=_*E2{6hdhWdk zl2e#^g{hDFW6G5X|L3EK%DL8$E;|2|4?aOQI{hni0{#eMaiH;oUg{7UsK@SqFB@;e zTd|X;hW1w}-MJ$klurMTJ0Y{&ve9b$X8Av^#OcoeSQGMFzMKE$Cz;+%lU;V@)E8sY zFRd=6KQ|@G4~UxF&LASjQHx_&s@QcT14$h0>|8A3`5l)-7Y9tIX*!bRXZI+Dfn&i7 zDDC-=^m}Xu`3}}bV^i-U#Ye4eaHeztfip^in+tjd(XSp~?|%MSX`s4jpW68#VAI*# z9Q|5~yS!AwlWKhJ93+evXOABhj5x>yp51@UykKX07%4=p*t*k~bg7cG0V}h-N7fsm zCjyMHS5Y%}MqK$q|Ii-!UJJ!$2ZRA+2Bjs%hFC2Uq&45jX-ygS5P+UdimTAA$V{cl1(&6v;NsbsoEeF7N(1K>u+FAt(tn7~ z_|2NZAOYmc2Xm7jkGVU+4N(pbR@%3RMiM5muba3rKjF$nv>kb|m{OA__qL$urYmi3 zP9NEzLLHVmrW%W<vB0qs9 z8pN9r+&l9;f9%j9$IuQvMAgL%BIQ+_Egr3CJj*nyixb;O1sNwsTcX)axpKHJ8LWRH zP3JBSmaW3?K(SU93z_`BzjT|U-O1v87GrWNfRyH;BJSH!yFRqImaxwTjrYSpIeX+G zxGg=O$(3;UArDlFJF79lwo+TN%603{^sw^x!C>9MMti?JA<~B zEopwyfxLiboBLJ$S18+~B4_)aHSPH66~XWGuFt%&52ONnn0_rqOm-FgYPV7ZHlmmzO7iwK&ORMEC1is)e-n9d4>u zGABPIxqqAX?$WFxWbs5*u;6paoa?jYn<19Ehmx9O&PrdUT&|wWzvAJ$oN?tn!Gx7S zkYcqHF5G|?6$X=*?vfupczCFGP~xJ=leiGI6WWY?>rv>a7y$X9G+?`|1VQ7|&G;5G z%MFjDq><)u_%dSBpBROHNv6a+K-sE<#m138Q)Tgy7VqdVyb-MI3laHTi#? z$C>D$VKAL&t9vu2qIZm8Bws{}wUq-)(PuFa5W(00W(IWMm%7MLhw2(Tv zd`t2A*Dv=JKDSI&wEN_+BJ$dn9IL6wl18>f(zK*Z+NS;$ z*=(-IO$)@d^$;NqCnOAsFVKRmuPXwws@zWx5|g+oS40|@P}gVv`-iV|_tN4V0g$?* zD3d`?);GV~o$Ey3%@EbB_oO zI<=(N6&W{( z+{y`7`(H~KgkZhbV!XdMkYSOPCC#Wt_HX#|{MtTG7W-Gg3=K>NU8Z}amOh1kp&Q&n z0Vwo4R!u3Eoqas(-B`3aJ#l22P|4`~jwI}}b#H;*Q9`eh;Rq<(?=!50B>uy269qvt?N3KCg$d@DjjGRm;zl>ey zSf+9TfP{zy{L9#71yvWrGou&y^gHwV(ug_+1y!_fAKMi_e;pN zCoC`9j!A-fd8(|_TSXfMl3-#>nb9KNiHK-gB-}INm~-beRZYTnCT4EZ{@w=^@5pKT zb-3N>LUsBNa(Yc}EKj|e8xV(3aopEdtc{b)U#%SA7sLGLQh3x`h*9j&j6H<)W_w4T zB}eQt)Ey=L?F?jLXn9)c{vc%1wt+gCx7Q?;JZ*2PMJ2Vn*rK6jJ|x+ffh01d(f&|} zQ!Mkf*MWt~T3IqLI@%6kJ}FIjJAk!Q+e_ z6O|DnyiUSPM5RE2O%0tvPYH*m&5HzhuNqL4-3#Unz@+C8=&(P^WBd|I_WZ_sncbT{XzZpH9fr_dVsJSZ;mQ` z4jGnywQ^%)&snYZ1 zbm1UKoYBdcrmd&aZ5TxQ6T!wsbv=x?<(_kgHyvb@8ba27_7k6_2VqIS5u|@`hT$m8 zcf;BbNo0d~%F%4GA}N^^Q=?~3Qvj2R1&b`H)WEEt#YS!Qee45pPLy0i7Ez?^T^TL1 z(Q=^9{L2dP6*SXHnZ)^owhlOS-{WOFJ-)Wut71g8C2OH*ZDi;Abj6Q#;e}DuVs)=_ zU*#VhLDKD-@<%{#O;u==EV<7Rf=>;HEH`PsBU=*-k7Ej0e>d9m&*11Y!EqL3x6oBK z>8050Oo4%ynYXA3;1omOiOW*i5`x*D4R_t{tz6`~7Or>{{7R>DYH_ayYck*$DAj?29IHjchO8y+^-<(%b^l--$@&5oYBH~Tae zw&4(P=OqQGCLY>DLA-Q~G$f76sd><@!agTBRqLLr$T`5(j@FS;3-*pzs}S!D0=|{B zNk!@bNEyB7qxHnkk2#RIb3#`^V*r3v3E|vQyq@d@;F=($=;-u5#_R>K&X*EgJEG4; zK|6(iW}Pw|>SE?6`?t7KC$2X^%6LsncrHpy5un+yEVpW0GZTwhvFI+>b|J6G9&vR% z-qnwQT|7;VUQ_BiOcTtOj7lXcy=xxoCa|<;$TaBMsHKM$D*xuf8hcWWr zE3~#z^fgiy)Sf~G0R)4O>+Q9>3qAH4OpVu_JM!koLhN(y;!FJ+EVMK6*>fy1oAaC> zh}m}u&#&?xkVTbVSe2vH|LrA3^c7?|h?_EpVO4R=t-VfDa*Px4seZt&RmOIYFQlzQ z!%wck%c4Z{$_LU`47w5Dd4;sFs7(*#(q-grmsed9fO%a%=p+u<<-{*D*fY$~uGiyT zLf&Yb-r=|4g$NdnM9m;&m9)c5tQBwDg~pgr9A+-+ou1OrSeTHF?@cu{RF6I@R2?vb zh0CBUeItvoYKI{br9OuE&xm7R4dUSelwAE?LeEe#RiG|LVYyv+!EH6lg;ZI7WL{Yz zK26~Y6>D7Tg5cnsVCedGWATwT5MABi+I?L(b3M!6y=3lRTZwMLUBhXh>}V)U{avrk z;VPx-YqhHIvw>asOPD276Ai-vX?~CNL#p8l7!2In(ML|`K2b*+Bj^`C?*Oy2ly*_E zY$&@y3VwS(WJs9GsNH<5BgLV*5-=I{%HzRZV18mxSzAP51T@^&pGV#YV+_g8$gm3} z|3-FUt=knkJnM1mXkMZ6cd#6Tb4tOzHk0ksWPcpemQmxCWNGfz0qJiNb4IEfZ~K$U zIi8nOBOGyZd@~%K!kBtD2yfiDu~RKs<@R=|hWggwdvZitS}|nM(*V1wwSohH58J!W zByZfyXsg+5spnT(mUm;N@QNFgkK>c{KOQBe7|Y4EocSpL2k3$6F_We`xycop$NS() zgcPdi2~TiaC~nn{YL`Y%@(6q!%q4bo$OGg=!s~#+ojaK2qakw&%e4-LJ?RO3g>(B5 zGN~XIv6Y4b++R||o$?D3p)lK671f_J4ENc%@{8Q|*P!R*ZXmG>l!Pf$hZ`Q^ORs)b zm;d;eT_U{1atxC90Hr?D(luBAlLDKR&GhJ|)6{!CvvoC2mBPr@x!*#+#D)^T<_-6D5*F5Gl+hK6n0Hq*^gd zcjWTDEM$7T{_CJCh&@tlFfq;sz`@-x@@CNZ7Rw;j>op;QP<`5yqiSa6QQc;i2qTj) zn89h;Bc7X2w2@o;DmBo)y>>Iqq6cuKz|_IL^>d7YHSq^>=|hLozjM9vHP3`i0)93N zxW1PCQe0zOmgE$&Z!!sW5myo_K^pE+wh|S&r&f#upKQx#rGOuF`P4j|s+P-ILX^>X zNvKIKTBhZ%7K`TBdcU6X5H7@X#%YOy`B8Z^-5%oI|0#UP%GJ9a2-uSssRTe88C`1T z`XonKyINIFymip@05uk_$p$_lYl~Toz*yfHjhQN}l>0e!o#bWIMTuQI^r{{@nO8ZK%dTCa{X_5J&RF-@^94vd6 zPLJNMjN%;B0o4ZHZrN^4O9;vbz`KP0*<7N>y|i5e8U*MmE$BOC;93%HP+IVC>hKz* zd?UBJqA^nTP5w*5IJ~{I$()~TRH9jG0cHd$CoET6Ih(;1s?>bh)lj%I%}B;sY50du zk^YoCzGG#apJ1<5Iw#n7gG2gf`^cDp^7rg9!+NNJ1N6Db1j!GwIWJvKTm9$vFlzWA z6PIw&UwxNhX_YjNqrm7Es-;iStSyKj5!k~RmV4!0)OCru8;=*w&-tdxy@aNHiB6ib zD~P)`zQN`#g^qy$4HD*!VBG_K>K{^sE&4xgw0Qp>grW2`)js??aW2-!vv{gR>7z+C z1vt*R&EBRtE}RAImNnd*f}nvB)89$5yFtqtW&i&g<=d({aK?Wo8#X$$k|^co%F8hC zy8`K5Ea$$0FnQ==MINc0b|=A+_d|i*?KIPrvvuLR&d^OpO)XPKWAyY9?`i0Y;nPnT z7@#3C!QA_>;2bSU2flj%5P8gbe^7k6SXHu+{MVy3`xR#$81*Hv zG81iQvUw$lZ>o6E!vI~*r{%n-$PQmh*wI2TJTmI6ZF*A49*>_=Wl_~{l2Y{JpKyUx zdR;F?6woteRhs~^!eQ>|$`)hh8R=05W^wiU@h!PdPgw&bvMbD-{T=sw0h&fi;kNuu z_pH_TMeo>3((DH`U6iiy?lSfoK)q7$F7UB1ll9HL3th)TqKfB~r@u5$quYX~PhD%S85#4NhR=kDD^y zVg|Tv?MNELuha$x)-<=}!s|jA+eo*LC$q6kAAT~_)P2|dJfJyn4kYN7RtF!7>KHM)iJeG~m9dUB5Xu9GX>Gb;<)r+bKb#c{18P)$ z@P`=UI*jhyE%Fhmk_vEHZIbEqUwPWD-T;-DAB-*D%>L=1=vat$@h- zH{6z0UTJ}>vI9$heq-#$J%l4KMVi?0<)$MrD51C1AObUVep9TahX$q&^73k!2whfa zu2=^!q~msE{xxEW$Whws2H2E-+o{jylA>8qT?b+xfeK80_U&083;N~$g8T#bp$-20 zgo}u(y)&dqSxsf2!s!%BKIawWvyfz07lyCbs&tp~43jD@)p{A5=p&YZ=(F^`QMvsg z)z8>sE~=%EGAx>Qy?fM*kQUC6h^<+Wbv?*2Qzko+xhqx8sJSR>+OWJ;=H5l+GPKqI;1VvMRYI%O}_F&;QIZY7Q?}Q}$`!4}jA&5wWIr z`bk{MK0GR~`OG(X7#7-x3EDrK+P+nx+H<#EgfA$K=xoAe;fHBs6oMhf`T z{X)bFR3ODrgyaa3m2r4uA>vJEgzu43=S^2IprVG!4EsxbgPJORqQQ4Yq13H_kV@`v z0){SCrDXNLxVk>AZj+of5NJnyl_z9)oPrk>E|J-Ad6;V?!hcrw8EudTVBc5{Ff}(_ zxeXv$g^B&Ia7QCSKZ$`JLcZ3knTe;+8d8fRbJoxeD-CRt&ey9b5UJOgfnd+v%dVgl zpNp;U2-XeqISXWuPgthl*E@TYprF?ugz$GZNvDUWZJKH*&nbA7OZ`-C1=#^teK&7B zfS(xzui6*Fjq{QQ;3AxJxBMcNLBy74Cw2mj@7 zr`IfAJ%B16UXP5%An*03Hk4675$l+(5U>3mGCH!Kj|jYc=~pw%2TmYIypr=}2~)$B zq}u*smr_>&kzBn~DJFF@G zsA&Q~29*KA@)ym1J~RI)s$zGl{--`hX=u-B+S?i8WVW_K1S{kIZ=xom6p(LLyTlSjMaOy$vG69J!U&z;F895}v7 zJh<+5)A-0U-H8x+vBWj&{uSuAxG(1s#8z7`R=tlQqPzPE@pA{+Kpo zLC8Ja==uDK$&jm4v9m$?H%WAz#H8{hl5tShuT58yV=!A;^x;)#JL1VI7OjluvFU?L zh#I=g7wdqbvmXhiJpkIH$}lU=>UP@1EZonop1Njn0Q=j}9Z8`~rbJFCUVLuSB~o*? z6O`B>_Mh`&I&l(&b!XT6jSHB@(6@}~bZEzn}Fo08hB(FKKJP{jfa z$qwxnqSKTlgxJMr7*1_4%+K&#)(By-;|0b%<5Y^*c|p$7%iAh%W4veai!0T*Nw3!P zXt$W|S|1n>iP{Ol<5~rS+q_rV&TAd1|VgSzN`u}%mBz1x}k?UxT%2lbyv|R$_)p{Q&QP1Rmt?Zz zoDcuSR!%Radg(^S(+CQLVh&dpy{J-kwD-A0z8-<4C%}k3U1Y{c#P`z`oWgY-q4i>J zUqiZP)o*kT%l;$IKpyyh?ft;s{XkNYQT^q08|X-(t0D{g#wNQ7%XV#SB?{@6Fj#a3 z!E{Hq)8OJQ2f7`s3*j=#%rvJ+StdklO2c)XWeoJ1CTm#m6Dt2~N5y zo+5sbN|3_M60KnSoSCQb`Cd7cr8l_Y7_g@$A7jKDeBo@|DzEJm>@$aq)TOSJ?Vn!@ zm;Y8l!3^u(miDQ&OW4BCun+N!M^R$-(C1TI-jZfx;E9R7L`;L3H}0@PQIh+7SPQ^w zP@T*8kiJVtEp_>X3v8zuND+ow-}Y;AAo&ARSt?7KB^9g2lVufII+nV!x5>D=nIqd5 zsEh9jp@+QzMawEH?73;gZ4q=NXkHceD?JQ;lom&dQYt|^Bmso^jDF!gL-X{ z$CV!->|=UlX@4B#bFuX~MMxxNtwUujs$tY-35g(%qSoNgEL^0>z(h7YRg4j0!p85%M|hgqlncK>x+-7k{AKlh>|$4f zyuB(iT~>-$%Yqx8KyW^-K~8Ooq`)v<{$#FIp|8U0g7%L?QwyCDrX}RP#sITSv$ic7 zAJ>{(5}fKb)eT4e90R#uApy6vFDn%vL%1_Fg? zl1>o7K-rF%e3HA?A$2K}o!lgN982m6v%oNgyC<*pZhoSTmpRHV=1-1kRaNv18^k2n z?}^paY{L=JMwu?#SffB}Ly+f#EjPHCxeqntUj59})XGm7o7Ra&TQUl0FlDD~rJB)1 z!LbVrU6c@Y0K1n2_u^ThuQQN5vh=bUt}BJ=o(Rvsv4f|C&nS^ZMeq3hZYwlVGyu`&EKa(S)&#M-|Q5i1uFAZ!kgonH*AUI zVWv7kBr&SWt2)2T=*AZeZe$|5h*i)C%g?CE{WTSx$F-XX2Y{TY17)zA4Ju7w^RY_q zN@4V$4D$q3$;f|0(|&M<_P1P(LXDX_l5&Mk_}1>{lN+Tv@`56UiJ=`1S&G``ORWwW zc|hucy6Fg7A62E+3^LB@iErE$;apP*=0Pv=@}QZH7UPn5s=&_yQFnIqF$F?LH79h~ zaz;4@FfXt`iK^GSS8NrhO^JashKrSJN)WJoU42k?1}pI*cdj85NumV-G#v^bqw71C zqYEiuKDzF%Fx(3_PmWkX6+5mXi?&cmv(D)BmC5%Y8a}hToMR_*oDHoiEDJ4mH=12W(^!RA5Gh(7?DLxHS@28?Q z&em9f%_rxh=+$J-pwgGp?~BpG$UIB~pvfbUYvPz4%}5RtdqhzIhx1)WcVFzg&4G7? zBFud_(nE8f<|8lY*gbGSvsBAnyK$(VzSQus_a7b`91na|E6qpBFN~u?SuJ!Mm4w$` za5$f&8M?etvX(^tjLMe2LmZC_4aA>?#ayVI^TUaZ2@tVhOQt0zHD#C1ph=u?9qLKm zwIG>CI5@*Irglmrj4g?t6R+1OZLcA?e@a_E-OuwLZZV5jRey#GqlNDg^&?4F?umE^w-vT5*2J&hC~Od)Av z#Y=4v4Ql46q`~$T($uzfX{7a=43~Z{b|#c2WMRQZtw66ZbOpfzEn?G1LYs(qh$DSM z&cQ=Iwe=Vq(bWPAHO*H>L$phBZLdGFo(+5$>c{jH8g^cv#KG0&$C!*P48bs-A|!-- z)OR=UcbN|0kKeQ|Q#^|TP-qb%=1~-#1}4`09*9YgSno4#IIa1~A3OUzr)G;hn6#cm zk3oSh)$Qs?Hqu&2=2K5K5V`?Jh+2)3s}!Gop}wPSD^lTF{6ueQyK&9*&}e$`HW|D< zqZs8#Hjp#6tqV9y2;*k7-<9wJPg7wv>|Y7cR4DlvNJxWVUCkx3V*_t+Qnt49bgqA! zz7(rGvQIX|2nZ-5fiwcgTMjEgwVL^6YH6Xyt-;s{Jr|e;ux&m=U5zUva#xVLkjk6V zog909>CS;Wr`WJzKn+32vSK`J{!&gF)K$o_cOMQvU4I3$;JvG&fj_$|#HFHMO3nl( zCIBLx%MNuaO0kY*a^+*WT9#_1!8WZU(+{)LYb6BrkC?^NEIYa|8C6;xk z#Y6HQ@Vfb~LkAG|1<$koyunDDDjxo{OhrVKcRf3cy4d!78F&nz5%&l%@!Aaj?xv~x#O0m3Sk>tBX6T^nIbPh{HcYilL8 zF6#^a%{UPGWGnPX?o{5X!5I2-Mp<3>I6M)8oHI>iddTYR-yjkS63|MV0on4_>1clW zi+Vb8o%wv?+q3ChIsBk+4&@?5Bv7iN^Ezw$2f)I2@QDD98uvO$0MwtA#sFV`h@

s9=5qXQCyW(LmBG3HOy^v$*8?Y;_P&tWDq3C!; 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

Serverless Stack Toolkit

-Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.com/cdk/) that: +Serverless Stack Toolkit (SST) is an extension of [AWS CDK](https://aws.amazon.com/cdk/) that makes it easy to build serverless apps. It features: -- Includes a [Live Lambda Development environment](live-lambda-development.md) -- With zero-config support for ES and TypeScript using [esbuild](https://esbuild.github.io) -- Allows you to use [CDK with Serverless Framework](https://serverless-stack.com/chapters/using-aws-cdk-with-serverless-framework.html) +- A [Live Lambda Development](live-lambda-development.md) environment +- Zero-config support for ES and TypeScript using [esbuild](https://esbuild.github.io) +- Support for [deplyoing to multiple environments and regions](deploying-your-app.md#deploying-to-a-stage) +- [Higher-level constructs](packages/resources.md) designed specifically for serverless apps

#3a3N< zewrahFN^Ow`&qf>dz@vPds2Os;^9Bx2@LkfSDXZ%I4wEph`|Sc1Ir)v2I@&VPm6&U z&Z@W0kZ8Vg?3lu7{{T4_mS6St&sC&VUN5X)FCi(FwPS&avDuRS3<2JZOdf7G t+lD<${CGJS1c6u_p%2K~$Hc&Z&D~X*KtovBKx$clkPT>qqW}kx2LQ~<0LK6T diff --git a/packages/resources/src/Api.ts b/packages/resources/src/Api.ts index 7b24a9b538..a9ff4181d4 100644 --- a/packages/resources/src/Api.ts +++ b/packages/resources/src/Api.ts @@ -4,7 +4,7 @@ import * as apig from "@aws-cdk/aws-apigatewayv2"; import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; import { Stack } from "./Stack"; -import { Function, FunctionProps } from "./Function"; +import * as sstFunction from "./Function"; const allowedMethods = [ apig.HttpMethod.DELETE, @@ -46,7 +46,7 @@ export interface ApiProps { /** * Default Lambda props for routes. */ - readonly defaultLambdaProps?: FunctionProps; + readonly defaultLambdaProps?: sstFunction.FunctionProps; /** * Default HTTP Api props. @@ -71,7 +71,7 @@ export interface RouteProps { * * @default - Defaults to {} */ - readonly lambdaProps?: FunctionProps; + readonly lambdaProps?: sstFunction.FunctionProps; } export class Api extends cdk.Construct { @@ -88,7 +88,7 @@ export class Api extends cdk.Construct { /** * Functions indexed by route. */ - private readonly functions: { [key: string]: Function }; + private readonly functions: { [key: string]: sstFunction.Function }; constructor(scope: cdk.Construct, id: string, props: ApiProps) { super(scope, id); @@ -231,13 +231,13 @@ export class Api extends cdk.Construct { const lambdaProps = { ...(defaultLambdaProps || {}), ...routeProps.lambdaProps, - } as FunctionProps; + } as sstFunction.FunctionProps; if (!lambdaProps.handler) { throw new Error(`No handler defined for "${routeKey}"`); } // Create route - const lambda = new Function( + const lambda = new sstFunction.Function( this, `Lambda_${methodStr}_${path}`, lambdaProps @@ -262,8 +262,7 @@ export class Api extends cdk.Construct { }); } - getFunction(routeKey: string): Function { + getFunction(routeKey: string): sstFunction.Function { return this.functions[routeKey]; } } - diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 6e84bd6fc0..573ec738be 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -9,7 +9,6 @@ import { HandlerProps } from "./Function"; import { getEsbuildMetafileName } from "./util/builder"; const appPath = process.cwd(); -const appNodeModules = path.join(appPath, "node_modules"); /** * Finds the path to a package executable by converting the file path of: From ef143b96a71ca58e0872351b779d233a98d65796 Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 22 Jan 2021 18:20:11 -0500 Subject: [PATCH 309/481] Git ignore .build folder --- packages/resources/.gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 packages/resources/.gitignore diff --git a/packages/resources/.gitignore b/packages/resources/.gitignore new file mode 100644 index 0000000000..dba60801a6 --- /dev/null +++ b/packages/resources/.gitignore @@ -0,0 +1,2 @@ +# Build outputs in test +/.build/** From 12de81d66229cc49dac709232d1354f56269ba65 Mon Sep 17 00:00:00 2001 From: Jay Date: Fri, 22 Jan 2021 19:55:40 -0500 Subject: [PATCH 310/481] Updating template with sst.Api --- packages/cli/test/start-base/lib/index.js | 34 +++++++------------ packages/cli/test/start-base/package.json | 2 -- .../lib/%stack-name.PascalCased%.template.js | 20 +++-------- .../javascript/package.template.json | 2 -- .../lib/%stack-name.PascalCased%.template.ts | 20 +++-------- .../typescript/package.template.json | 2 -- 6 files changed, 22 insertions(+), 58 deletions(-) diff --git a/packages/cli/test/start-base/lib/index.js b/packages/cli/test/start-base/lib/index.js index aa24003b8f..08f5628d30 100644 --- a/packages/cli/test/start-base/lib/index.js +++ b/packages/cli/test/start-base/lib/index.js @@ -1,8 +1,6 @@ import * as cdk from "@aws-cdk/core"; import * as sns from "@aws-cdk/aws-sns"; -import * as apig from "@aws-cdk/aws-apigatewayv2"; import * as subscriptions from "@aws-cdk/aws-sns-subscriptions"; -import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; import * as sst from "@serverless-stack/resources"; @@ -22,31 +20,23 @@ class MySampleStack extends sst.Stack { }); topic.addSubscription(new subscriptions.LambdaSubscription(snsFunc)); - // Create a Lambda function triggered by an HTTP API - const apiFunc = new sst.Function(this, "MyApiLambda", { - bundle: true, - handler: "api.main", - srcPath: "src/api", - timeout: cdk.Duration.seconds(10), - environment: { - TOPIC_ARN: topic.topicArn, - }, - }); - topic.grantPublish(apiFunc); - // Create the HTTP API - const api = new apig.HttpApi(this, "Api"); - api.addRoutes({ - integration: new apigIntegrations.LambdaProxyIntegration({ - handler: apiFunc, - }), - methods: [apig.HttpMethod.GET], - path: "/", + const api = new sst.Api(this, "Api", { + defaultLambdaProps: { + srcPath: "src/api", + environment: { + TOPIC_ARN: topic.topicArn, + }, + }, + routes: { + "GET /": "api.main", + }, }); + topic.grantPublish(api.getFunction("GET /")); // Show API endpoint in output new cdk.CfnOutput(this, "ApiEndpoint", { - value: api.apiEndpoint, + value: api.httpApi.apiEndpoint, }); } } diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index f38f06c1c6..115948ab67 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -11,8 +11,6 @@ "cdk": "sst cdk" }, "dependencies": { - "@aws-cdk/aws-apigatewayv2": "1.79.0", - "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", diff --git a/packages/create-serverless-stack/templates/javascript/lib/%stack-name.PascalCased%.template.js b/packages/create-serverless-stack/templates/javascript/lib/%stack-name.PascalCased%.template.js index bd0d891815..7d105b374a 100644 --- a/packages/create-serverless-stack/templates/javascript/lib/%stack-name.PascalCased%.template.js +++ b/packages/create-serverless-stack/templates/javascript/lib/%stack-name.PascalCased%.template.js @@ -1,30 +1,20 @@ import * as cdk from "@aws-cdk/core"; -import * as apig from "@aws-cdk/aws-apigatewayv2"; -import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; - import * as sst from "@serverless-stack/resources"; export default class %stack-name.PascalCased% extends sst.Stack { constructor(scope, id, props) { super(scope, id, props); - // Create a Lambda function triggered by an HTTP API - const lambda = new sst.Function(this, "Lambda", { - handler: "src/lambda.handler", - }); - // Create the HTTP API - const api = new apig.HttpApi(this, "Api"); - api.addRoutes({ - path: "/", - integration: new apigIntegrations.LambdaProxyIntegration({ - handler: lambda, - }), + const api = new sst.Api(this, "Api", { + routes: { + "GET /": "src/lambda.handler", + }, }); // Show API endpoint in output new cdk.CfnOutput(this, "ApiEndpoint", { - value: api.apiEndpoint, + value: api.httpApi.apiEndpoint, }); } } diff --git a/packages/create-serverless-stack/templates/javascript/package.template.json b/packages/create-serverless-stack/templates/javascript/package.template.json index 074e87030c..cf0bceed4e 100644 --- a/packages/create-serverless-stack/templates/javascript/package.template.json +++ b/packages/create-serverless-stack/templates/javascript/package.template.json @@ -15,8 +15,6 @@ "dependencies": { "@serverless-stack/cli": "%sst-version%", "@serverless-stack/resources": "%sst-version%", - "@aws-cdk/aws-apigatewayv2": "%cdk-version%", - "@aws-cdk/aws-apigatewayv2-integrations": "%cdk-version%", "@aws-cdk/core": "%cdk-version%" } } diff --git a/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts b/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts index aac3c8843e..186986cd6d 100644 --- a/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts +++ b/packages/create-serverless-stack/templates/typescript/lib/%stack-name.PascalCased%.template.ts @@ -1,30 +1,20 @@ import * as cdk from "@aws-cdk/core"; -import * as apig from "@aws-cdk/aws-apigatewayv2"; -import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; - import * as sst from "@serverless-stack/resources"; export default class %stack-name.PascalCased% extends sst.Stack { constructor(scope: sst.App, id: string, props?: sst.StackProps) { super(scope, id, props); - // Create a Lambda function triggered by an HTTP API - const lambda = new sst.Function(this, "Lambda", { - handler: "src/lambda.handler", - }); - // Create the HTTP API - const api = new apig.HttpApi(this, "Api"); - api.addRoutes({ - path: "/", - integration: new apigIntegrations.LambdaProxyIntegration({ - handler: lambda, - }), + const api = new sst.Api(this, "Api", { + routes: { + "GET /": "src/lambda.handler", + }, }); // Show API endpoint in output new cdk.CfnOutput(this, "ApiEndpoint", { - value: api.apiEndpoint, + value: api.httpApi.apiEndpoint, }); } } diff --git a/packages/create-serverless-stack/templates/typescript/package.template.json b/packages/create-serverless-stack/templates/typescript/package.template.json index 5d6845d17e..7f4c6deefd 100644 --- a/packages/create-serverless-stack/templates/typescript/package.template.json +++ b/packages/create-serverless-stack/templates/typescript/package.template.json @@ -16,8 +16,6 @@ "dependencies": { "@serverless-stack/cli": "%sst-version%", "@serverless-stack/resources": "%sst-version%", - "@aws-cdk/aws-apigatewayv2": "%cdk-version%", - "@aws-cdk/aws-apigatewayv2-integrations": "%cdk-version%", "@aws-cdk/core": "%cdk-version%" } } From 368be7cd6e41e914ae26cca358e90fc87f7850d8 Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 23 Jan 2021 17:20:31 -0500 Subject: [PATCH 311/481] Adding docs for sst.Api. Closes #45. --- packages/resources/src/Api.ts | 8 +- www/docs/about.md | 3 +- www/docs/constructs/api.md | 222 ++++++++++++++++++++++++++++++++ www/docs/constructs/app.md | 92 +++++++++++++ www/docs/constructs/function.md | 91 +++++++++++++ www/docs/constructs/stack.md | 79 ++++++++++++ www/docs/packages/resources.md | 136 ++----------------- www/docusaurus.config.js | 11 +- www/sidebars.js | 8 ++ 9 files changed, 516 insertions(+), 134 deletions(-) create mode 100644 www/docs/constructs/api.md create mode 100644 www/docs/constructs/app.md create mode 100644 www/docs/constructs/function.md create mode 100644 www/docs/constructs/stack.md diff --git a/packages/resources/src/Api.ts b/packages/resources/src/Api.ts index a9ff4181d4..6bdf894782 100644 --- a/packages/resources/src/Api.ts +++ b/packages/resources/src/Api.ts @@ -7,13 +7,13 @@ import { Stack } from "./Stack"; import * as sstFunction from "./Function"; const allowedMethods = [ - apig.HttpMethod.DELETE, apig.HttpMethod.GET, + apig.HttpMethod.PUT, + apig.HttpMethod.POST, apig.HttpMethod.HEAD, - apig.HttpMethod.OPTIONS, apig.HttpMethod.PATCH, - apig.HttpMethod.POST, - apig.HttpMethod.PUT, + apig.HttpMethod.DELETE, + apig.HttpMethod.OPTIONS, ]; export interface ApiProps { diff --git a/www/docs/about.md b/www/docs/about.md index acfebb2771..5b8a6a9332 100644 --- a/www/docs/about.md +++ b/www/docs/about.md @@ -1,8 +1,7 @@ --- id: about -title: About +title: Serverless Stack Toolkit hide_title: true -sidebar_label: About description: Serverless Stack Toolkit (SST) Docs slug: / --- diff --git a/www/docs/constructs/api.md b/www/docs/constructs/api.md new file mode 100644 index 0000000000..425c71a275 --- /dev/null +++ b/www/docs/constructs/api.md @@ -0,0 +1,222 @@ +--- +id: api +title: "sst.Api" +description: "Docs for the sst.Api construct in the @serverless-stack/resources package" +--- + +The `sst.Api` construct is a higher level CDK construct that makes it easy to create an API. It provides a simple way to define the routes in your API. And allows you to configure the specific Lambda functions if necessary. See the [examples](#examples) for more details. + +Unlike the lower level [`sst.Function`](function.md) construct, the `sst.Api` construct doesn't directly extend a CDK construct, it wraps around a couple of them. + +## Construct Props + +### routes + +_Type_: `{ [key: string]: string }` or [`{ [key: string]: RouteProps }`](#routeprops) + +The routes for this API. Takes an associative array, with the key being the route and the value is either the handler of the Lambda function. + +```js +{ + "GET /notes": "src/list.main", + "GET /notes/{id}": "src/get.main", +} +``` + +Or a the [RouteProps](#routeprops). + +```js +{ + "GET /notes": { + authorizationType: "AWS_IAM", + lambdaProps: { + handler: "src/list.main", + environment: { + TABLE_NAME: "notesTable", + }, + } + }, +} +``` + +### cors? + +_Type_: `boolean`, _defaults to_ `true` + +CORS support for all the endpoints in the API. + +### accessLog? + +_Type_: `boolean`, _defaults to_ `true` + +CloudWatch access logs for the API. + +### httpApiProps? + +_Type_: [`cdk.aws-apigatewayv2.HttpApiProps`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-apigatewayv2.HttpApiProps.html), _defaults to_ `{}` + +Set the props for the [`cdk.aws-apigatewayv2.HttpApi`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-apigatewayv2.HttpApi.html) this construct creates internally. + +### defaultLambdaProps? + +_Type_: [`sst.FunctionProps`](function.md#construct-props), _defaults to_ `{}` + +The default function props to be applied to all the Lambda functions in the API. If the `lambdaProps` are specified per route, the default values are overridden. + +### defaultAuthorizationType? + +_Type_: `string`, _defaults to_ `true` + +The authorization type for all the endpoints in the API. Currently, supports `NONE` or `AWS_IAM`. + +## Properties + +### httpApi + +_Type_: [`cdk.aws-apigatewayv2.HttpApi`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-apigatewayv2.HttpApi.html) + +The internally created `HttpApi` instance. + +### accessLogGroup? + +_Type_: [`cdk.aws-logs.LogGroup`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-logs.LogGroup.html) + +If access logs are enabled, this is the internally created `LogGroup` instance. + +## Methods + +### getFunction + +```ts +getFunction(routeKey: string): sst.Function +``` + +_Parameters_ + +- **routeKey** `string` + +_Returns_ + +- [`sst.Function`](function.md) + +Get the instance of the internally created [`sst.Function`](function.md), for a given route key. Where the `routeKey` is the key used to define a route. For example, `GET /notes`. + +## RouteProps + +### lambdaProps? + +_Type_: [`sst.FunctionProps`](function.md#construct-props), _defaults to_ `{}` + +The function props for this specific route. + +### authorizationType? + +_Type_: `string`, _defaults to_ `NONE` + +The authorization type for the specific route. Curently, supports `NONE` or `AWS_IAM`. + +## Examples + +The `sst.Api` construct is designed to make it easy to get started it with, while allowing for a way to fully configure it as well. Let's look at how, through a couple of examples. + +### Using the minimal config + +```js +const api = new Api(this, "Api", { + routes: { + "GET /notes": "src/list.main", + "POST /notes": "src/create.main", + "GET /notes/{id}": "src/get.main", + "PUT /notes/{id}": "src/update.main", + "DELETE /notes/{id}": "src/delete.main", + }, +}); +``` + +Note that, the route key can have extra spaces in between, they are just ignored. + +### Specifying function props for all the routes + +You can extend the minimal config, to set some function props and have them apply to all the routes. + +```js +const api = new Api(this, "Api", { + defaultLambdaProps: { + srcPath: "src/", + environment: { tableName: table.tableName }, + initialPolicy: [ + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: [ + "dynamodb:Scan", + "dynamodb:Query", + "dynamodb:GetItem", + "dynamodb:PutItem", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem", + "dynamodb:DescribeTable", + ], + resources: [table.tableArn], + }), + ], + }, + defaultAuthorizationType: "AWS_IAM", + routes: { + "GET /notes": "list.main", + "POST /notes": "create.main", + }, +}); +``` + +### Using the full config + +Finally, if you wanted to configure each Lambda function separately, you can pass in the [`RouteProps`](#routeprops). + +```js +const api = new Api(this, "Api", { + routes: { + "GET /notes": { + authorizationType: "AWS_IAM", + lambdaProps: { + srcPath: "src/", + handler: "list.main", + environment: { tableName: table.tableName }, + initialPolicy: [ + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: [ + "dynamodb:Scan", + "dynamodb:Query", + "dynamodb:GetItem", + "dynamodb:PutItem", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem", + "dynamodb:DescribeTable", + ], + resources: [table.tableArn], + }), + ], + }, + }, + }, +}); +``` + +Note that, you can set the `defaultLambdaProps` while using the `lambdaProps` per route. The `lambdaProps` will just override the `defaultLambdaProps`. + +```js +const api = new Api(this, "Api", { + defaultLambdaProps: { + srcPath: "src/", + }, + routes: { + "GET /notes": { + lambdaProps: { + srcPath: "services/functions/", + handler: "list.main", + }, + }, + "POST /notes": "create.main", + }, +}); +``` diff --git a/www/docs/constructs/app.md b/www/docs/constructs/app.md new file mode 100644 index 0000000000..6b20ce2652 --- /dev/null +++ b/www/docs/constructs/app.md @@ -0,0 +1,92 @@ +--- +id: app +title: "sst.App" +description: "Docs for the sst.App construct in the @serverless-stack/resources package" +--- + +The `sst.App` construct extends [`cdk.App`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_core.App.html) and is used internally by SST to: + +- Automatically prefix stack names with the stage and app name +- Deploy the entire app using the same AWS profile and region + +It is made available as the `app` in the `lib/index.js` of your SST app. + +```js +export default function main(app) { + new MySampleStack(app, "sample"); +} +``` + +Since it is initialized internally, the props that are passed to `sst.App` cannot be changed. + +## Properties + +The following properties are made available in addition to the properties of [`cdk.App`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_core.App.html#properties). + +### name + +_Type_: `string` + +The name of the app. This comes from the `name` in your `sst.json`. + +### stage + +_Type_: `string` + +The stage the app is being deployed to. If this is not specified as the `--stage` option in the CLI, it'll default to the `stage` in your `sst.json`. + +### region + +_Type_: `string` + +The region the app is being deployed to. If this is not specified as the `--region` option in the CLI, it'll default to the `region` in your `sst.json`. + +## Methods + +### logicalPrefixedName + +```ts +logicalPrefixedName(logicalName: string): string +``` + +_Parameters_ + +- **logicalName** `string` + +_Returns_ + +- `string` + +Use this method to prefix resource names in your stacks to make sure they don't thrash when deployed to different stages in the same AWS account. This method will prefix a given resource name with the stage and app name. Using the format `${stage}-${name}-${logicalName}`. + +## Examples + +### Accessing app properties + +The above properties can be accessed in the `lib/index.js` as: + +```js +app.name; +app.stage; +app.region; +``` + +And in your [`sst.Stack`](constructs/stack.md) as: + +```js +this.node.root.name; +this.node.root.stage; +this.node.root.region; +``` + +### Prefixing resource names + +You can optionally prefix resource names to make sure they don't thrash when deployed to different stages in the same AWS account. + +To prefix your resource names in a stack: + +```jsx +this.node.root.logicalPrefixedName("MyResource"); // Returns "dev-my-sst-app-MyResource" +``` + +This invokes the `logicalPrefixedName` method in the app your stack is added to. This'll return `dev-my-sst-app-MyResource`, where `dev` is the current stage and `my-sst-app` is the name of the app. diff --git a/www/docs/constructs/function.md b/www/docs/constructs/function.md new file mode 100644 index 0000000000..4362958574 --- /dev/null +++ b/www/docs/constructs/function.md @@ -0,0 +1,91 @@ +--- +id: function +title: "sst.Function" +description: "Docs for the sst.Function construct in the @serverless-stack/resources package" +--- + +A replacement for the [`cdk.lambda.NodejsFunction`](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-nodejs-readme.html) that allows you to [develop your Lambda functions locally](live-lambda-development.md). Supports ES and TypeScript out-of-the-box. + +By default, `AWS_NODEJS_CONNECTION_REUSE_ENABLED` is turned on. Meaning that the Lambda function will automatically reuse TCP connections when working with the AWS SDK. [Read more about this here](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/node-reusing-connections.html). + +Also, [enables AWS X-Ray](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-tracing.html) by default so you can trace your serverless applications. + +## Construct Props + +Takes the following construct props in addition to the [`cdk.lambda.FunctionOptions`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.FunctionOptions.html). + +### handler + +_Type_: `string` + +Path to the entry point and handler function. Uses the format, `/path/to/file.function`. Where the first part is the path to the file, followed by the name of the function that's exported in that file. + +For example, if your handler file is in `src/lambda.js` and it exported a function called `main`. The `handler` would be `src/lambda.main`. + +First checks for a `.ts` file and then for a `.js` file. + +If the [`srcPath`](#srcpath) is set, then the path to the `handler` is relative to it. So if the `srcPath` is set to `src`. Then `lambda.main` as the `handler` would mean that the file is in `src/lambda.js` (or `.ts`). + +### bundle? + +_Type_: `boolean`, _defaults to_ `true` + +Bundles your Lambda functions with [esbuild](https://esbuild.github.io). Turn this off if you have npm packages that cannot be bundled. + +### srcPath? + +_Type_: `string`, _defaults to the project root_ + +The source directory where the handler file is located. If the `bundle` option is turned off, SST zips up the entire `srcPath` directory and uses it as the Lambda function package. This doesn't need to be set if `bundle` is turned on. + +### runtime? + +_Type_: [`cdk.lambda.Runtime`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.Runtime.html), _defaults to_ `cdk.lambda.Runtime.NODEJS_12_X` + +The runtime environment. Only runtimes of the Node.js family are supported. + +### tracing? + +_Type_: [`cdk.lambda.Tracing`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.Tracing.html), _defaults to_ `cdk.lambda.Tracing.ACTIVE` + +Turns on [AWS X-RAY for the Lambda function](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-tracing.html), to enable tracing. + +## Properties + +Refer to the properties made available by [`cdk.lambda.Function`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.Function.html#properties). + +## Examples + +### Creating a Function + +```js +const fun = new sst.Function(this, "MySnsLambda", { + handler: "src/sns/index.handler", +}); +``` + +### Disabling bundling + +```js +const fun = new sst.Function(this, "MySnsLambda", { + bundle: false, + srcPath: "src/", + handler: "sns/index.handler", +}); +``` + +In this case, SST will zip the entire `src/` directory for the Lambda function. + +### Setting additional props + +Use the [`cdk.lambda.FunctionOptions`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.FunctionOptions.html) to set additional props. + +```js +const fun = new sst.Function(this, "MyApiLambda", { + handler: "src/api.main", + timeout: cdk.Duration.seconds(10), + environment: { + TABLE_NAME: "notes", + }, +}); +``` diff --git a/www/docs/constructs/stack.md b/www/docs/constructs/stack.md new file mode 100644 index 0000000000..ec2eddc402 --- /dev/null +++ b/www/docs/constructs/stack.md @@ -0,0 +1,79 @@ +--- +id: stack +title: "sst.Stack" +description: "Docs for the sst.Stack construct in the @serverless-stack/resources package" +--- + +The `sst.Stack` construct extends [`cdk.Stack`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_core.Stack.html). It automatically prefixes the stack names with the stage and app name to ensure that they can be deployed to multiple regions in the same AWS account. It also ensure that the stack uses the same AWS profile and region as the app. + +## Examples + +### Creating a new stack + +Create a new stack by adding this in `lib/MyStack.js`. + +```js +import * as sst from "@serverless-stack/resources"; + +export default class MyStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + // Define your stack + } +} +``` + +### Adding to an app + +Add it to your app in `lib/index.js`. + +```js +import MyStack from "./MyStack"; + +export default function main(app) { + new MyStack(app, "my-stack"); + + // Add more stacks +} +``` + +Here `app` is an instance of [`sst.App`](constructs/app.md). + +Note that, setting the env for an individual stack is not allowed. + +```js +new MyStack(app, "my-stack", { env: { account: "1234", region: "us-east-1" } }); +``` + +It will throw this error. + +``` +Error: Do not directly set the environment for a stack +``` + +This is by design. The stacks in SST are meant to be re-deployed for multiple stages (like Serverless Framework). And so they depend on the region and AWS profile that's passed in through the CLI. If a stack is hardcoded to be deployed to a specific account or region, it can break your deployment pipeline. + +### Accessing app properties + +The stage, region, and app name can be accessed through the app object. In your stacks (for example, `lib/MyStack.js`) you can use. + +```js +this.node.root.name; +this.node.root.stage; +this.node.root.region; +``` + +You can use this to conditionally add stacks or resources to your app. + +### Prefixing resource names + +You can optionally prefix resource names to make sure they don't thrash when deployed to different stages in the same AWS account. + +You can do so in your stacks. + +```js +this.node.root.logicalPrefixedName("MyResource"); // Returns "dev-my-sst-app-MyResource" +``` + +This invokes the `logicalPrefixedName` method in [`sst.App`](constructs/app.md) that your stack is added to. This'll return `dev-my-sst-app-MyResource`, where `dev` is the current stage and `my-sst-app` is the name of the app. diff --git a/www/docs/packages/resources.md b/www/docs/packages/resources.md index 30e9b5349c..c679a1971f 100644 --- a/www/docs/packages/resources.md +++ b/www/docs/packages/resources.md @@ -4,132 +4,24 @@ title: "@serverless-stack/resources" description: "Docs for the @serverless-stack/resources package" --- -The `@serverless-stack/resources` package provides a couple of simple AWS CDK Constructs: +The `@serverless-stack/resources` package provides the CDK constructs necessary to build an SST app. -- `sst.App` (used internally) -- `sst.Stack` -- `sst.Function` +## Installation -## sst.Stack +This package is usually installed together with [`@serverless-stack/cli`](cli.md). -The `sst.Stack` and `sst.App` constructs allow you to: - -- Automatically prefix stack names with the stage -- Optionally prefix resource names with the stage -- Deploy the entire app using the same AWS profile and region - -### Creating a new stack - -Create a new stack by adding this in `lib/MyStack.js`. - -```jsx -import * as sst from "@serverless-stack/resources"; - -export default class MyStack extends sst.Stack { - constructor(scope, id, props) { - super(scope, id, props); - - // Define your stack - } -} -``` - -Here `sst.Stack` is a simple extension of `cdk.Stack` that prefixes the stack name with the stage and enforces using the global region and AWS profile. - -### Adding to an app - -Add it to your app in `lib/index.js`. - -```jsx -import MyStack from "./MyStack"; - -export default function main(app) { - new MyStack(app, "my-stack"); - - // Add more stacks -} +```bash +# With npm +npm install @serverless-stack/cli @serverless-stack/resources --save-exact +# Or with Yarn +yarn add @serverless-stack/cli @serverless-stack/resources --exact ``` -Here `app` is an instance of `sst.App`. It's a simple extension of `cdk.App`. - -Note that, setting the env for an individual stack is not allowed. - -```jsx -new MyStack(app, "my-stack", { env: { account: "1234", region: "us-east-1" } }); -``` - -It will throw this error. - -``` -Error: Do not directly set the environment for a stack -``` - -This is by design. The stacks in SST are meant to be re-deployed for multiple stages (like Serverless Framework). And so they depend on the region and AWS profile that's passed in through the CLI. If a stack is hardcoded to be deployed to a specific account or region, it can break your deployment pipeline. - -### Accessing app info - -The stage, region, and app name can be accessed through the app object. - -So in the `lib/index.js` you can access it using. - -```js -app.stage; -app.region; -app.name; -``` - -And in your stack classes (for example, `lib/MyStack.js`) you can use. - -```js -this.node.root.stage; -this.node.root.region; -this.node.root.name; -``` - -You can use this to conditionally add stacks or resources to your app. - -### Prefixing resource names - -You can optionally prefix resource names to make sure they don't thrash when deployed to different stages in the same AWS account. - -You can do so in your stacks. - -```jsx -this.node.root.logicalPrefixedName("MyResource"); // Returns "dev-my-sst-app-MyResource" -``` - -This invokes the `logicalPrefixedName` method in `sst.App` that your stack is added to. This'll return `dev-my-sst-app-MyResource`, where `dev` is the current stage and `my-sst-app` is the name of the app. - -## sst.Function - -A replacement for the [`cdk.lambda.NodejsFunction`](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-nodejs-readme.html) that allows you to develop your Lambda functions locally while using [`sst start`](packages/cli.md#start). Supports ES and TypeScript out-of-the-box. - -Takes the following props in addition to the [`cdk.lambda.FunctionOptions`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.FunctionOptions.html). - -By default, `AWS_NODEJS_CONNECTION_REUSE_ENABLED` is turned on. Meaning that the Lambda function will automatically reuse TCP connections when working with the AWS SDK. [Read more about this here](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/node-reusing-connections.html). - -Also, [enables AWS X-Ray](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-tracing.html) by default so you can trace your serverless applications. - -### `handler` - -Path to the entry point and handler function. Of the format `/path/to/file.function`. First checks for `.ts` file and then for a `.js` file. - -If the [`srcPath`](#srcpath) is set, then the path to the `handler` is relative to it. - -### `bundle` - -Bundles your Lambda functions with [esbuild](https://esbuild.github.io). Turn this off if you have NPM packages that cannot be bundled. - -Defaults to `true`. - -### `srcPath` - -The source directory where the handler file is located. If the `bundle` option is turned off, SST zips up the entire `srcPath` directory and uses it as the Lambda function package. - -Defaults to `""`, the project root. - -### `runtime` +Note that, the version of these packages should be kept in sync. -The runtime environment. Only runtimes of the Node.js family are supported. +## Constructs -Defaults to `lambda.NODEJS_12_X`. +- [`sst.App`](../constructs/app.md) +- [`sst.Api`](../constructs/api.md) +- [`sst.Stack`](../constructs/stack.md) +- [`sst.Function`](../constructs/function.md) diff --git a/www/docusaurus.config.js b/www/docusaurus.config.js index b68fb200ad..727022bb23 100644 --- a/www/docusaurus.config.js +++ b/www/docusaurus.config.js @@ -17,6 +17,9 @@ module.exports = { sidebarCollapsible: false, image: "img/og-image.png", // used for meta tag, in particular og:image and twitter:image metaImage: "img/og-image.png", + googleAnalytics: { + trackingID: "UA-3536629-11", + }, navbar: { title: "", logo: { @@ -52,12 +55,8 @@ module.exports = { to: "installation", }, { - label: "Working Locally", - to: "working-locally", - }, - { - label: "@serverless-stack/cli", - to: "packages/cli", + label: "Live Lambda Development", + to: "live-lambda-development", }, { label: "@serverless-stack/resources", diff --git a/www/sidebars.js b/www/sidebars.js index 8430decb96..b21b3d41dd 100644 --- a/www/sidebars.js +++ b/www/sidebars.js @@ -17,5 +17,13 @@ module.exports = { "packages/resources", ], }, + { + Constructs: [ + "constructs/api", + "constructs/app", + "constructs/function", + "constructs/stack", + ], + }, ], }; From 185338db128b111c10845091d36e93fb5dc3f12e Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 23 Jan 2021 17:25:25 -0500 Subject: [PATCH 312/481] Fixing tests --- packages/resources/test/Api.test.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/resources/test/Api.test.js b/packages/resources/test/Api.test.js index a0ab391643..877d88191b 100644 --- a/packages/resources/test/Api.test.js +++ b/packages/resources/test/Api.test.js @@ -25,7 +25,7 @@ test("api-cors-default", async () => { }); expect(httpApi.node.defaultChild.corsConfiguration).toMatchObject({ allowHeaders: ["*"], - allowMethods: ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"], + allowMethods: ["GET", "PUT", "POST", "HEAD", "PATCH", "DELETE", "OPTIONS"], allowOrigins: ["*"], }); }); @@ -41,7 +41,7 @@ test("api-cors-true", async () => { }); expect(httpApi.node.defaultChild.corsConfiguration).toMatchObject({ allowHeaders: ["*"], - allowMethods: ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"], + allowMethods: ["GET", "PUT", "POST", "HEAD", "PATCH", "DELETE", "OPTIONS"], allowOrigins: ["*"], }); }); @@ -337,7 +337,7 @@ test("api-get-function", async () => { "GET /": "test/lambda.handler", }, }); - const lambda = ret.getFunction('GET /'); + const lambda = ret.getFunction("GET /"); expect(lambda).toBeDefined(); }); @@ -349,7 +349,6 @@ test("api-get-function-undefined", async () => { "GET /": "test/lambda.handler", }, }); - const lambda = ret.getFunction('GET /path'); + const lambda = ret.getFunction("GET /path"); expect(lambda).toBeUndefined(); }); - From fe2758df6745dac206034a33d1c0644d78956e90 Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 23 Jan 2021 17:43:57 -0500 Subject: [PATCH 313/481] Closes #29 --- packages/cli/assets/lambda-invoke/bootstrap.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/cli/assets/lambda-invoke/bootstrap.js b/packages/cli/assets/lambda-invoke/bootstrap.js index 4f4df0b4c9..29738e10df 100644 --- a/packages/cli/assets/lambda-invoke/bootstrap.js +++ b/packages/cli/assets/lambda-invoke/bootstrap.js @@ -59,14 +59,16 @@ function getHandler() { const app = require(path.resolve(modulePath)); const userHandler = app[handlerName]; + // Converts module path to the user's path + const origHandler = + modulePath.replace(".build/", "").replace(/\.[tj]s/, "") + + `.${handlerName}`; if (userHandler == null) { - throw new Error( - `Handler '${handlerName}' missing on module '${modulePath}'` - ); + throw new Error(`Handler "${handlerName}" missing in "${origHandler}"`); } else if (typeof userHandler !== "function") { throw new Error( - `Handler '${handlerName}' from '${modulePath}' is not a function` + `Handler "${handlerName}" in "${origHandler}" is not a function` ); } From 33c1ff04126d4ba5e51031ef92423ecc309aab44 Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 23 Jan 2021 19:43:57 -0500 Subject: [PATCH 314/481] Closes #28 --- www/docs/constructs/app.md | 20 -------------------- www/docs/constructs/stack.md | 8 ++++++++ 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/www/docs/constructs/app.md b/www/docs/constructs/app.md index 6b20ce2652..fbad8866fe 100644 --- a/www/docs/constructs/app.md +++ b/www/docs/constructs/app.md @@ -70,23 +70,3 @@ app.name; app.stage; app.region; ``` - -And in your [`sst.Stack`](constructs/stack.md) as: - -```js -this.node.root.name; -this.node.root.stage; -this.node.root.region; -``` - -### Prefixing resource names - -You can optionally prefix resource names to make sure they don't thrash when deployed to different stages in the same AWS account. - -To prefix your resource names in a stack: - -```jsx -this.node.root.logicalPrefixedName("MyResource"); // Returns "dev-my-sst-app-MyResource" -``` - -This invokes the `logicalPrefixedName` method in the app your stack is added to. This'll return `dev-my-sst-app-MyResource`, where `dev` is the current stage and `my-sst-app` is the name of the app. diff --git a/www/docs/constructs/stack.md b/www/docs/constructs/stack.md index ec2eddc402..ee1e423f31 100644 --- a/www/docs/constructs/stack.md +++ b/www/docs/constructs/stack.md @@ -77,3 +77,11 @@ this.node.root.logicalPrefixedName("MyResource"); // Returns "dev-my-sst-app-MyR ``` This invokes the `logicalPrefixedName` method in [`sst.App`](constructs/app.md) that your stack is added to. This'll return `dev-my-sst-app-MyResource`, where `dev` is the current stage and `my-sst-app` is the name of the app. + +### Accessing AWS account info + +To access the AWS account and region your app is being deployed to, use the following in your `sst.Stack` instances. + +```js +const { account, region } = sst.Stack.of(this); +``` From 36aa91f6d31f16b06cd65890daee2a731c863dd8 Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 23 Jan 2021 19:55:07 -0500 Subject: [PATCH 315/481] Closes #31 --- www/docs/packages/cli.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/www/docs/packages/cli.md b/www/docs/packages/cli.md index 3aade78f32..cb4b167b2f 100644 --- a/www/docs/packages/cli.md +++ b/www/docs/packages/cli.md @@ -48,7 +48,18 @@ This means that for any new requests, the local version of your Lambdas will be Note that all this is deployed to your AWS account. There are no 3rd party services involved and your data never leaves your account. And since the WebSocket API is completely serverless, it's basically free for most use cases. -`sst start` also starts up a watcher to transpile (using [esbuild](https://esbuild.github.io)), lint (with [ESLint](http://eslint.org)), and type check (using [TypeScript](https://www.typescriptlang.org)) your Lambda functions. So you can use ES or TypeScript directly. +#### Build process + +`sst start` also starts up a watcher to transpile your Lambda functions. When a change is detected, it does the following: + +- Transpiles your ES or TS functions using [esbuild](https://esbuild.github.io). +- If a request comes in while the functions are being transpiled, it blocks them until the process is complete. +- Once transpiled, it'll respond to any blocked requests. +- Then get the list of files that've been edited/added as detected by esbuild. +- It'll run [ESLint](https://eslint.org) on these files in a separate thread. +- And if there are any TS files that've been affected, it'll type check them using [TypeScript](https://www.typescriptlang.org). This is also done in a separate thread. + +Thanks to esbuild and this build process, the changes are reflected as fast as possible. And by blocking the incoming requests, you can be sure that the most recent changes are reflected. Also, running the lint and type checking processes in separate threads, makes sure that it doesn't interfere with the main build process. ### `build` From 109d16d7eb2726d43568da3fe943f8fb9262048f Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 23 Jan 2021 21:02:28 -0500 Subject: [PATCH 316/481] Renaming lambdaProps to functionProps --- packages/cli/test/start-base/lib/index.js | 2 +- packages/cli/test/start-guide/lib/ApiStack.js | 2 +- packages/resources/src/Api.ts | 18 +++++++++--------- packages/resources/test/Api.test.js | 12 ++++++------ 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/cli/test/start-base/lib/index.js b/packages/cli/test/start-base/lib/index.js index 08f5628d30..0a8b859576 100644 --- a/packages/cli/test/start-base/lib/index.js +++ b/packages/cli/test/start-base/lib/index.js @@ -22,7 +22,7 @@ class MySampleStack extends sst.Stack { // Create the HTTP API const api = new sst.Api(this, "Api", { - defaultLambdaProps: { + defaultFunctionProps: { srcPath: "src/api", environment: { TOPIC_ARN: topic.topicArn, diff --git a/packages/cli/test/start-guide/lib/ApiStack.js b/packages/cli/test/start-guide/lib/ApiStack.js index a06a012afa..31e6fb1c5c 100644 --- a/packages/cli/test/start-guide/lib/ApiStack.js +++ b/packages/cli/test/start-guide/lib/ApiStack.js @@ -22,7 +22,7 @@ export default class ApiStack extends sst.Stack { "DELETE /notes/{id}": "delete.main", }, defaultAuthorizationType: 'AWS_IAM', - defaultLambdaProps: { + defaultFunctionProps: { srcPath: 'services/notes', environment: { tableName }, initialPolicy: [ new iam.PolicyStatement({ diff --git a/packages/resources/src/Api.ts b/packages/resources/src/Api.ts index 6bdf894782..2b2747ec15 100644 --- a/packages/resources/src/Api.ts +++ b/packages/resources/src/Api.ts @@ -46,7 +46,7 @@ export interface ApiProps { /** * Default Lambda props for routes. */ - readonly defaultLambdaProps?: sstFunction.FunctionProps; + readonly defaultFunctionProps?: sstFunction.FunctionProps; /** * Default HTTP Api props. @@ -71,7 +71,7 @@ export interface RouteProps { * * @default - Defaults to {} */ - readonly lambdaProps?: sstFunction.FunctionProps; + readonly functionProps?: sstFunction.FunctionProps; } export class Api extends cdk.Construct { @@ -99,7 +99,7 @@ export class Api extends cdk.Construct { accessLog, routes, defaultAuthorizationType, - defaultLambdaProps, + defaultFunctionProps, // Full functionality props httpApiProps, } = props; @@ -199,7 +199,7 @@ export class Api extends cdk.Construct { routeKeys.forEach((routeKey: string) => { let routeProps = routes[routeKey]; if (typeof routeProps === "string") { - routeProps = { lambdaProps: { handler: routeProps } }; + routeProps = { functionProps: { handler: routeProps } }; } // Get path and method @@ -228,11 +228,11 @@ export class Api extends cdk.Construct { } // Get Lambda props - const lambdaProps = { - ...(defaultLambdaProps || {}), - ...routeProps.lambdaProps, + const functionProps = { + ...(defaultFunctionProps || {}), + ...routeProps.functionProps, } as sstFunction.FunctionProps; - if (!lambdaProps.handler) { + if (!functionProps.handler) { throw new Error(`No handler defined for "${routeKey}"`); } @@ -240,7 +240,7 @@ export class Api extends cdk.Construct { const lambda = new sstFunction.Function( this, `Lambda_${methodStr}_${path}`, - lambdaProps + functionProps ); const route = new apig.HttpRoute(this, `Route_${methodStr}_${path}`, { httpApi: this.httpApi, diff --git a/packages/resources/test/Api.test.js b/packages/resources/test/Api.test.js index 877d88191b..77099cd4a6 100644 --- a/packages/resources/test/Api.test.js +++ b/packages/resources/test/Api.test.js @@ -190,7 +190,7 @@ test("api-default-lambda-props", async () => { routes: { "GET /": "test/lambda.handler", }, - defaultLambdaProps: { + defaultFunctionProps: { runtime: lambda.Runtime.NODEJS_8_10, }, }); @@ -261,7 +261,7 @@ test("api-route-authorization-type-invalid", async () => { new sst.Api(stack, "Api", { routes: { "GET /": { - lambdaProps: { + functionProps: { handler: "test/lambda.handler", }, authorizationType: "ABC", @@ -280,7 +280,7 @@ test("api-route-authorization-type-override-by-default", async () => { defaultAuthorizationType: "AWS_IAM", routes: { "GET /": { - lambdaProps: { + functionProps: { handler: "test/lambda.handler", }, authorizationType: "NONE", @@ -300,7 +300,7 @@ test("api-route-handler-undefined", async () => { new sst.Api(stack, "Api", { routes: { "GET /": { - lambdaProps: {}, + functionProps: {}, }, }, }); @@ -311,12 +311,12 @@ test("api-route-handler-override-by-default", async () => { const app = new sst.App(); const stack = new sst.Stack(app, "stack"); new sst.Api(stack, "Api", { - defaultLambdaProps: { + defaultFunctionProps: { runtime: lambda.Runtime.NODEJS_8_10, }, routes: { "GET /": { - lambdaProps: { + functionProps: { handler: "test/lambda.handler", runtime: lambda.Runtime.NODEJS_10_X, }, From 27bdffe8c7f92ffb3e422580d8ed4b26d7837678 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 25 Jan 2021 23:11:15 -0500 Subject: [PATCH 317/481] Prefix construct interface with construct type --- packages/resources/src/Api.ts | 18 +- packages/resources/src/App.ts | 18 +- packages/resources/src/Function.ts | 6 +- .../test/{Api.test.js => Api.test.ts} | 174 +++++++++--------- packages/resources/test/App.test.ts | 11 ++ packages/resources/test/Function.test.js | 22 --- packages/resources/test/Function.test.ts | 39 ++++ 7 files changed, 162 insertions(+), 126 deletions(-) rename packages/resources/test/{Api.test.js => Api.test.ts} (69%) create mode 100644 packages/resources/test/App.test.ts delete mode 100644 packages/resources/test/Function.test.js create mode 100644 packages/resources/test/Function.test.ts diff --git a/packages/resources/src/Api.ts b/packages/resources/src/Api.ts index 2b2747ec15..88408b105a 100644 --- a/packages/resources/src/Api.ts +++ b/packages/resources/src/Api.ts @@ -4,7 +4,7 @@ import * as apig from "@aws-cdk/aws-apigatewayv2"; import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; import { Stack } from "./Stack"; -import * as sstFunction from "./Function"; +import { Function as Func, FunctionProps } from "./Function"; const allowedMethods = [ apig.HttpMethod.GET, @@ -20,7 +20,7 @@ export interface ApiProps { /** * Path to the entry point of the function. A .js or .ts file. */ - readonly routes: { [key: string]: string | RouteProps }; + readonly routes: { [key: string]: string | ApiRouteProps }; /** * CORS configuration. @@ -46,7 +46,7 @@ export interface ApiProps { /** * Default Lambda props for routes. */ - readonly defaultFunctionProps?: sstFunction.FunctionProps; + readonly defaultFunctionProps?: FunctionProps; /** * Default HTTP Api props. @@ -57,7 +57,7 @@ export interface ApiProps { /** * Props for API route. */ -export interface RouteProps { +export interface ApiRouteProps { /** * Route authorization type * @@ -71,7 +71,7 @@ export interface RouteProps { * * @default - Defaults to {} */ - readonly functionProps?: sstFunction.FunctionProps; + readonly functionProps?: FunctionProps; } export class Api extends cdk.Construct { @@ -88,7 +88,7 @@ export class Api extends cdk.Construct { /** * Functions indexed by route. */ - private readonly functions: { [key: string]: sstFunction.Function }; + private readonly functions: { [key: string]: Func }; constructor(scope: cdk.Construct, id: string, props: ApiProps) { super(scope, id); @@ -231,13 +231,13 @@ export class Api extends cdk.Construct { const functionProps = { ...(defaultFunctionProps || {}), ...routeProps.functionProps, - } as sstFunction.FunctionProps; + } as FunctionProps; if (!functionProps.handler) { throw new Error(`No handler defined for "${routeKey}"`); } // Create route - const lambda = new sstFunction.Function( + const lambda = new Func( this, `Lambda_${methodStr}_${path}`, functionProps @@ -262,7 +262,7 @@ export class Api extends cdk.Construct { }); } - getFunction(routeKey: string): sstFunction.Function { + getFunction(routeKey: string): Func { return this.functions[routeKey]; } } diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 573ec738be..5580fac24b 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -5,7 +5,7 @@ import * as spawn from "cross-spawn"; import * as cdk from "@aws-cdk/core"; import * as cxapi from "@aws-cdk/cx-api"; import { execSync } from "child_process"; -import { HandlerProps } from "./Function"; +import { FunctionHandlerProps } from "./Function"; import { getEsbuildMetafileName } from "./util/builder"; const appPath = process.cwd(); @@ -34,10 +34,12 @@ function exitWithMessage(message: string) { process.exit(1); } +export type DeployProps = AppDeployProps; + /** * Deploy props for apps. */ -export interface DeployProps { +export interface AppDeployProps { /** * The app name, used to prefix stacks. * @@ -71,7 +73,9 @@ export interface DeployProps { * * @default - Defaults to undefined */ - readonly synthCallback?: (lambdaHandlers: Array) => void; + readonly synthCallback?: ( + lambdaHandlers: Array + ) => void; } export type AppProps = cdk.AppProps; @@ -111,15 +115,15 @@ export class App extends cdk.App { * The callback after synth completes. */ private readonly synthCallback?: ( - lambdaHandlers: Array + lambdaHandlers: Array ) => void; /** * A list of Lambda functions in the app */ - private readonly lambdaHandlers: Array = []; + private readonly lambdaHandlers: Array = []; - constructor(deployProps: DeployProps = {}, props: AppProps = {}) { + constructor(deployProps: AppDeployProps = {}, props: AppProps = {}) { super(props); this.stage = deployProps.stage || "dev"; @@ -166,7 +170,7 @@ export class App extends cdk.App { return cloudAssembly; } - registerLambdaHandler(handler: HandlerProps): void { + registerLambdaHandler(handler: FunctionHandlerProps): void { this.lambdaHandlers.push(handler); } diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index f9816fc9d2..e6299ae635 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -5,6 +5,8 @@ import * as lambda from "@aws-cdk/aws-lambda"; import { App } from "./App"; import { builder } from "./util/builder"; +export type HandlerProps = FunctionHandlerProps; + export interface FunctionProps extends lambda.FunctionOptions { /** * Path to the entry point and handler function. Of the format: @@ -42,7 +44,7 @@ export interface FunctionProps extends lambda.FunctionOptions { /** * Doe props for Lambda function. */ -export interface HandlerProps { +export interface FunctionHandlerProps { /** * Source path */ @@ -124,6 +126,6 @@ export class Function extends lambda.Function { }); // register Lambda function in app - root.registerLambdaHandler({ srcPath, handler } as HandlerProps); + root.registerLambdaHandler({ srcPath, handler } as FunctionHandlerProps); } } diff --git a/packages/resources/test/Api.test.js b/packages/resources/test/Api.test.ts similarity index 69% rename from packages/resources/test/Api.test.js rename to packages/resources/test/Api.test.ts index 77099cd4a6..40613e8a63 100644 --- a/packages/resources/test/Api.test.js +++ b/packages/resources/test/Api.test.ts @@ -1,11 +1,13 @@ -const lambda = require("@aws-cdk/aws-lambda"); -const sst = require("../src"); +/* eslint-disable @typescript-eslint/no-explicit-any*/ + +import * as lambda from "@aws-cdk/aws-lambda"; +import { App, Stack, Api } from "../src"; test("api-cors-redefined", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); + const app = new App(); + const stack = new Stack(app, "stack"); expect(() => { - new sst.Api(stack, "Api", { + new Api(stack, "Api", { cors: true, routes: { "GET /": "test/lambda.handler", @@ -16,9 +18,9 @@ test("api-cors-redefined", async () => { }); test("api-cors-default", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); - const { httpApi } = new sst.Api(stack, "Api", { + const app = new App(); + const stack = new Stack(app, "stack"); + const { httpApi } = new Api(stack, "Api", { routes: { "GET /": "test/lambda.handler", }, @@ -31,9 +33,9 @@ test("api-cors-default", async () => { }); test("api-cors-true", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); - const { httpApi } = new sst.Api(stack, "Api", { + const app = new App(); + const stack = new Stack(app, "stack"); + const { httpApi } = new Api(stack, "Api", { cors: true, routes: { "GET /": "test/lambda.handler", @@ -47,9 +49,9 @@ test("api-cors-true", async () => { }); test("api-cors-false", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); - const { httpApi } = new sst.Api(stack, "Api", { + const app = new App(); + const stack = new Stack(app, "stack"); + const { httpApi } = new Api(stack, "Api", { cors: false, routes: { "GET /": "test/lambda.handler", @@ -59,10 +61,10 @@ test("api-cors-false", async () => { }); test("api-access-log-redefined", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); + const app = new App(); + const stack = new Stack(app, "stack"); expect(() => { - new sst.Api(stack, "Api", { + new Api(stack, "Api", { accessLog: true, routes: { "GET /": "test/lambda.handler", @@ -73,9 +75,9 @@ test("api-access-log-redefined", async () => { }); test("api-access-log-default", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); - const { httpApi, accessLogGroup } = new sst.Api(stack, "Api", { + const app = new App(); + const stack = new Stack(app, "stack"); + const { httpApi, accessLogGroup } = new Api(stack, "Api", { routes: { "GET /": "test/lambda.handler", }, @@ -91,9 +93,9 @@ test("api-access-log-default", async () => { }); test("api-access-log-true", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); - const { httpApi, accessLogGroup } = new sst.Api(stack, "Api", { + const app = new App(); + const stack = new Stack(app, "stack"); + const { httpApi, accessLogGroup } = new Api(stack, "Api", { accessLog: true, routes: { "GET /": "test/lambda.handler", @@ -110,9 +112,9 @@ test("api-access-log-true", async () => { }); test("api-access-log-false", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); - const { httpApi, accessLogGroup } = new sst.Api(stack, "Api", { + const app = new App(); + const stack = new Stack(app, "stack"); + const { httpApi, accessLogGroup } = new Api(stack, "Api", { accessLog: false, routes: { "GET /": "test/lambda.handler", @@ -125,10 +127,10 @@ test("api-access-log-false", async () => { }); test("api-default-authorization-type-invalid", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); + const app = new App(); + const stack = new Stack(app, "stack"); expect(() => { - new sst.Api(stack, "Api", { + new Api(stack, "Api", { routes: { "GET /": "test/lambda.handler", }, @@ -140,53 +142,53 @@ test("api-default-authorization-type-invalid", async () => { }); test("api-default-authorization-type-iam", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); - new sst.Api(stack, "Api", { + const app = new App(); + const stack = new Stack(app, "stack"); + new Api(stack, "Api", { routes: { "GET /": "test/lambda.handler", }, defaultAuthorizationType: "AWS_IAM", }); const route = Object.values(stack._toCloudFormation().Resources).find( - (resource) => resource.Type === "AWS::ApiGatewayV2::Route" - ); + (resource: any) => resource.Type === "AWS::ApiGatewayV2::Route" + ) as any; expect(route.Properties.AuthorizationType).toContain("AWS_IAM"); }); test("api-default-authorization-type-none", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); - new sst.Api(stack, "Api", { + const app = new App(); + const stack = new Stack(app, "stack"); + new Api(stack, "Api", { routes: { "GET /": "test/lambda.handler", }, defaultAuthorizationType: "NONE", }); const route = Object.values(stack._toCloudFormation().Resources).find( - (resource) => resource.Type === "AWS::ApiGatewayV2::Route" - ); + (resource: any) => resource.Type === "AWS::ApiGatewayV2::Route" + ) as any; expect(route.Properties.AuthorizationType).toContain("NONE"); }); test("api-default-authorization-type-default", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); - new sst.Api(stack, "Api", { + const app = new App(); + const stack = new Stack(app, "stack"); + new Api(stack, "Api", { routes: { "GET /": "test/lambda.handler", }, }); const route = Object.values(stack._toCloudFormation().Resources).find( - (resource) => resource.Type === "AWS::ApiGatewayV2::Route" - ); + (resource: any) => resource.Type === "AWS::ApiGatewayV2::Route" + ) as any; expect(route.Properties.AuthorizationType).toContain("NONE"); }); test("api-default-lambda-props", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); - new sst.Api(stack, "Api", { + const app = new App(); + const stack = new Stack(app, "stack"); + new Api(stack, "Api", { routes: { "GET /": "test/lambda.handler", }, @@ -195,34 +197,34 @@ test("api-default-lambda-props", async () => { }, }); const route = Object.values(stack._toCloudFormation().Resources).find( - (resource) => resource.Type === "AWS::Lambda::Function" - ); + (resource: any) => resource.Type === "AWS::Lambda::Function" + ) as any; expect(route.Properties.Runtime).toMatch("nodejs8.10"); }); test("api-routes-undefined", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); + const app = new App(); + const stack = new Stack(app, "stack"); expect(() => { - new sst.Api(stack, "Api", {}); + new Api(stack, "Api", {}); }).toThrow(/Missing "routes" in sst.Api/); }); test("api-routes-empty", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); + const app = new App(); + const stack = new Stack(app, "stack"); expect(() => { - new sst.Api(stack, "Api", { + new Api(stack, "Api", { routes: {}, }); }).toThrow(/At least 1 route is required/); }); test("api-route-invalid", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); + const app = new App(); + const stack = new Stack(app, "stack"); expect(() => { - new sst.Api(stack, "Api", { + new Api(stack, "Api", { routes: { "GET / 1 2 3": "test/lambda.handler", }, @@ -231,10 +233,10 @@ test("api-route-invalid", async () => { }); test("api-route-invalid-method", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); + const app = new App(); + const stack = new Stack(app, "stack"); expect(() => { - new sst.Api(stack, "Api", { + new Api(stack, "Api", { routes: { "ANY /": "test/lambda.handler", }, @@ -243,10 +245,10 @@ test("api-route-invalid-method", async () => { }); test("api-route-invalid-path", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); + const app = new App(); + const stack = new Stack(app, "stack"); expect(() => { - new sst.Api(stack, "Api", { + new Api(stack, "Api", { routes: { "GET ": "test/lambda.handler", }, @@ -255,10 +257,10 @@ test("api-route-invalid-path", async () => { }); test("api-route-authorization-type-invalid", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); + const app = new App(); + const stack = new Stack(app, "stack"); expect(() => { - new sst.Api(stack, "Api", { + new Api(stack, "Api", { routes: { "GET /": { functionProps: { @@ -274,9 +276,9 @@ test("api-route-authorization-type-invalid", async () => { }); test("api-route-authorization-type-override-by-default", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); - new sst.Api(stack, "Api", { + const app = new App(); + const stack = new Stack(app, "stack"); + new Api(stack, "Api", { defaultAuthorizationType: "AWS_IAM", routes: { "GET /": { @@ -288,16 +290,16 @@ test("api-route-authorization-type-override-by-default", async () => { }, }); const route = Object.values(stack._toCloudFormation().Resources).find( - (resource) => resource.Type === "AWS::ApiGatewayV2::Route" - ); + (resource: any) => resource.Type === "AWS::ApiGatewayV2::Route" + ) as any; expect(route.Properties.AuthorizationType).toContain("NONE"); }); test("api-route-handler-undefined", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); + const app = new App(); + const stack = new Stack(app, "stack"); expect(() => { - new sst.Api(stack, "Api", { + new Api(stack, "Api", { routes: { "GET /": { functionProps: {}, @@ -308,9 +310,9 @@ test("api-route-handler-undefined", async () => { }); test("api-route-handler-override-by-default", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); - new sst.Api(stack, "Api", { + const app = new App(); + const stack = new Stack(app, "stack"); + new Api(stack, "Api", { defaultFunctionProps: { runtime: lambda.Runtime.NODEJS_8_10, }, @@ -324,15 +326,15 @@ test("api-route-handler-override-by-default", async () => { }, }); const route = Object.values(stack._toCloudFormation().Resources).find( - (resource) => resource.Type === "AWS::Lambda::Function" - ); + (resource: any) => resource.Type === "AWS::Lambda::Function" + ) as any; expect(route.Properties.Runtime).toMatch("nodejs10.x"); }); test("api-get-function", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); - const ret = new sst.Api(stack, "Api", { + const app = new App(); + const stack = new Stack(app, "stack"); + const ret = new Api(stack, "Api", { routes: { "GET /": "test/lambda.handler", }, @@ -342,9 +344,9 @@ test("api-get-function", async () => { }); test("api-get-function-undefined", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); - const ret = new sst.Api(stack, "Api", { + const app = new App(); + const stack = new Stack(app, "stack"); + const ret = new Api(stack, "Api", { routes: { "GET /": "test/lambda.handler", }, diff --git a/packages/resources/test/App.test.ts b/packages/resources/test/App.test.ts new file mode 100644 index 0000000000..0caca55a96 --- /dev/null +++ b/packages/resources/test/App.test.ts @@ -0,0 +1,11 @@ +import { AppDeployProps, DeployProps } from "../src"; + +test("non-namespaced-props", async () => { + const deployProps = {} as DeployProps; + expect(deployProps).toBeDefined(); +}); + +test("namespaced-props", async () => { + const deployProps = {} as AppDeployProps; + expect(deployProps).toBeDefined(); +}); diff --git a/packages/resources/test/Function.test.js b/packages/resources/test/Function.test.js deleted file mode 100644 index 3db2406cdd..0000000000 --- a/packages/resources/test/Function.test.js +++ /dev/null @@ -1,22 +0,0 @@ -const lambda = require("@aws-cdk/aws-lambda"); -const sst = require("../src"); - -test("function-xray-default", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); - const func = new sst.Function(stack, "Function", { - handler: "test/lambda.handler", - }); - expect(func.node.defaultChild.tracingConfig.mode).toMatch('Active'); -}); - -test("function-xray-disabled", async () => { - const app = new sst.App(); - const stack = new sst.Stack(app, "stack"); - const func = new sst.Function(stack, "Function", { - handler: "test/lambda.handler", - tracing: lambda.Tracing.DISABLED, - }); - expect(func.node.defaultChild.tracingConfig).toBeUndefined(); -}); - diff --git a/packages/resources/test/Function.test.ts b/packages/resources/test/Function.test.ts new file mode 100644 index 0000000000..598c884e5b --- /dev/null +++ b/packages/resources/test/Function.test.ts @@ -0,0 +1,39 @@ +/* eslint-disable @typescript-eslint/no-explicit-any*/ + +import * as lambda from "@aws-cdk/aws-lambda"; +import { + App, + Stack, + Function, + HandlerProps, + FunctionHandlerProps, +} from "../src"; + +test("non-namespaced-props", async () => { + const handlerProps = { srcPath: "a", handler: "b" } as HandlerProps; + expect(handlerProps).toBeDefined(); +}); + +test("namespaced-props", async () => { + const handlerProps = { srcPath: "a", handler: "b" } as FunctionHandlerProps; + expect(handlerProps).toBeDefined(); +}); + +test("function-xray-default", async () => { + const app = new App(); + const stack = new Stack(app, "stack"); + const func = new Function(stack, "Function", { + handler: "test/lambda.handler", + }); + expect((func.node?.defaultChild as any).tracingConfig.mode).toMatch("Active"); +}); + +test("function-xray-disabled", async () => { + const app = new App(); + const stack = new Stack(app, "stack"); + const func = new Function(stack, "Function", { + handler: "test/lambda.handler", + tracing: lambda.Tracing.DISABLED, + }); + expect((func.node?.defaultChild as any).tracingConfig).toBeUndefined(); +}); From e02ecf56dfe4a2d06185c649974eb967b08633cd Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 26 Jan 2021 01:59:56 -0500 Subject: [PATCH 318/481] Fix resources tests --- packages/resources/src/Api.ts | 4 ++- packages/resources/src/Function.ts | 2 +- packages/resources/test/Api.test.ts | 45 +++++++++++++++--------- packages/resources/test/Function.test.ts | 8 +++++ packages/resources/test/helpers.ts | 4 +++ 5 files changed, 45 insertions(+), 18 deletions(-) create mode 100644 packages/resources/test/helpers.ts diff --git a/packages/resources/src/Api.ts b/packages/resources/src/Api.ts index 88408b105a..52c896eaef 100644 --- a/packages/resources/src/Api.ts +++ b/packages/resources/src/Api.ts @@ -4,6 +4,7 @@ import * as apig from "@aws-cdk/aws-apigatewayv2"; import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; import { Stack } from "./Stack"; +import { App } from "./App"; import { Function as Func, FunctionProps } from "./Function"; const allowedMethods = [ @@ -93,6 +94,7 @@ export class Api extends cdk.Construct { constructor(scope: cdk.Construct, id: string, props: ApiProps) { super(scope, id); + const root = scope.node.root as App; const { // Convenience props cors, @@ -131,7 +133,7 @@ export class Api extends cdk.Construct { //////////////////// // Create Api //////////////////// - apiProps.apiName = apiProps.apiName || `${Stack.of(this).stackName}-${id}`; + apiProps.apiName = apiProps.apiName || root.logicalPrefixedName(id); this.httpApi = new apig.HttpApi(this, "Api", apiProps); /////////////////////////// diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index e6299ae635..06762d29c7 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -12,7 +12,7 @@ export interface FunctionProps extends lambda.FunctionOptions { * Path to the entry point and handler function. Of the format: * `/path/to/file.function`. */ - readonly handler: string; + readonly handler?: string; /** * The source directory where the entry point is located. The node_modules in this * directory is used to generate the bundle. diff --git a/packages/resources/test/Api.test.ts b/packages/resources/test/Api.test.ts index 40613e8a63..7ded03c3a9 100644 --- a/packages/resources/test/Api.test.ts +++ b/packages/resources/test/Api.test.ts @@ -2,6 +2,18 @@ import * as lambda from "@aws-cdk/aws-lambda"; import { App, Stack, Api } from "../src"; +import { getStackCfResources } from "./helpers"; + +test("api-name", async () => { + const app = new App(); + const stack = new Stack(app, "stack"); + const { httpApi } = new Api(stack, "Api", { + routes: { + "GET /": "test/lambda.handler", + }, + }); + expect((httpApi.node?.defaultChild as any).name).toMatch('dev-my-app-Api'); +}); test("api-cors-redefined", async () => { const app = new App(); @@ -25,7 +37,7 @@ test("api-cors-default", async () => { "GET /": "test/lambda.handler", }, }); - expect(httpApi.node.defaultChild.corsConfiguration).toMatchObject({ + expect((httpApi.node?.defaultChild as any).corsConfiguration).toMatchObject({ allowHeaders: ["*"], allowMethods: ["GET", "PUT", "POST", "HEAD", "PATCH", "DELETE", "OPTIONS"], allowOrigins: ["*"], @@ -41,7 +53,7 @@ test("api-cors-true", async () => { "GET /": "test/lambda.handler", }, }); - expect(httpApi.node.defaultChild.corsConfiguration).toMatchObject({ + expect((httpApi.node?.defaultChild as any).corsConfiguration).toMatchObject({ allowHeaders: ["*"], allowMethods: ["GET", "PUT", "POST", "HEAD", "PATCH", "DELETE", "OPTIONS"], allowOrigins: ["*"], @@ -57,7 +69,7 @@ test("api-cors-false", async () => { "GET /": "test/lambda.handler", }, }); - expect(httpApi.node.defaultChild.corsConfiguration).toBeUndefined(); + expect((httpApi.node?.defaultChild as any).corsConfiguration).toBeUndefined(); }); test("api-access-log-redefined", async () => { @@ -82,13 +94,13 @@ test("api-access-log-default", async () => { "GET /": "test/lambda.handler", }, }); - expect(accessLogGroup.logGroupArn).toContain("TOKEN"); + expect(accessLogGroup?.logGroupArn).toContain("TOKEN"); expect( - httpApi.defaultStage.node.defaultChild.accessLogSettings + (httpApi.defaultStage?.node.defaultChild as any).accessLogSettings ).toMatchObject({ format: '{"path":"$context.path","status":"$context.status","routeKey":"$context.routeKey","protocol":"$context.protocol","requestId":"$context.requestId","ip":"$context.identity.sourceIp","httpMethod":"$context.httpMethod","requestTime":"$context.requestTime","responseLength":"$context.responseLength","responseLatency":"$context.responseLatency","cognitoIdentityId":"$context.identity.cognitoIdentityId"}', - destinationArn: accessLogGroup.logGroupArn, + destinationArn: accessLogGroup?.logGroupArn, }); }); @@ -101,13 +113,13 @@ test("api-access-log-true", async () => { "GET /": "test/lambda.handler", }, }); - expect(accessLogGroup.logGroupArn).toContain("TOKEN"); + expect(accessLogGroup?.logGroupArn).toContain("TOKEN"); expect( - httpApi.defaultStage.node.defaultChild.accessLogSettings + (httpApi.defaultStage?.node.defaultChild as any).accessLogSettings ).toMatchObject({ format: '{"path":"$context.path","status":"$context.status","routeKey":"$context.routeKey","protocol":"$context.protocol","requestId":"$context.requestId","ip":"$context.identity.sourceIp","httpMethod":"$context.httpMethod","requestTime":"$context.requestTime","responseLength":"$context.responseLength","responseLatency":"$context.responseLatency","cognitoIdentityId":"$context.identity.cognitoIdentityId"}', - destinationArn: accessLogGroup.logGroupArn, + destinationArn: accessLogGroup?.logGroupArn, }); }); @@ -122,7 +134,7 @@ test("api-access-log-false", async () => { }); expect(accessLogGroup).toBeUndefined(); expect( - httpApi.defaultStage.node.defaultChild.accessLogSettings + (httpApi.defaultStage?.node.defaultChild as any).accessLogSettings ).toBeUndefined(); }); @@ -150,7 +162,7 @@ test("api-default-authorization-type-iam", async () => { }, defaultAuthorizationType: "AWS_IAM", }); - const route = Object.values(stack._toCloudFormation().Resources).find( + const route = Object.values(getStackCfResources(stack)).find( (resource: any) => resource.Type === "AWS::ApiGatewayV2::Route" ) as any; expect(route.Properties.AuthorizationType).toContain("AWS_IAM"); @@ -165,7 +177,7 @@ test("api-default-authorization-type-none", async () => { }, defaultAuthorizationType: "NONE", }); - const route = Object.values(stack._toCloudFormation().Resources).find( + const route = Object.values(getStackCfResources(stack)).find( (resource: any) => resource.Type === "AWS::ApiGatewayV2::Route" ) as any; expect(route.Properties.AuthorizationType).toContain("NONE"); @@ -179,7 +191,7 @@ test("api-default-authorization-type-default", async () => { "GET /": "test/lambda.handler", }, }); - const route = Object.values(stack._toCloudFormation().Resources).find( + const route = Object.values(getStackCfResources(stack)).find( (resource: any) => resource.Type === "AWS::ApiGatewayV2::Route" ) as any; expect(route.Properties.AuthorizationType).toContain("NONE"); @@ -196,7 +208,7 @@ test("api-default-lambda-props", async () => { runtime: lambda.Runtime.NODEJS_8_10, }, }); - const route = Object.values(stack._toCloudFormation().Resources).find( + const route = Object.values(getStackCfResources(stack)).find( (resource: any) => resource.Type === "AWS::Lambda::Function" ) as any; expect(route.Properties.Runtime).toMatch("nodejs8.10"); @@ -206,6 +218,7 @@ test("api-routes-undefined", async () => { const app = new App(); const stack = new Stack(app, "stack"); expect(() => { + // @ts-ignore to by pass required 'routes' check new Api(stack, "Api", {}); }).toThrow(/Missing "routes" in sst.Api/); }); @@ -289,7 +302,7 @@ test("api-route-authorization-type-override-by-default", async () => { }, }, }); - const route = Object.values(stack._toCloudFormation().Resources).find( + const route = Object.values(getStackCfResources(stack)).find( (resource: any) => resource.Type === "AWS::ApiGatewayV2::Route" ) as any; expect(route.Properties.AuthorizationType).toContain("NONE"); @@ -325,7 +338,7 @@ test("api-route-handler-override-by-default", async () => { }, }, }); - const route = Object.values(stack._toCloudFormation().Resources).find( + const route = Object.values(getStackCfResources(stack)).find( (resource: any) => resource.Type === "AWS::Lambda::Function" ) as any; expect(route.Properties.Runtime).toMatch("nodejs10.x"); diff --git a/packages/resources/test/Function.test.ts b/packages/resources/test/Function.test.ts index 598c884e5b..09c2c0d957 100644 --- a/packages/resources/test/Function.test.ts +++ b/packages/resources/test/Function.test.ts @@ -19,6 +19,14 @@ test("namespaced-props", async () => { expect(handlerProps).toBeDefined(); }); +test("function-handler-missing", async () => { + const app = new App(); + const stack = new Stack(app, "stack"); + expect(() => { + new Function(stack, "Function", { }); + }).toThrow(/No handler defined/); +}); + test("function-xray-default", async () => { const app = new App(); const stack = new Stack(app, "stack"); diff --git a/packages/resources/test/helpers.ts b/packages/resources/test/helpers.ts new file mode 100644 index 0000000000..bb08060d1f --- /dev/null +++ b/packages/resources/test/helpers.ts @@ -0,0 +1,4 @@ +export function getStackCfResources(stack: any) { + // @ts-ignore + return stack._toCloudFormation().Resources; +} From ffae633d3b16ff70f6c02848a7e9bbfd50e7ae77 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 26 Jan 2021 02:06:00 -0500 Subject: [PATCH 319/481] Fix resources lint --- packages/resources/src/Api.ts | 1 - packages/resources/test/Api.test.ts | 3 ++- packages/resources/test/Function.test.ts | 3 ++- packages/resources/test/helpers.ts | 7 ++++++- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/resources/src/Api.ts b/packages/resources/src/Api.ts index 52c896eaef..0bb1c4f458 100644 --- a/packages/resources/src/Api.ts +++ b/packages/resources/src/Api.ts @@ -3,7 +3,6 @@ import * as logs from "@aws-cdk/aws-logs"; import * as apig from "@aws-cdk/aws-apigatewayv2"; import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; -import { Stack } from "./Stack"; import { App } from "./App"; import { Function as Func, FunctionProps } from "./Function"; diff --git a/packages/resources/test/Api.test.ts b/packages/resources/test/Api.test.ts index 7ded03c3a9..6d3168f6b9 100644 --- a/packages/resources/test/Api.test.ts +++ b/packages/resources/test/Api.test.ts @@ -1,4 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any*/ +/* eslint-disable @typescript-eslint/ban-ts-comment*/ import * as lambda from "@aws-cdk/aws-lambda"; import { App, Stack, Api } from "../src"; @@ -12,7 +13,7 @@ test("api-name", async () => { "GET /": "test/lambda.handler", }, }); - expect((httpApi.node?.defaultChild as any).name).toMatch('dev-my-app-Api'); + expect((httpApi.node?.defaultChild as any).name).toMatch("dev-my-app-Api"); }); test("api-cors-redefined", async () => { diff --git a/packages/resources/test/Function.test.ts b/packages/resources/test/Function.test.ts index 09c2c0d957..b29d2474ba 100644 --- a/packages/resources/test/Function.test.ts +++ b/packages/resources/test/Function.test.ts @@ -1,4 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any*/ +/* eslint-disable @typescript-eslint/ban-ts-comment*/ import * as lambda from "@aws-cdk/aws-lambda"; import { @@ -23,7 +24,7 @@ test("function-handler-missing", async () => { const app = new App(); const stack = new Stack(app, "stack"); expect(() => { - new Function(stack, "Function", { }); + new Function(stack, "Function", {}); }).toThrow(/No handler defined/); }); diff --git a/packages/resources/test/helpers.ts b/packages/resources/test/helpers.ts index bb08060d1f..bff3908e47 100644 --- a/packages/resources/test/helpers.ts +++ b/packages/resources/test/helpers.ts @@ -1,4 +1,9 @@ -export function getStackCfResources(stack: any) { +/* eslint-disable @typescript-eslint/no-explicit-any*/ +/* eslint-disable @typescript-eslint/ban-ts-comment*/ + +import * as cdk from "@aws-cdk/core"; + +export function getStackCfResources(stack: cdk.Stack): any { // @ts-ignore return stack._toCloudFormation().Resources; } From 3ff58fd113edc0530b03ece8b5c0ba47aba594c9 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 26 Jan 2021 14:11:15 -0500 Subject: [PATCH 320/481] Updating docs --- www/docs/constructs/api.md | 120 ++++++++++++++++------------ www/docs/constructs/app.md | 6 +- www/docs/constructs/function.md | 30 ++++--- www/docs/constructs/stack.md | 32 ++++++-- www/docs/live-lambda-development.md | 4 +- www/docs/packages/resources.md | 32 ++++++-- 6 files changed, 145 insertions(+), 79 deletions(-) diff --git a/www/docs/constructs/api.md b/www/docs/constructs/api.md index 425c71a275..19370c5096 100644 --- a/www/docs/constructs/api.md +++ b/www/docs/constructs/api.md @@ -1,14 +1,62 @@ --- id: api -title: "sst.Api" +title: "Api" description: "Docs for the sst.Api construct in the @serverless-stack/resources package" --- -The `sst.Api` construct is a higher level CDK construct that makes it easy to create an API. It provides a simple way to define the routes in your API. And allows you to configure the specific Lambda functions if necessary. See the [examples](#examples) for more details. +The `Api` construct is a higher level CDK construct that makes it easy to create an API. It provides a simple way to define the routes in your API. And allows you to configure the specific Lambda functions if necessary. See the [examples](#examples) for more details. -Unlike the lower level [`sst.Function`](function.md) construct, the `sst.Api` construct doesn't directly extend a CDK construct, it wraps around a couple of them. +Unlike the lower level [`Function`](function.md) construct, the `Api` construct doesn't directly extend a CDK construct, it wraps around a couple of them. -## Construct Props +## Initializer + +```ts +new Api(scope: Construct, id: string, props: ApiProps) +``` + +_Parameters_ + +- scope [`Construct`](https://docs.aws.amazon.com/cdk/api/latest/docs/constructs.Construct.html) +- id `string` +- props [`ApiProps`](#apiprops) + +## Properties + +An instance of `Api` contains the following properties. + +### httpApi + +_Type_: [`cdk.aws-apigatewayv2.HttpApi`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-apigatewayv2.HttpApi.html) + +The internally created `HttpApi` instance. + +### accessLogGroup? + +_Type_: [`cdk.aws-logs.LogGroup`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-logs.LogGroup.html) + +If access logs are enabled, this is the internally created `LogGroup` instance. + +## Methods + +An instance of `Api` contains the following methods. + +### getFunction + +```ts +getFunction(routeKey: string): Function +``` + +_Parameters_ + +- **routeKey** `string` + +_Returns_ + +- [`Function`](function.md) + +Get the instance of the internally created [`Function`](function.md), for a given route key. Where the `routeKey` is the key used to define a route. For example, `GET /notes`. + +## ApiProps ### routes @@ -29,7 +77,7 @@ Or a the [RouteProps](#routeprops). { "GET /notes": { authorizationType: "AWS_IAM", - lambdaProps: { + functionProps: { handler: "src/list.main", environment: { TABLE_NAME: "notesTable", @@ -57,11 +105,11 @@ _Type_: [`cdk.aws-apigatewayv2.HttpApiProps`](https://docs.aws.amazon.com/cdk/ap Set the props for the [`cdk.aws-apigatewayv2.HttpApi`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-apigatewayv2.HttpApi.html) this construct creates internally. -### defaultLambdaProps? +### defaultFunctionProps? -_Type_: [`sst.FunctionProps`](function.md#construct-props), _defaults to_ `{}` +_Type_: [`FunctionProps`](function.md#funcionprops), _defaults to_ `{}` -The default function props to be applied to all the Lambda functions in the API. If the `lambdaProps` are specified per route, the default values are overridden. +The default function props to be applied to all the Lambda functions in the API. If the `functionProps` are specified per route, the default values are overridden. ### defaultAuthorizationType? @@ -69,43 +117,11 @@ _Type_: `string`, _defaults to_ `true` The authorization type for all the endpoints in the API. Currently, supports `NONE` or `AWS_IAM`. -## Properties - -### httpApi - -_Type_: [`cdk.aws-apigatewayv2.HttpApi`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-apigatewayv2.HttpApi.html) - -The internally created `HttpApi` instance. - -### accessLogGroup? - -_Type_: [`cdk.aws-logs.LogGroup`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-logs.LogGroup.html) - -If access logs are enabled, this is the internally created `LogGroup` instance. - -## Methods - -### getFunction - -```ts -getFunction(routeKey: string): sst.Function -``` - -_Parameters_ - -- **routeKey** `string` - -_Returns_ - -- [`sst.Function`](function.md) - -Get the instance of the internally created [`sst.Function`](function.md), for a given route key. Where the `routeKey` is the key used to define a route. For example, `GET /notes`. - ## RouteProps -### lambdaProps? +### functionProps? -_Type_: [`sst.FunctionProps`](function.md#construct-props), _defaults to_ `{}` +_Type_: [`FunctionProps`](function.md#functionprops), _defaults to_ `{}` The function props for this specific route. @@ -117,12 +133,12 @@ The authorization type for the specific route. Curently, supports `NONE` or `AWS ## Examples -The `sst.Api` construct is designed to make it easy to get started it with, while allowing for a way to fully configure it as well. Let's look at how, through a couple of examples. +The `Api` construct is designed to make it easy to get started it with, while allowing for a way to fully configure it as well. Let's look at how, through a couple of examples. ### Using the minimal config ```js -const api = new Api(this, "Api", { +new Api(this, "Api", { routes: { "GET /notes": "src/list.main", "POST /notes": "src/create.main", @@ -140,8 +156,8 @@ Note that, the route key can have extra spaces in between, they are just ignored You can extend the minimal config, to set some function props and have them apply to all the routes. ```js -const api = new Api(this, "Api", { - defaultLambdaProps: { +new Api(this, "Api", { + defaultFunctionProps: { srcPath: "src/", environment: { tableName: table.tableName }, initialPolicy: [ @@ -173,11 +189,11 @@ const api = new Api(this, "Api", { Finally, if you wanted to configure each Lambda function separately, you can pass in the [`RouteProps`](#routeprops). ```js -const api = new Api(this, "Api", { +new Api(this, "Api", { routes: { "GET /notes": { authorizationType: "AWS_IAM", - lambdaProps: { + functionProps: { srcPath: "src/", handler: "list.main", environment: { tableName: table.tableName }, @@ -202,16 +218,16 @@ const api = new Api(this, "Api", { }); ``` -Note that, you can set the `defaultLambdaProps` while using the `lambdaProps` per route. The `lambdaProps` will just override the `defaultLambdaProps`. +Note that, you can set the `defaultFunctionProps` while using the `functionProps` per route. The `functionProps` will just override the `defaultFunctionProps`. ```js -const api = new Api(this, "Api", { - defaultLambdaProps: { +new Api(this, "Api", { + defaultFunctionProps: { srcPath: "src/", }, routes: { "GET /notes": { - lambdaProps: { + functionProps: { srcPath: "services/functions/", handler: "list.main", }, diff --git a/www/docs/constructs/app.md b/www/docs/constructs/app.md index fbad8866fe..285779664f 100644 --- a/www/docs/constructs/app.md +++ b/www/docs/constructs/app.md @@ -1,10 +1,10 @@ --- id: app -title: "sst.App" +title: "App" description: "Docs for the sst.App construct in the @serverless-stack/resources package" --- -The `sst.App` construct extends [`cdk.App`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_core.App.html) and is used internally by SST to: +The `App` construct extends [`cdk.App`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_core.App.html) and is used internally by SST to: - Automatically prefix stack names with the stage and app name - Deploy the entire app using the same AWS profile and region @@ -17,7 +17,7 @@ export default function main(app) { } ``` -Since it is initialized internally, the props that are passed to `sst.App` cannot be changed. +Since it is initialized internally, the props that are passed to `App` cannot be changed. ## Properties diff --git a/www/docs/constructs/function.md b/www/docs/constructs/function.md index 4362958574..4e89797682 100644 --- a/www/docs/constructs/function.md +++ b/www/docs/constructs/function.md @@ -1,6 +1,6 @@ --- id: function -title: "sst.Function" +title: "Function" description: "Docs for the sst.Function construct in the @serverless-stack/resources package" --- @@ -10,7 +10,23 @@ By default, `AWS_NODEJS_CONNECTION_REUSE_ENABLED` is turned on. Meaning that the Also, [enables AWS X-Ray](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-tracing.html) by default so you can trace your serverless applications. -## Construct Props +## Initializer + +```ts +new Function(scope: Construct, id: string, props: FunctionProps) +``` + +_Parameters_ + +- scope [`Construct`](https://docs.aws.amazon.com/cdk/api/latest/docs/constructs.Construct.html) +- id `string` +- props [`FunctionProps`](#funcionprops) + +## Properties + +Refer to the properties made available by [`cdk.lambda.Function`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.Function.html#properties). + +## FunctionProps Takes the following construct props in addition to the [`cdk.lambda.FunctionOptions`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.FunctionOptions.html). @@ -50,16 +66,12 @@ _Type_: [`cdk.lambda.Tracing`](https://docs.aws.amazon.com/cdk/api/latest/docs/@ Turns on [AWS X-RAY for the Lambda function](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-tracing.html), to enable tracing. -## Properties - -Refer to the properties made available by [`cdk.lambda.Function`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.Function.html#properties). - ## Examples ### Creating a Function ```js -const fun = new sst.Function(this, "MySnsLambda", { +new Function(this, "MySnsLambda", { handler: "src/sns/index.handler", }); ``` @@ -67,7 +79,7 @@ const fun = new sst.Function(this, "MySnsLambda", { ### Disabling bundling ```js -const fun = new sst.Function(this, "MySnsLambda", { +new Function(this, "MySnsLambda", { bundle: false, srcPath: "src/", handler: "sns/index.handler", @@ -81,7 +93,7 @@ In this case, SST will zip the entire `src/` directory for the Lambda function. Use the [`cdk.lambda.FunctionOptions`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.FunctionOptions.html) to set additional props. ```js -const fun = new sst.Function(this, "MyApiLambda", { +new Function(this, "MyApiLambda", { handler: "src/api.main", timeout: cdk.Duration.seconds(10), environment: { diff --git a/www/docs/constructs/stack.md b/www/docs/constructs/stack.md index ee1e423f31..f26d888f4d 100644 --- a/www/docs/constructs/stack.md +++ b/www/docs/constructs/stack.md @@ -1,10 +1,26 @@ --- id: stack -title: "sst.Stack" +title: "Stack" description: "Docs for the sst.Stack construct in the @serverless-stack/resources package" --- -The `sst.Stack` construct extends [`cdk.Stack`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_core.Stack.html). It automatically prefixes the stack names with the stage and app name to ensure that they can be deployed to multiple regions in the same AWS account. It also ensure that the stack uses the same AWS profile and region as the app. +The `Stack` construct extends [`cdk.Stack`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_core.Stack.html). It automatically prefixes the stack names with the stage and app name to ensure that they can be deployed to multiple regions in the same AWS account. It also ensure that the stack uses the same AWS profile and region as the app. + +## Initializer + +```ts +new Stack(scope: Construct, id: string, props: StackProps) +``` + +_Parameters_ + +- scope [`Construct`](https://docs.aws.amazon.com/cdk/api/latest/docs/constructs.Construct.html) +- id `string` +- props [`StackProps`](#stackprops) + +## StackProps + +Extends [`cdk.StackProps`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_core.StackProps.html). ## Examples @@ -13,9 +29,9 @@ The `sst.Stack` construct extends [`cdk.Stack`](https://docs.aws.amazon.com/cdk/ Create a new stack by adding this in `lib/MyStack.js`. ```js -import * as sst from "@serverless-stack/resources"; +import { Stack } from "@serverless-stack/resources"; -export default class MyStack extends sst.Stack { +export default class MyStack extends Stack { constructor(scope, id, props) { super(scope, id, props); @@ -38,7 +54,7 @@ export default function main(app) { } ``` -Here `app` is an instance of [`sst.App`](constructs/app.md). +Here `app` is an instance of [`App`](constructs/app.md). Note that, setting the env for an individual stack is not allowed. @@ -76,12 +92,12 @@ You can do so in your stacks. this.node.root.logicalPrefixedName("MyResource"); // Returns "dev-my-sst-app-MyResource" ``` -This invokes the `logicalPrefixedName` method in [`sst.App`](constructs/app.md) that your stack is added to. This'll return `dev-my-sst-app-MyResource`, where `dev` is the current stage and `my-sst-app` is the name of the app. +This invokes the `logicalPrefixedName` method in [`App`](constructs/app.md) that your stack is added to. This'll return `dev-my-sst-app-MyResource`, where `dev` is the current stage and `my-sst-app` is the name of the app. ### Accessing AWS account info -To access the AWS account and region your app is being deployed to, use the following in your `sst.Stack` instances. +To access the AWS account and region your app is being deployed to, use the following in your `Stack` instances. ```js -const { account, region } = sst.Stack.of(this); +const { account, region } = Stack.of(this); ``` diff --git a/www/docs/live-lambda-development.md b/www/docs/live-lambda-development.md index 1e1434157c..c3b924c6f9 100644 --- a/www/docs/live-lambda-development.md +++ b/www/docs/live-lambda-development.md @@ -15,11 +15,11 @@ Working on Lambda functions locally can be painful. You have to either: 1. Locally mock all the services that your Lambda function uses -Like API Gateway, SNS, SQS, etc. This is hard to do. If you are using a tool that mocks a specific service (like API Gateway), you won't be able to test a Lambda that's invoked by a different service (like SNS). On the other hand a service like LocalStack, that tries to mock a whole suite of services, is slow and the mocked services can be out of date. + Like API Gateway, SNS, SQS, etc. This is hard to do. If you are using a tool that mocks a specific service (like API Gateway), you won't be able to test a Lambda that's invoked by a different service (like SNS). On the other hand a service like LocalStack, that tries to mock a whole suite of services, is slow and the mocked services can be out of date. 2. Or, you'll need to deploy your changes to test them -Each deployment can take at least a minute and if your internet connection is not great, then the feedback loop can be really slow. + Each deployment can take at least a minute. And repeatedly deploying to test a change really slows down the feedback loop. ## `sst start` diff --git a/www/docs/packages/resources.md b/www/docs/packages/resources.md index c679a1971f..6d10e72d9e 100644 --- a/www/docs/packages/resources.md +++ b/www/docs/packages/resources.md @@ -19,9 +19,31 @@ yarn add @serverless-stack/cli @serverless-stack/resources --exact Note that, the version of these packages should be kept in sync. -## Constructs +## Importing Constructs -- [`sst.App`](../constructs/app.md) -- [`sst.Api`](../constructs/api.md) -- [`sst.Stack`](../constructs/stack.md) -- [`sst.Function`](../constructs/function.md) +You can either import specific constructs in your app. + +```js +import { Api } from "@serverless-stack/resources"; +``` + +Or import them all. + +```js +import * as sst from "@serverless-stack/resources"; +``` + +## SST Constructs + +SST comes with a two types of constructs. + +### Low-Level Constructs + +- [`App`](../constructs/app.md) +- [`Stack`](../constructs/stack.md) +- [`Function`](../constructs/function.md) + +### Higher-Level Constructs + +- [`Api`](../constructs/api.md) +- More coming soon! From 349b9599e81695e8f825b5e2a2e1a1a2ac57ea5a Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 26 Jan 2021 20:42:14 -0500 Subject: [PATCH 321/481] Forcing eslint to look at own node_modules to resolve plugins --- packages/cli/scripts/util/cdkHelpers.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index 5994ab5def..d2d632ec5b 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -178,7 +178,7 @@ async function lint(inputFiles) { process.env.NO_COLOR === "true" ? "--no-color" : "--color", ...inputFiles, ], - { stdio: "inherit", cwd: paths.appPath } + { stdio: "inherit", cwd: paths.ownPath } ); if (response.error) { @@ -284,6 +284,7 @@ async function transpile(cliInfo) { } function copyConfigFiles() { + // Copy this file because we need it in the Lambda build process as well return fs.copy( path.join(paths.ownPath, "assets", "cdk-wrapper", "eslint.js"), path.join(paths.appBuildPath, "eslint.js") From ced03a04587b8f3f0762cb7c62960b60c1590f77 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 26 Jan 2021 20:50:22 -0500 Subject: [PATCH 322/481] Ignoring node_modules for ESLint CDK code --- packages/cli/scripts/util/cdkHelpers.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index 5994ab5def..52d380de2d 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -166,7 +166,9 @@ function runCdkVersionMatch(packageJson, cliInfo) { async function lint(inputFiles) { inputFiles = inputFiles.filter( - (file) => file.endsWith(".ts") || file.endsWith(".js") + (file) => + file.indexOf("node_modules") === -1 && + (file.endsWith(".ts") || file.endsWith(".js")) ); logger.info(chalk.grey("Linting source")); From e238eefb3da04b162fc36632e1ed912d272c51dc Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 26 Jan 2021 20:59:10 -0500 Subject: [PATCH 323/481] Fixing paths to detect TypeScript bin in Windows --- packages/cli/scripts/util/cdkHelpers.js | 2 +- packages/resources/src/App.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index 5994ab5def..6c32e19b1f 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -38,7 +38,7 @@ async function checkFileExists(file) { */ function getBinPath(pkg, exeName) { const filePath = require.resolve(pkg); - const matches = filePath.match(/(^.*\/node_modules)\/.*$/); + const matches = filePath.match(/(^.*[/\\]node_modules)[/\\].*$/); if (matches === null || !matches[1]) { throw new Error(`There was a problem finding ${pkg}`); diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 6e84bd6fc0..3374a2e6ba 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -21,7 +21,7 @@ const appNodeModules = path.join(appPath, "node_modules"); */ function getBinPath(pkg: string, exeName?: string): string { const filePath = require.resolve(pkg); - const matches = filePath.match(/(^.*\/node_modules)\/.*$/); + const matches = filePath.match(/(^.*[/\\]node_modules)[/\\].*$/); if (matches === null || !matches[1]) { throw new Error(`There was a problem finding ${pkg}`); From 7ecadc9ff3357f3c8c1840161001cec556ee5f24 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 26 Jan 2021 21:11:47 -0500 Subject: [PATCH 324/481] Updating docs with props rename --- www/docs/constructs/api.md | 8 ++++---- www/docs/packages/resources.md | 4 ++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/www/docs/constructs/api.md b/www/docs/constructs/api.md index 19370c5096..98d183e1dd 100644 --- a/www/docs/constructs/api.md +++ b/www/docs/constructs/api.md @@ -60,7 +60,7 @@ Get the instance of the internally created [`Function`](function.md), for a give ### routes -_Type_: `{ [key: string]: string }` or [`{ [key: string]: RouteProps }`](#routeprops) +_Type_: `{ [key: string]: string }` or [`{ [key: string]: ApiRouteProps }`](#apirouteprops) The routes for this API. Takes an associative array, with the key being the route and the value is either the handler of the Lambda function. @@ -71,7 +71,7 @@ The routes for this API. Takes an associative array, with the key being the rout } ``` -Or a the [RouteProps](#routeprops). +Or a the [ApiRouteProps](#apirouteprops). ```js { @@ -117,7 +117,7 @@ _Type_: `string`, _defaults to_ `true` The authorization type for all the endpoints in the API. Currently, supports `NONE` or `AWS_IAM`. -## RouteProps +## ApiRouteProps ### functionProps? @@ -186,7 +186,7 @@ new Api(this, "Api", { ### Using the full config -Finally, if you wanted to configure each Lambda function separately, you can pass in the [`RouteProps`](#routeprops). +Finally, if you wanted to configure each Lambda function separately, you can pass in the [`ApiRouteProps`](#apirouteprops). ```js new Api(this, "Api", { diff --git a/www/docs/packages/resources.md b/www/docs/packages/resources.md index 6d10e72d9e..292f5e5820 100644 --- a/www/docs/packages/resources.md +++ b/www/docs/packages/resources.md @@ -39,11 +39,15 @@ SST comes with a two types of constructs. ### Low-Level Constructs +These either extend or replace the native CDK constructs. + - [`App`](../constructs/app.md) - [`Stack`](../constructs/stack.md) - [`Function`](../constructs/function.md) ### Higher-Level Constructs +These are higher level abstractions that wrap around multiple constructs to serve specific use cases. + - [`Api`](../constructs/api.md) - More coming soon! From 3d0905488578350a29bea78d6dc82588c55cd44f Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 26 Jan 2021 21:39:08 -0500 Subject: [PATCH 325/481] v0.7.0 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/cli/test/add-cdk/package.json | 4 ++-- packages/cli/test/base-ts/package.json | 6 +++--- packages/cli/test/base/package.json | 6 +++--- packages/cli/test/cdk-command/package.json | 6 +++--- packages/cli/test/config-invalid/package.json | 6 +++--- packages/cli/test/config-no-name/package.json | 6 +++--- packages/cli/test/config-not-found/package.json | 6 +++--- packages/cli/test/config/package.json | 6 +++--- packages/cli/test/context/package.json | 6 +++--- packages/cli/test/eslint-ignore-rule/package.json | 6 +++--- packages/cli/test/eslint-ignore/package.json | 6 +++--- packages/cli/test/eslint-ts/package.json | 6 +++--- packages/cli/test/eslint/package.json | 6 +++--- packages/cli/test/handler-function-not-found/package.json | 6 +++--- packages/cli/test/handler-not-found/package.json | 6 +++--- packages/cli/test/jest-ts/package.json | 6 +++--- packages/cli/test/jest/package.json | 6 +++--- packages/cli/test/lambda-override-eslintrc/package.json | 6 +++--- packages/cli/test/lambda-override-tsconfig/package.json | 6 +++--- packages/cli/test/mismatched-cdk-versions/package.json | 6 +++--- packages/cli/test/stack-no-prefix/package.json | 6 +++--- packages/cli/test/stack-set-env/package.json | 6 +++--- packages/cli/test/start-base/package.json | 6 +++--- packages/cli/test/start-guide/package.json | 6 +++--- packages/cli/test/start-no-src-path/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 30 files changed, 81 insertions(+), 81 deletions(-) diff --git a/lerna.json b/lerna.json index f1d243cbb3..002304c6a7 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.6.2" + "version": "0.7.0" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 49cd57563d..68eb7e5634 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.6.2", + "version": "0.7.0", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -45,8 +45,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^0.6.2", - "@serverless-stack/resources": "^0.6.2", + "@serverless-stack/core": "^0.7.0", + "@serverless-stack/resources": "^0.7.0", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index 2893442cc6..afe9be907e 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -2,12 +2,12 @@ "name": "@serverless-stack/cli-test-add-cdk", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "add-cdk": "sst add-cdk" }, "dependencies": { - "@serverless-stack/cli": "^0.6.2" + "@serverless-stack/cli": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index ea68ffc129..b02d36580d 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base-ts", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "start": "sst start", "build": "sst build", @@ -13,8 +13,8 @@ "dependencies": { "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index b1c797f303..88ba562504 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "start": "sst start", "build": "sst build", @@ -17,8 +17,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index c85ff9319a..00254ecea1 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-cdk-command", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "cdk": "sst cdk" }, "dependencies": { - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index a10fab3220..a1d3284e3e 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-invalid", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index ac256e1bb0..9f7b49c94b 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-no-name", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index c4a62ab718..1b33aea829 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-not-found", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index e4bdd3dd74..1b9f5a745d 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-test", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index b65ee1e872..3346df7af8 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-context", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index c067a892b2..182ca02b13 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ignore-rule", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index 9ae56d8eaa..97493a94d2 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ignore", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index 3ee0a32a1f..cec86eb48b 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ts", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index fdc38daac4..92ade8c98b 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index 61bcf3d86a..f32271d062 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-handler-function-not-found", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index 6cb6d4b85c..ff15b32906 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-handler-not-found", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index d133b14e30..428e3286bd 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest-ts", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "build": "sst build", "test": "sst test" @@ -18,8 +18,8 @@ "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/aws-sqs": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index e7fd08c103..f87a4ee78f 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "test": "sst test" }, @@ -14,8 +14,8 @@ "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/lambda-override-eslintrc/package.json b/packages/cli/test/lambda-override-eslintrc/package.json index 14588df66b..917d74fad4 100644 --- a/packages/cli/test/lambda-override-eslintrc/package.json +++ b/packages/cli/test/lambda-override-eslintrc/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-eslintrc", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "build": "sst build", "start": "sst start" @@ -11,8 +11,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json index 3e1d97b6b2..a88b50c032 100644 --- a/packages/cli/test/lambda-override-tsconfig/package.json +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-tsconfig", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "build": "sst build", "start": "sst start" @@ -11,8 +11,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index c779338dd7..fa3b19f36d 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-mismatched-cdk-versions", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "build": "sst build" }, @@ -12,8 +12,8 @@ "@aws-cdk/aws-iam": "1.57.0", "@aws-cdk/aws-s3": "^1.57.0", "@aws-cdk/core": "1.56.0", - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index 72ed734032..8154d4e40a 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-stack-no-prefix", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index 54283e0c48..adf72fbbad 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-stack-set-env", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index 115948ab67..81d9f7b02f 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-base", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "start": "sst start", "build": "sst build", @@ -14,8 +14,8 @@ "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/start-guide/package.json b/packages/cli/test/start-guide/package.json index 2bf8c5d1da..79aa1dfc39 100644 --- a/packages/cli/test/start-guide/package.json +++ b/packages/cli/test/start-guide/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-guide", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "add-package": "sst add-package", "start": "sst start", @@ -19,8 +19,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2" + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0" }, "license": "ISC" } diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index 2f97b53799..9b759e5a60 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-no-src-path", "private": true, "description": "tests", - "version": "0.6.2", + "version": "0.7.0", "scripts": { "start": "sst start", "build": "sst build", @@ -15,8 +15,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.6.2", - "@serverless-stack/resources": "^0.6.2", + "@serverless-stack/cli": "^0.7.0", + "@serverless-stack/resources": "^0.7.0", "mirrarray": "^2.0.0" }, "license": "ISC" diff --git a/packages/core/package.json b/packages/core/package.json index e2a962d39d..c54f4b0f3e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.6.2", + "version": "0.7.0", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index bc6e2f4ed2..44ebfe5b58 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.6.2", + "version": "0.7.0", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index d4ec616726..4040d969fa 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.6.2", + "version": "0.7.0", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From b98a6011f46f95359ad877d196e512cd40a53130 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 26 Jan 2021 23:01:20 -0500 Subject: [PATCH 326/481] Set the srcpath for lambda eslint process to handle plugin resolution --- packages/cli/scripts/start.js | 4 ++-- packages/cli/scripts/util/cdkHelpers.js | 13 +++++------ packages/resources/.npmignore | 1 + packages/resources/src/App.ts | 31 +++++++++++++++++++------ 4 files changed, 33 insertions(+), 16 deletions(-) diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index d1be3f2393..2741a3aedb 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -14,9 +14,9 @@ const sstDeploy = require("./deploy"); const sstBuild = require("./build"); const paths = require("./util/paths"); const { - getBinPath, prepareCdk, applyConfig, + getTsBinPath, deploy: cdkDeploy, bootstrap: cdkBootstrap, } = require("./util/cdkHelpers"); @@ -624,7 +624,7 @@ function typeCheck(srcPath) { } const cp = spawn( - getBinPath("typescript", "tsc"), + getTsBinPath(), [ "--noEmit", "--pretty", diff --git a/packages/cli/scripts/util/cdkHelpers.js b/packages/cli/scripts/util/cdkHelpers.js index 24480bc347..fc2fcc35ff 100644 --- a/packages/cli/scripts/util/cdkHelpers.js +++ b/packages/cli/scripts/util/cdkHelpers.js @@ -29,14 +29,13 @@ async function checkFileExists(file) { } /** - * Finds the path to a package executable by converting the file path of: + * Finds the path to the tsc package executable by converting the file path of: * /Users/spongebob/serverless-stack-toolkit/node_modules/typescript/dist/index.js * to: - * /Users/spongebob/serverless-stack-toolkit/node_modules/.bin/typescript - * or if the executable name (exeName) is different * /Users/spongebob/serverless-stack-toolkit/node_modules/.bin/tsc */ -function getBinPath(pkg, exeName) { +function getTsBinPath() { + const pkg = "typescript"; const filePath = require.resolve(pkg); const matches = filePath.match(/(^.*[/\\]node_modules)[/\\].*$/); @@ -44,7 +43,7 @@ function getBinPath(pkg, exeName) { throw new Error(`There was a problem finding ${pkg}`); } - return path.join(matches[1], ".bin", exeName || pkg); + return path.join(matches[1], ".bin", "tsc"); } function exitWithMessage(message, shortMessage) { @@ -208,7 +207,7 @@ async function typeCheck(inputFiles) { try { const { stdout, stderr } = await exec( [ - getBinPath("typescript", "tsc"), + getTsBinPath(), "--pretty", process.env.NO_COLOR === "true" ? "false" : "true", "--noEmit", @@ -451,9 +450,9 @@ module.exports = { deploy, destroy, bootstrap, - getBinPath, prepareCdk, applyConfig, + getTsBinPath, parallelDeploy, parallelDestroy, }; diff --git a/packages/resources/.npmignore b/packages/resources/.npmignore index f5b2fd56b1..b16a3804bc 100644 --- a/packages/resources/.npmignore +++ b/packages/resources/.npmignore @@ -4,3 +4,4 @@ tests yarn.lock yarn-error.log .travis.yml +.build diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 875cb761e9..cddc0924c2 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -11,14 +11,13 @@ import { getEsbuildMetafileName } from "./util/builder"; const appPath = process.cwd(); /** - * Finds the path to a package executable by converting the file path of: + * Finds the path to the tsc package executable by converting the file path of: * /Users/spongebob/serverless-stack-toolkit/node_modules/typescript/dist/index.js * to: - * /Users/spongebob/serverless-stack-toolkit/node_modules/.bin/typescript - * or if the executable name (exeName) is different * /Users/spongebob/serverless-stack-toolkit/node_modules/.bin/tsc */ -function getBinPath(pkg: string, exeName?: string): string { +function getTsBinPath(): string { + const pkg = "typescript"; const filePath = require.resolve(pkg); const matches = filePath.match(/(^.*[/\\]node_modules)[/\\].*$/); @@ -26,7 +25,25 @@ function getBinPath(pkg: string, exeName?: string): string { throw new Error(`There was a problem finding ${pkg}`); } - return path.join(matches[1], ".bin", exeName || pkg); + return path.join(matches[1], ".bin", "tsc"); +} + +/** + * Uses the current file path and the package name to figure out the path to the + * CLI. Converts: + * /Users/spongebob/Sites/serverless-stack-toolkit/packages/resources/dist/App.js + * to: + * /Users/jayair/Sites/serverless-stack-toolkit/packages/cli + */ +function getSstCliRootPath() { + const filePath = __dirname; + const packageName = "resources"; + const packagePath = filePath.slice( + 0, + filePath.lastIndexOf(packageName) + packageName.length + ); + + return path.join(packagePath, "../cli"); } function exitWithMessage(message: string) { @@ -225,7 +242,7 @@ export class App extends cdk.App { process.env.NO_COLOR === "true" ? "--no-color" : "--color", ...inputFiles, ], - { stdio: "inherit", cwd: srcPath } + { stdio: "inherit", cwd: getSstCliRootPath() } ); if (response.error) { @@ -251,7 +268,7 @@ export class App extends cdk.App { try { const stdout = execSync( [ - getBinPath("typescript", "tsc"), + getTsBinPath(), "--pretty", process.env.NO_COLOR === "true" ? "false" : "true", "--noEmit", From 0684a109785fa674e2ab267e1ba93918f9d56eab Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 26 Jan 2021 23:46:34 -0500 Subject: [PATCH 327/481] v0.7.1 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/cli/test/add-cdk/package.json | 4 ++-- packages/cli/test/base-ts/package.json | 6 +++--- packages/cli/test/base/package.json | 6 +++--- packages/cli/test/cdk-command/package.json | 6 +++--- packages/cli/test/config-invalid/package.json | 6 +++--- packages/cli/test/config-no-name/package.json | 6 +++--- packages/cli/test/config-not-found/package.json | 6 +++--- packages/cli/test/config/package.json | 6 +++--- packages/cli/test/context/package.json | 6 +++--- packages/cli/test/eslint-ignore-rule/package.json | 6 +++--- packages/cli/test/eslint-ignore/package.json | 6 +++--- packages/cli/test/eslint-ts/package.json | 6 +++--- packages/cli/test/eslint/package.json | 6 +++--- packages/cli/test/handler-function-not-found/package.json | 6 +++--- packages/cli/test/handler-not-found/package.json | 6 +++--- packages/cli/test/jest-ts/package.json | 6 +++--- packages/cli/test/jest/package.json | 6 +++--- packages/cli/test/lambda-override-eslintrc/package.json | 6 +++--- packages/cli/test/lambda-override-tsconfig/package.json | 6 +++--- packages/cli/test/mismatched-cdk-versions/package.json | 6 +++--- packages/cli/test/stack-no-prefix/package.json | 6 +++--- packages/cli/test/stack-set-env/package.json | 6 +++--- packages/cli/test/start-base/package.json | 6 +++--- packages/cli/test/start-guide/package.json | 6 +++--- packages/cli/test/start-no-src-path/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 30 files changed, 81 insertions(+), 81 deletions(-) diff --git a/lerna.json b/lerna.json index 002304c6a7..85484e0247 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.7.0" + "version": "0.7.1" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 68eb7e5634..53aa65dc45 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.7.0", + "version": "0.7.1", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -45,8 +45,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^0.7.0", - "@serverless-stack/resources": "^0.7.0", + "@serverless-stack/core": "^0.7.1", + "@serverless-stack/resources": "^0.7.1", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index afe9be907e..b827185c0e 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -2,12 +2,12 @@ "name": "@serverless-stack/cli-test-add-cdk", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "add-cdk": "sst add-cdk" }, "dependencies": { - "@serverless-stack/cli": "^0.7.0" + "@serverless-stack/cli": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index b02d36580d..64555221cc 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base-ts", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "start": "sst start", "build": "sst build", @@ -13,8 +13,8 @@ "dependencies": { "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index 88ba562504..3aff295506 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "start": "sst start", "build": "sst build", @@ -17,8 +17,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index 00254ecea1..720899f2d8 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-cdk-command", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "cdk": "sst cdk" }, "dependencies": { - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index a1d3284e3e..c03bd6ecaa 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-invalid", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index 9f7b49c94b..8848748900 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-no-name", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index 1b33aea829..1510fd82d0 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-not-found", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index 1b9f5a745d..7d6be64698 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-test", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index 3346df7af8..2b37d42ae9 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-context", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index 182ca02b13..74f865eb18 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ignore-rule", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index 97493a94d2..ec5d592bea 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ignore", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index cec86eb48b..88388a7303 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ts", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index 92ade8c98b..336fe26e9d 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index f32271d062..796fd5eebb 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-handler-function-not-found", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index ff15b32906..a3434a3dc4 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-handler-not-found", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index 428e3286bd..984dc5eed3 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest-ts", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "build": "sst build", "test": "sst test" @@ -18,8 +18,8 @@ "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/aws-sqs": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index f87a4ee78f..9750863454 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "test": "sst test" }, @@ -14,8 +14,8 @@ "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/lambda-override-eslintrc/package.json b/packages/cli/test/lambda-override-eslintrc/package.json index 917d74fad4..e85f9b1829 100644 --- a/packages/cli/test/lambda-override-eslintrc/package.json +++ b/packages/cli/test/lambda-override-eslintrc/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-eslintrc", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "build": "sst build", "start": "sst start" @@ -11,8 +11,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json index a88b50c032..423c970067 100644 --- a/packages/cli/test/lambda-override-tsconfig/package.json +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-tsconfig", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "build": "sst build", "start": "sst start" @@ -11,8 +11,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index fa3b19f36d..f78a73de1d 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-mismatched-cdk-versions", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "build": "sst build" }, @@ -12,8 +12,8 @@ "@aws-cdk/aws-iam": "1.57.0", "@aws-cdk/aws-s3": "^1.57.0", "@aws-cdk/core": "1.56.0", - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index 8154d4e40a..8ef3826ea6 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-stack-no-prefix", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index adf72fbbad..545854d86d 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-stack-set-env", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index 81d9f7b02f..f01b6f9f4a 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-base", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "start": "sst start", "build": "sst build", @@ -14,8 +14,8 @@ "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/start-guide/package.json b/packages/cli/test/start-guide/package.json index 79aa1dfc39..5d2e3cd36d 100644 --- a/packages/cli/test/start-guide/package.json +++ b/packages/cli/test/start-guide/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-guide", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "add-package": "sst add-package", "start": "sst start", @@ -19,8 +19,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0" + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" }, "license": "ISC" } diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index 9b759e5a60..ed224d92c6 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-no-src-path", "private": true, "description": "tests", - "version": "0.7.0", + "version": "0.7.1", "scripts": { "start": "sst start", "build": "sst build", @@ -15,8 +15,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.0", - "@serverless-stack/resources": "^0.7.0", + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1", "mirrarray": "^2.0.0" }, "license": "ISC" diff --git a/packages/core/package.json b/packages/core/package.json index c54f4b0f3e..52f481ed1b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.7.0", + "version": "0.7.1", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 44ebfe5b58..d27e3a7cc5 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.7.0", + "version": "0.7.1", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 4040d969fa..0a83e05bc5 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.7.0", + "version": "0.7.1", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 40806bc0fcb813f01298a4175c8f1f6faed4a369 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 27 Jan 2021 22:55:57 -0500 Subject: [PATCH 328/481] Adding missing dependencies for the Api construct --- package.json | 4 + packages/cli/package.json | 5 +- .../cli/test/template-app-ts/lib/MyStack.ts | 20 + .../cli/test/template-app-ts/lib/index.ts | 8 + .../cli/test/template-app-ts/package.json | 29 + .../cli/test/template-app-ts/src/lambda.ts | 9 + packages/cli/test/template-app-ts/sst.json | 5 + .../template-app-ts/template-app-ts.test.js | 31 + .../test/template-app-ts/test/MyStack.test.ts | 17 + .../cli/test/template-app-ts/tsconfig.json | 23 + packages/cli/test/template-app/lib/MyStack.js | 20 + packages/cli/test/template-app/lib/index.js | 7 + packages/cli/test/template-app/package.json | 28 + packages/cli/test/template-app/src/lambda.js | 7 + packages/cli/test/template-app/sst.json | 5 + .../test/template-app/template-app.test.js | 31 + .../test/template-app/test/MyStack.test.js | 17 + packages/resources/package.json | 3 + yarn.lock | 1069 ++++++++++------- 19 files changed, 873 insertions(+), 465 deletions(-) create mode 100644 packages/cli/test/template-app-ts/lib/MyStack.ts create mode 100644 packages/cli/test/template-app-ts/lib/index.ts create mode 100644 packages/cli/test/template-app-ts/package.json create mode 100644 packages/cli/test/template-app-ts/src/lambda.ts create mode 100644 packages/cli/test/template-app-ts/sst.json create mode 100644 packages/cli/test/template-app-ts/template-app-ts.test.js create mode 100644 packages/cli/test/template-app-ts/test/MyStack.test.ts create mode 100644 packages/cli/test/template-app-ts/tsconfig.json create mode 100644 packages/cli/test/template-app/lib/MyStack.js create mode 100644 packages/cli/test/template-app/lib/index.js create mode 100644 packages/cli/test/template-app/package.json create mode 100644 packages/cli/test/template-app/src/lambda.js create mode 100644 packages/cli/test/template-app/sst.json create mode 100644 packages/cli/test/template-app/template-app.test.js create mode 100644 packages/cli/test/template-app/test/MyStack.test.js diff --git a/package.json b/package.json index 5a4fd98897..7b3e576222 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "release": "lerna publish --force-publish", "release-alpha": "lerna publish --force-publish --dist-tag alpha", "clean": "lerna run clean", + "depcheck": "for I in packages/*/; do cd $I; npx depcheck; cd -; done", "postinstall": "lerna run prepare --scope='{@serverless-stack/resources,@serverless-stack/cli,create-serverless-stack}'", "test": "lerna run test --stream --scope='{@serverless-stack/resources,@serverless-stack/cli}'" }, @@ -22,8 +23,11 @@ "url": "https://github.com/serverless-stack/serverless-stack.git" }, "devDependencies": { + "@babel/eslint-parser": "^7.11.3", + "@babel/eslint-plugin": "^7.11.3", "@typescript-eslint/eslint-plugin": "^3.9.1", "@typescript-eslint/parser": "^3.9.1", + "depcheck": "^1.3.1", "eslint": "^7.16.0", "husky": "^4.3.6", "lerna": "^3.22.1", diff --git a/packages/cli/package.json b/packages/cli/package.json index 53aa65dc45..a416023a51 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -17,7 +17,9 @@ "testPathIgnorePatterns": [ "/scripts", "/test/jest/test", - "/test/jest-ts/test" + "/test/jest-ts/test", + "/test/template-app/test", + "/test/template-app-ts/test" ] }, "author": { @@ -52,6 +54,7 @@ "@typescript-eslint/eslint-plugin": "^3.9.1", "@typescript-eslint/parser": "^3.9.1", "aws-cdk": "1.79.0", + "aws-sdk": "^2.761.0", "chalk": "^4.1.0", "chokidar": "^3.4.3", "core-js": "^3.6.5", diff --git a/packages/cli/test/template-app-ts/lib/MyStack.ts b/packages/cli/test/template-app-ts/lib/MyStack.ts new file mode 100644 index 0000000000..466e63d2e3 --- /dev/null +++ b/packages/cli/test/template-app-ts/lib/MyStack.ts @@ -0,0 +1,20 @@ +import * as cdk from "@aws-cdk/core"; +import * as sst from "@serverless-stack/resources"; + +export default class MyStack extends sst.Stack { + constructor(scope: sst.App, id: string, props?: sst.StackProps) { + super(scope, id, props); + + // Create the HTTP API + const api = new sst.Api(this, "Api", { + routes: { + "GET /": "src/lambda.handler", + }, + }); + + // Show API endpoint in output + new cdk.CfnOutput(this, "ApiEndpoint", { + value: api.httpApi.apiEndpoint, + }); + } +} diff --git a/packages/cli/test/template-app-ts/lib/index.ts b/packages/cli/test/template-app-ts/lib/index.ts new file mode 100644 index 0000000000..c0e0f4d08a --- /dev/null +++ b/packages/cli/test/template-app-ts/lib/index.ts @@ -0,0 +1,8 @@ +import MyStack from "./MyStack"; +import * as sst from "@serverless-stack/resources"; + +export default function main(app: sst.App): void { + new MyStack(app, "my-stack"); + + // Add more stacks +} diff --git a/packages/cli/test/template-app-ts/package.json b/packages/cli/test/template-app-ts/package.json new file mode 100644 index 0000000000..0c8d2ae97e --- /dev/null +++ b/packages/cli/test/template-app-ts/package.json @@ -0,0 +1,29 @@ +{ + "name": "@serverless-stack/template-app-ts", + "private": true, + "description": "tests", + "version": "0.7.1", + "scripts": { + "start": "sst start", + "build": "sst build", + "deploy": "sst deploy", + "remove": "sst remove", + "test": "sst test", + "cdk": "sst cdk" + }, + "jest": { + "testPathIgnorePatterns": [ + "./template-app-ts.test.js" + ] + }, + "license": "ISC", + "dependencies": { + "@aws-cdk/core": "1.79.0", + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" + }, + "devDependencies": { + "@aws-cdk/assert": "1.79.0", + "@types/aws-lambda": "^8.10.70" + } +} diff --git a/packages/cli/test/template-app-ts/src/lambda.ts b/packages/cli/test/template-app-ts/src/lambda.ts new file mode 100644 index 0000000000..66909a498e --- /dev/null +++ b/packages/cli/test/template-app-ts/src/lambda.ts @@ -0,0 +1,9 @@ +import { APIGatewayProxyResult } from "aws-lambda"; + +export async function handler(): Promise { + return { + statusCode: 200, + body: "Hello World!", + headers: { "Content-Type": "text/plain" }, + }; +} diff --git a/packages/cli/test/template-app-ts/sst.json b/packages/cli/test/template-app-ts/sst.json new file mode 100644 index 0000000000..8e98c422ff --- /dev/null +++ b/packages/cli/test/template-app-ts/sst.json @@ -0,0 +1,5 @@ +{ + "name": "notes", + "stage": "prod", + "region": "us-east-1" +} diff --git a/packages/cli/test/template-app-ts/template-app-ts.test.js b/packages/cli/test/template-app-ts/template-app-ts.test.js new file mode 100644 index 0000000000..5b8599517b --- /dev/null +++ b/packages/cli/test/template-app-ts/template-app-ts.test.js @@ -0,0 +1,31 @@ +const { + runJestCommand, + runBuildCommand, + clearBuildOutput, +} = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("template-app-ts", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).toMatch(/Successfully compiled \d+ stack/); +}); + +/** + * Test that the jest tests run successfully + */ +test("template-app-ts-jest", async () => { + const result = await runJestCommand(__dirname); + + expect(result).toContain("JESTTESTSUCCESS-----"); +}); diff --git a/packages/cli/test/template-app-ts/test/MyStack.test.ts b/packages/cli/test/template-app-ts/test/MyStack.test.ts new file mode 100644 index 0000000000..1e8099be1f --- /dev/null +++ b/packages/cli/test/template-app-ts/test/MyStack.test.ts @@ -0,0 +1,17 @@ +import { expect, haveResource } from "@aws-cdk/assert"; +import * as sst from "@serverless-stack/resources"; +import MyStack from "../lib/MyStack"; + +test("Test Stack", () => { + const app = new sst.App(); + // WHEN + const stack = new MyStack(app, "test-stack"); + // THEN + try { + expect(stack).to(haveResource("AWS::Lambda::Function")); + // Print out a test string that parent .test.js can catch + console.log("JESTTESTSUCCESS-----"); + } catch (e) { + // Ignore any errors + } +}); diff --git a/packages/cli/test/template-app-ts/tsconfig.json b/packages/cli/test/template-app-ts/tsconfig.json new file mode 100644 index 0000000000..314630a372 --- /dev/null +++ b/packages/cli/test/template-app-ts/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ES2018", + "module": "commonjs", + "lib": ["es2018", "dom"], + "declaration": true, + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "noImplicitThis": true, + "alwaysStrict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": false, + "inlineSourceMap": true, + "inlineSources": true, + "experimentalDecorators": true, + "strictPropertyInitialization": false, + "typeRoots": ["../../../../node_modules/@types"] + }, + "include": ["lib", "src"] +} diff --git a/packages/cli/test/template-app/lib/MyStack.js b/packages/cli/test/template-app/lib/MyStack.js new file mode 100644 index 0000000000..fb48c077c7 --- /dev/null +++ b/packages/cli/test/template-app/lib/MyStack.js @@ -0,0 +1,20 @@ +import * as cdk from "@aws-cdk/core"; +import * as sst from "@serverless-stack/resources"; + +export default class MyStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + // Create the HTTP API + const api = new sst.Api(this, "Api", { + routes: { + "GET /": "src/lambda.handler", + }, + }); + + // Show API endpoint in output + new cdk.CfnOutput(this, "ApiEndpoint", { + value: api.httpApi.apiEndpoint, + }); + } +} diff --git a/packages/cli/test/template-app/lib/index.js b/packages/cli/test/template-app/lib/index.js new file mode 100644 index 0000000000..300935c26d --- /dev/null +++ b/packages/cli/test/template-app/lib/index.js @@ -0,0 +1,7 @@ +import MyStack from "./MyStack"; + +export default function main(app) { + new MyStack(app, "my-stack"); + + // Add more stacks +} diff --git a/packages/cli/test/template-app/package.json b/packages/cli/test/template-app/package.json new file mode 100644 index 0000000000..85a4834019 --- /dev/null +++ b/packages/cli/test/template-app/package.json @@ -0,0 +1,28 @@ +{ + "name": "@serverless-stack/template-app", + "private": true, + "description": "tests", + "version": "0.7.1", + "scripts": { + "start": "sst start", + "build": "sst build", + "deploy": "sst deploy", + "remove": "sst remove", + "test": "sst test", + "cdk": "sst cdk" + }, + "jest": { + "testPathIgnorePatterns": [ + "./template-app.test.js" + ] + }, + "license": "ISC", + "dependencies": { + "@aws-cdk/core": "1.79.0", + "@serverless-stack/cli": "^0.7.1", + "@serverless-stack/resources": "^0.7.1" + }, + "devDependencies": { + "@aws-cdk/assert": "1.79.0" + } +} diff --git a/packages/cli/test/template-app/src/lambda.js b/packages/cli/test/template-app/src/lambda.js new file mode 100644 index 0000000000..3b26bcf3ee --- /dev/null +++ b/packages/cli/test/template-app/src/lambda.js @@ -0,0 +1,7 @@ +export async function handler() { + return { + statusCode: 200, + body: "Hello World!", + headers: { "Content-Type": "text/plain" }, + }; +} diff --git a/packages/cli/test/template-app/sst.json b/packages/cli/test/template-app/sst.json new file mode 100644 index 0000000000..8e98c422ff --- /dev/null +++ b/packages/cli/test/template-app/sst.json @@ -0,0 +1,5 @@ +{ + "name": "notes", + "stage": "prod", + "region": "us-east-1" +} diff --git a/packages/cli/test/template-app/template-app.test.js b/packages/cli/test/template-app/template-app.test.js new file mode 100644 index 0000000000..a7ebf73c81 --- /dev/null +++ b/packages/cli/test/template-app/template-app.test.js @@ -0,0 +1,31 @@ +const { + runJestCommand, + runBuildCommand, + clearBuildOutput, +} = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("template-app", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).toMatch(/Successfully compiled \d+ stack/); +}); + +/** + * Test that the jest tests run successfully + */ +test("template-app-jest", async () => { + const result = await runJestCommand(__dirname); + + expect(result).toContain("JESTTESTSUCCESS-----"); +}); diff --git a/packages/cli/test/template-app/test/MyStack.test.js b/packages/cli/test/template-app/test/MyStack.test.js new file mode 100644 index 0000000000..1e8099be1f --- /dev/null +++ b/packages/cli/test/template-app/test/MyStack.test.js @@ -0,0 +1,17 @@ +import { expect, haveResource } from "@aws-cdk/assert"; +import * as sst from "@serverless-stack/resources"; +import MyStack from "../lib/MyStack"; + +test("Test Stack", () => { + const app = new sst.App(); + // WHEN + const stack = new MyStack(app, "test-stack"); + // THEN + try { + expect(stack).to(haveResource("AWS::Lambda::Function")); + // Print out a test string that parent .test.js can catch + console.log("JESTTESTSUCCESS-----"); + } catch (e) { + // Ignore any errors + } +}); diff --git a/packages/resources/package.json b/packages/resources/package.json index 0a83e05bc5..0c1349deae 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -27,9 +27,12 @@ "access": "public" }, "dependencies": { + "@aws-cdk/aws-apigatewayv2": "1.79.0", + "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/aws-lambda-nodejs": "1.79.0", "@aws-cdk/aws-logs": "1.79.0", + "@aws-cdk/cx-api": "1.79.0", "@aws-cdk/core": "1.79.0", "@types/jest": "^26.0.7", "chalk": "^4.1.0", diff --git a/yarn.lock b/yarn.lock index 6ff6e406b3..b967e387c4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,13 +22,13 @@ "@aws-cdk/cx-api" "1.79.0" constructs "^3.2.0" -"@aws-cdk/assets@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.83.0.tgz#a6d0da67125e6c6f00e80aacb8af1db225a2f8da" - integrity sha512-e8LxgqDDpHmEqk2I4hJ2EqJ7zrfAzCpZXCaLtg/1Kfvr9Q87SmW24RpC79WMuHCgRA0xhFbDAtNGRpKWuWayhA== +"@aws-cdk/assets@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.87.0.tgz#c881928d9f2d74576f88032ab62d2bc33260b3f3" + integrity sha512-50b7KBphIyAWhLkBp57wxhhTyGgiJLOF/drz0G91ONmIY/JSrka4e59mOBV/e9vd9D8kLcmlbzv1rUY1Aj36Vg== dependencies: - "@aws-cdk/core" "1.83.0" - "@aws-cdk/cx-api" "1.83.0" + "@aws-cdk/core" "1.87.0" + "@aws-cdk/cx-api" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-apigatewayv2-integrations@1.79.0": @@ -68,15 +68,15 @@ "@aws-cdk/core" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-applicationautoscaling@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.83.0.tgz#12af500fad80849edf16d43a82277af878892b31" - integrity sha512-cp+4mYN2LsZ1A06/7w0AWDYj5eYt/fvSolNz2KY4DMO6SpzSjjEMIZCpnhI6nP7yA7zLJBRO0eihMGaFYDePhw== +"@aws-cdk/aws-applicationautoscaling@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.87.0.tgz#6fa2aef45fea4219a80d4b96498cbf9564c6b142" + integrity sha512-36Lxyop7ld8IgFA0cMTQm8sobO8DSnTWO4oP8bM3civ8n2U4BMFs00z4A7crVrmxuvMxGtv/O5uD3hQ4w8kWRg== dependencies: - "@aws-cdk/aws-autoscaling-common" "1.83.0" - "@aws-cdk/aws-cloudwatch" "1.83.0" - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/core" "1.83.0" + "@aws-cdk/aws-autoscaling-common" "1.87.0" + "@aws-cdk/aws-cloudwatch" "1.87.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/core" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-autoscaling-common@1.79.0": @@ -88,13 +88,13 @@ "@aws-cdk/core" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-autoscaling-common@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.83.0.tgz#e8dc3f031cf1dc04a1c839be6f3707113885672c" - integrity sha512-szrg/J8/tV1tui3OJQRzofOecagZMyg11JZAyrTqjiq966xCO/kAp7ZIDx6TPZNPnz799hdiLgV4pAsmbeMacQ== +"@aws-cdk/aws-autoscaling-common@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.87.0.tgz#0cf4d4ebbfe61da1a6cfd8bdf07c6a051a5acf32" + integrity sha512-xNssWMeuNaMp4WPBkjtrrYozdbAAvkUj/GG0ZeY+HKATuOHTw66JvGZJhQD//LbCq2uAeJ3SkX24GWVzf5DCyg== dependencies: - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/core" "1.83.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/core" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-certificatemanager@1.79.0": @@ -108,15 +108,15 @@ "@aws-cdk/core" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-certificatemanager@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.83.0.tgz#73463b5a6aa3da4737e925dee094c7002d6fd81a" - integrity sha512-nJo7n6H/y9WdwrrAN01+MCFUtUsGLyrIAAzjsUM5gFkK87Q48GZuizIwb2WzZQDo3Y65+en1VB4dpZSmIZjaUw== +"@aws-cdk/aws-certificatemanager@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.87.0.tgz#1e08dbfb3d28e9a435ddde365d18eb2492292a9d" + integrity sha512-nEFurFTuyXerbeNG9Bk5pnGJffjEXkAtYb2XrceDMFgDNPD5oT2zJE/158FF9XPcNAahNlEF5eGoW79+7wdPqQ== dependencies: - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/aws-lambda" "1.83.0" - "@aws-cdk/aws-route53" "1.83.0" - "@aws-cdk/core" "1.83.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/aws-lambda" "1.87.0" + "@aws-cdk/aws-route53" "1.87.0" + "@aws-cdk/core" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-cloudformation@1.79.0": @@ -132,17 +132,17 @@ "@aws-cdk/cx-api" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-cloudformation@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.83.0.tgz#04ee24e17682dbeed22572265d0db5033a9b8cf1" - integrity sha512-ZGd6oDqp1VCer3W7NUGwhVLQTKY4xUZoS5BEDM6wxgZiVyelzzxK5UMW2GfSJhS6y9PeFDLJ0kcqKt7+6/jF8A== - dependencies: - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/aws-lambda" "1.83.0" - "@aws-cdk/aws-s3" "1.83.0" - "@aws-cdk/aws-sns" "1.83.0" - "@aws-cdk/core" "1.83.0" - "@aws-cdk/cx-api" "1.83.0" +"@aws-cdk/aws-cloudformation@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.87.0.tgz#946786c01c7a36fe41ae6678e1a8f0c16bedf415" + integrity sha512-eyxDDngL9qsG9xmskXuHiQ8xreU2MOtULGm1gkNcImVQTquWseEQ3tKR4kh7NhsvKFON/82hI1Uy0igEgzjjPQ== + dependencies: + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/aws-lambda" "1.87.0" + "@aws-cdk/aws-s3" "1.87.0" + "@aws-cdk/aws-sns" "1.87.0" + "@aws-cdk/core" "1.87.0" + "@aws-cdk/cx-api" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-cloudwatch@1.79.0": @@ -154,13 +154,13 @@ "@aws-cdk/core" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-cloudwatch@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.83.0.tgz#071977ea5eb1ae10bf80500956918fff1489b59f" - integrity sha512-mLsZF6lqRz4c9isshOlxWRu4FjFbSMt81SUGAQ7eZgP5OIGV88QdTfgJJELK5cmk0xmAtrVD7nDHT+sN5ABhCg== +"@aws-cdk/aws-cloudwatch@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.87.0.tgz#d699b78038d0db7f413edf834dcb0e38b5ea316d" + integrity sha512-gMwyCp0JcbKlOuRdQeHHb2TlkRH9fgudQuHAvXyNiqP7C+5I+hKGNmfTplGtdyTi0frq7RIo5tOJmOH+OHRYwQ== dependencies: - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/core" "1.83.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/core" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-codeguruprofiler@1.79.0": @@ -172,13 +172,13 @@ "@aws-cdk/core" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-codeguruprofiler@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.83.0.tgz#656709af6fe0e03434ce72bd7ffa3fe5be0614be" - integrity sha512-56a1IZcz2ei6XPxKqgbqTGQMD8v/fjnsc0Ddq8CZmfFKgIQy8BTtvTMj9kMDfsNyPocGKRb3S9uz3qwhAULWdQ== +"@aws-cdk/aws-codeguruprofiler@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.87.0.tgz#787518fb1f4d8ba0e3c49e8157ebf2eef962be2b" + integrity sha512-MMyGU/+2yDa3ojS3od0vf2kFZ9IYKUnPjySOCvu5f3APJ6u9I6zaV2OybUxJQ8WwaEjTTcwEQ5iuzvP8LjCvWw== dependencies: - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/core" "1.83.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/core" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-cognito@1.79.0": @@ -195,15 +195,15 @@ punycode "^2.1.1" "@aws-cdk/aws-cognito@^1.55.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.83.0.tgz#f8f9a17c6ca20874d058cd7c24261aac34926290" - integrity sha512-wKx25zRvZjDYjH8nvorpPqaWD7o/q0W9nLauCXrGp/KZuGgvAoYLFVW7bVhGBvVn7fRBp12JWklpl2xjhcyLmw== - dependencies: - "@aws-cdk/aws-certificatemanager" "1.83.0" - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/aws-lambda" "1.83.0" - "@aws-cdk/core" "1.83.0" - "@aws-cdk/custom-resources" "1.83.0" + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.87.0.tgz#9e1aae989808af369845ddf08638e55a3fa44643" + integrity sha512-9XC48kOwFlq0qR4+MYVn6fMxAzkmJTWbYMHBFvJnKDAt34El1GvR5vRx5ow5TN9KsLiyw54MJfJnieKC2DMPyQ== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.87.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/aws-lambda" "1.87.0" + "@aws-cdk/core" "1.87.0" + "@aws-cdk/custom-resources" "1.87.0" constructs "^3.2.0" punycode "^2.1.1" @@ -222,17 +222,17 @@ constructs "^3.2.0" "@aws-cdk/aws-dynamodb@^1.55.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.83.0.tgz#92e03db0d159652607546f760c02a48b1e6fe62d" - integrity sha512-fmnOL6WyMLGABLJ7sd9GdH/PcH0n2Hzsuju7crKpM56zqmlO82jS+hONbfBkFdhI+VxQB2ERpqGRiPMeP7UU/g== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.83.0" - "@aws-cdk/aws-cloudwatch" "1.83.0" - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/aws-kms" "1.83.0" - "@aws-cdk/aws-lambda" "1.83.0" - "@aws-cdk/core" "1.83.0" - "@aws-cdk/custom-resources" "1.83.0" + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.87.0.tgz#0026fc4abb6c2a9aef2d62ff1735664f1cc0b6c5" + integrity sha512-Fwg+Hwe2qZcPqM/gjHHbsLGoRedJTqmVP6stjK+FNslNK3hknWTHqoAUfWtDSY+q8KyIdhZjOd/DKCQsr1+dLw== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.87.0" + "@aws-cdk/aws-cloudwatch" "1.87.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/aws-kms" "1.87.0" + "@aws-cdk/aws-lambda" "1.87.0" + "@aws-cdk/core" "1.87.0" + "@aws-cdk/custom-resources" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-ec2@1.79.0": @@ -253,22 +253,22 @@ "@aws-cdk/region-info" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-ec2@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.83.0.tgz#c9da7a77081afd8dc93016c43d8072cac6c58993" - integrity sha512-nY6V3AQmpKOU4NgVVIAwFANH9T5KS8eZd/myJNPZM5n0kQXaLSLi+g7SS2oaTH4ZNBPsSF/9Hpg9pw8tVw5xlQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.83.0" - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/aws-kms" "1.83.0" - "@aws-cdk/aws-logs" "1.83.0" - "@aws-cdk/aws-s3" "1.83.0" - "@aws-cdk/aws-s3-assets" "1.83.0" - "@aws-cdk/aws-ssm" "1.83.0" - "@aws-cdk/cloud-assembly-schema" "1.83.0" - "@aws-cdk/core" "1.83.0" - "@aws-cdk/cx-api" "1.83.0" - "@aws-cdk/region-info" "1.83.0" +"@aws-cdk/aws-ec2@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.87.0.tgz#30dc99d9ab26d434534aae5def1d8cb1d67522c1" + integrity sha512-NH3Jx8/TerpJ5tXDY6vceKYNoHQj8CuGFXj5X7Sa8St935ymird7yb1ePGjRkVZVocTnY3uC64Vy0+jHBXUDJQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.87.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/aws-kms" "1.87.0" + "@aws-cdk/aws-logs" "1.87.0" + "@aws-cdk/aws-s3" "1.87.0" + "@aws-cdk/aws-s3-assets" "1.87.0" + "@aws-cdk/aws-ssm" "1.87.0" + "@aws-cdk/cloud-assembly-schema" "1.87.0" + "@aws-cdk/core" "1.87.0" + "@aws-cdk/cx-api" "1.87.0" + "@aws-cdk/region-info" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-ecr-assets@1.79.0": @@ -285,17 +285,17 @@ constructs "^3.2.0" minimatch "^3.0.4" -"@aws-cdk/aws-ecr-assets@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.83.0.tgz#491407610dfd6cd831463eb214b60d1d478d5008" - integrity sha512-+fwJ4+RpiW8mKB3FqkbZq15FPV66gqDSqtkQrrwFeYaXmPls5lLSYIGO6RwbsoT8eMo70eIBbG94QXLWWXs4Rw== - dependencies: - "@aws-cdk/assets" "1.83.0" - "@aws-cdk/aws-ecr" "1.83.0" - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/aws-s3" "1.83.0" - "@aws-cdk/core" "1.83.0" - "@aws-cdk/cx-api" "1.83.0" +"@aws-cdk/aws-ecr-assets@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.87.0.tgz#7dbcff21bce054cc1be9fda192c5b42a329cea10" + integrity sha512-rbjVQffRxl/YPbm9bpUCd1VL89PdYLZmUJ3VIaXilJuqbBGwRHpWrH4RguH9rRfK4SRxoR9vOGq1952Vjr/phw== + dependencies: + "@aws-cdk/assets" "1.87.0" + "@aws-cdk/aws-ecr" "1.87.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/aws-s3" "1.87.0" + "@aws-cdk/core" "1.87.0" + "@aws-cdk/cx-api" "1.87.0" constructs "^3.2.0" minimatch "^3.0.4" @@ -309,14 +309,14 @@ "@aws-cdk/core" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-ecr@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr/-/aws-ecr-1.83.0.tgz#68b12106dac3b97388af7ef9714d5159bbd45a37" - integrity sha512-Tu80ponk0Ctv7fHg/j78MyxTinDz10M9B3kAcQTHqMmlHMc0RSXKHqa4+piUBiOAr2zbCO89++1HqWm0h+U7hw== +"@aws-cdk/aws-ecr@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr/-/aws-ecr-1.87.0.tgz#8ee50b02ce4d5c78e25bfe53a25f5383ead5d272" + integrity sha512-4sHfmt9/9Ic6GuZB1U5tR4tRlmc2LCwHjSSFSma9/qp/EGMW99ZpQrdK2gdvRrAjvM4P7qWjDDR70f2cfhNJkg== dependencies: - "@aws-cdk/aws-events" "1.83.0" - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/core" "1.83.0" + "@aws-cdk/aws-events" "1.87.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/core" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-efs@1.79.0": @@ -331,16 +331,16 @@ "@aws-cdk/cx-api" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-efs@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.83.0.tgz#cad7fd08c38c8f745a6546d7588d487ba41c5345" - integrity sha512-LjJ0F8u9e9ElC5lCME1h3JJtnpre8ye2AUwdTIDOpxvux43pMdX/wsM9g2r6r2aewFd50vA2YV/57+a8HYcayA== +"@aws-cdk/aws-efs@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.87.0.tgz#df01a8c0d7f5e00251769b20e972e67cee99872f" + integrity sha512-cAILNgy2je0z0inLEa/hGyaE8ZBQ+anGdn1l7/G6t9R3UMof08K7YXvnB71wjlBkNg6Bn1KSHB8EvuQjcHqxjQ== dependencies: - "@aws-cdk/aws-ec2" "1.83.0" - "@aws-cdk/aws-kms" "1.83.0" - "@aws-cdk/cloud-assembly-schema" "1.83.0" - "@aws-cdk/core" "1.83.0" - "@aws-cdk/cx-api" "1.83.0" + "@aws-cdk/aws-ec2" "1.87.0" + "@aws-cdk/aws-kms" "1.87.0" + "@aws-cdk/cloud-assembly-schema" "1.87.0" + "@aws-cdk/core" "1.87.0" + "@aws-cdk/cx-api" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-elasticloadbalancingv2@1.79.0": @@ -369,13 +369,13 @@ "@aws-cdk/core" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-events@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.83.0.tgz#fc9eaea6b82612c369cae8cdeed99135a8b70840" - integrity sha512-J4Hh5U5x5hBMedPjTaucVJANm6fBJ54VnmX72YA/AhOHhXKz8zrN0lwm3MN5cta4fyFBV+DjotmvGcNq2oc1pA== +"@aws-cdk/aws-events@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.87.0.tgz#22f4823743265d4344e7d57c2ff8ed478ee46956" + integrity sha512-HP4r6qqRJgLRvRN+tphhdYPKo5hJFdneKWFULxRyHTGj/MhpcorkSKSlDaacDimAq9O/QvBCO9agflSYNAY97g== dependencies: - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/core" "1.83.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/core" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-iam@1.57.0": @@ -396,13 +396,13 @@ "@aws-cdk/region-info" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-iam@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.83.0.tgz#29d2734f08a387537e72d72c9b9ac842b7cb88d4" - integrity sha512-lxZPIwLamUiKtaQSDRcVYbn5WbDsoecMqdTUvAL+Y4HRaVoWXHQ5zr+pHD/cDS+5kyv2/J5qGckwIOI7MaMDlQ== +"@aws-cdk/aws-iam@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.87.0.tgz#4cdf55cfcdabe141c8a1099f2bb3f51b2a62cee7" + integrity sha512-WX0bXC79++fee/yhPSMWmeibkYOxwfIfmFLa8z3Ig3vt7knC//vLwvc5RmEfqBUyiVGFjGAEiDBDPt+vrQU4jw== dependencies: - "@aws-cdk/core" "1.83.0" - "@aws-cdk/region-info" "1.83.0" + "@aws-cdk/core" "1.87.0" + "@aws-cdk/region-info" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-kms@1.79.0": @@ -415,14 +415,14 @@ "@aws-cdk/cx-api" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-kms@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.83.0.tgz#6bed13d45f20bcc2946b6f549d9cc00cb81ef83e" - integrity sha512-EhtiscxSyDtozxH9nDWLpFe0z/pwdtseW471oamghnOAaL2vVFCws5QEALC5QU+MCh4id1j0KlKzrp9GHXFneQ== +"@aws-cdk/aws-kms@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.87.0.tgz#b833202fad6c36378908de994780efa3ef9d9b02" + integrity sha512-gAOAV96tkuT04g8fnpPBKaYE5lbiP3FceLYcI9FHI/kPl8BfRQEPKMf6wniwpdhXiPX2Rc8GzfBZtPLjpFfoPQ== dependencies: - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/core" "1.83.0" - "@aws-cdk/cx-api" "1.83.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/core" "1.87.0" + "@aws-cdk/cx-api" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-lambda-nodejs@1.79.0": @@ -457,27 +457,27 @@ "@aws-cdk/cx-api" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-lambda@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.83.0.tgz#e8dccff7fe6302572941b234534f8bb19bdfad8c" - integrity sha512-ox8VABlj8ZdjYRpAGPh6MuY6/sx0Asl03UtC6Jme23l33txU35CgI+BezN4+ldoqdysDFsJ2OMaE5ynUbSrmHQ== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.83.0" - "@aws-cdk/aws-cloudwatch" "1.83.0" - "@aws-cdk/aws-codeguruprofiler" "1.83.0" - "@aws-cdk/aws-ec2" "1.83.0" - "@aws-cdk/aws-ecr" "1.83.0" - "@aws-cdk/aws-ecr-assets" "1.83.0" - "@aws-cdk/aws-efs" "1.83.0" - "@aws-cdk/aws-events" "1.83.0" - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/aws-kms" "1.83.0" - "@aws-cdk/aws-logs" "1.83.0" - "@aws-cdk/aws-s3" "1.83.0" - "@aws-cdk/aws-s3-assets" "1.83.0" - "@aws-cdk/aws-sqs" "1.83.0" - "@aws-cdk/core" "1.83.0" - "@aws-cdk/cx-api" "1.83.0" +"@aws-cdk/aws-lambda@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.87.0.tgz#c015997c5b84fc7ee99cf9b1c4ad62d0b2e9c8c8" + integrity sha512-ZKG65feemY3RuszbWOph8GxeIdLXyTZDj5qmLPdcU2QCfXsO+0kL+Zdf9wHyQQUk3IKF5Fsw+bvZbYXaZ8GARA== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.87.0" + "@aws-cdk/aws-cloudwatch" "1.87.0" + "@aws-cdk/aws-codeguruprofiler" "1.87.0" + "@aws-cdk/aws-ec2" "1.87.0" + "@aws-cdk/aws-ecr" "1.87.0" + "@aws-cdk/aws-ecr-assets" "1.87.0" + "@aws-cdk/aws-efs" "1.87.0" + "@aws-cdk/aws-events" "1.87.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/aws-kms" "1.87.0" + "@aws-cdk/aws-logs" "1.87.0" + "@aws-cdk/aws-s3" "1.87.0" + "@aws-cdk/aws-s3-assets" "1.87.0" + "@aws-cdk/aws-sqs" "1.87.0" + "@aws-cdk/core" "1.87.0" + "@aws-cdk/cx-api" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-logs@1.79.0": @@ -492,16 +492,16 @@ "@aws-cdk/core" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-logs@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.83.0.tgz#08178d97541a7781d4289f6142dc6cb014fed10f" - integrity sha512-mWXBJG1UxpKMcpz3iOUVgCH5BPD/YPx+qWSJ4UYYZFbDTHqdGtO9ZQnw81YFMwW2HX+/MUNO8gVj5+6M89bccA== +"@aws-cdk/aws-logs@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.87.0.tgz#566f8e0fe750725690369196acf46b4f3eb65d87" + integrity sha512-fKAo3s4JvjR3p8LgvLLMQUv2u/UtU8N0FGwF7LRgf6whSuPv7DVPh23MsdQ45kFVo9wc6P9i9RTggtijC0lJLA== dependencies: - "@aws-cdk/aws-cloudwatch" "1.83.0" - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/aws-kms" "1.83.0" - "@aws-cdk/aws-s3-assets" "1.83.0" - "@aws-cdk/core" "1.83.0" + "@aws-cdk/aws-cloudwatch" "1.87.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/aws-kms" "1.87.0" + "@aws-cdk/aws-s3-assets" "1.87.0" + "@aws-cdk/core" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-route53@1.79.0": @@ -516,16 +516,16 @@ "@aws-cdk/custom-resources" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-route53@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.83.0.tgz#96d04760d1f237e84f5fcdb2f1da4f6ff5ca9e89" - integrity sha512-OVaU36bchwGI0hfhYF05EUqln8zdsXaMUBZWq26Zqdc8k2pGDeGEcfHvLQczKj9fkFv80A3TPt/dKeF2E2bBgQ== +"@aws-cdk/aws-route53@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.87.0.tgz#14452e947290cce4325bd2cde5c0fac6c5bc1849" + integrity sha512-wUYIUUBbNCgQ0h2t/n9ZqUhAWkytx9dtIGIybPdWG0TA8QR0VbmR7chqnBi9X0gVoW76XX0yNig4b6raMIUqXw== dependencies: - "@aws-cdk/aws-ec2" "1.83.0" - "@aws-cdk/aws-logs" "1.83.0" - "@aws-cdk/cloud-assembly-schema" "1.83.0" - "@aws-cdk/core" "1.83.0" - "@aws-cdk/custom-resources" "1.83.0" + "@aws-cdk/aws-ec2" "1.87.0" + "@aws-cdk/aws-logs" "1.87.0" + "@aws-cdk/cloud-assembly-schema" "1.87.0" + "@aws-cdk/core" "1.87.0" + "@aws-cdk/custom-resources" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-s3-assets@1.79.0": @@ -541,17 +541,17 @@ "@aws-cdk/cx-api" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-s3-assets@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.83.0.tgz#5858b3d6b5299d591f02afb37216dcaea9f5da84" - integrity sha512-EpM1q8z4KZlfQGrkIMbrrf+VSYW7efgw60N7GcVG+Xm1qVdM0Q9sc7FUcA/VR5wrG4nn813u0GnciI44iiPlqw== - dependencies: - "@aws-cdk/assets" "1.83.0" - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/aws-kms" "1.83.0" - "@aws-cdk/aws-s3" "1.83.0" - "@aws-cdk/core" "1.83.0" - "@aws-cdk/cx-api" "1.83.0" +"@aws-cdk/aws-s3-assets@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.87.0.tgz#66ed60e7ff30dd9df9b601011ded2d43749e1ec1" + integrity sha512-xBAMaBJ7sQ8yqMj64G0ZvDF6rynKsSqwp5kK22N+Vbsuj1drtuE7CVawpnB0JjdnwPdF+cIlHpjYIm3wfFT19g== + dependencies: + "@aws-cdk/assets" "1.87.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/aws-kms" "1.87.0" + "@aws-cdk/aws-s3" "1.87.0" + "@aws-cdk/core" "1.87.0" + "@aws-cdk/cx-api" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-s3@1.79.0": @@ -565,15 +565,16 @@ "@aws-cdk/core" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-s3@1.83.0", "@aws-cdk/aws-s3@^1.57.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.83.0.tgz#466f458e7140fc858fc4bcaa1a67756068cdcf64" - integrity sha512-hHqXO/zpWdXHnPPlCOKHgikrqq7zAW1NozNDhEgYEmBeeY6WKXPRh2eNe7WtMZ5ETzbOOIg6s7BgC3wYQRsthg== +"@aws-cdk/aws-s3@1.87.0", "@aws-cdk/aws-s3@^1.57.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.87.0.tgz#b0021af5c374ac097459f31bdd9c7661627bc509" + integrity sha512-vHyGk6vpD7tdBIRpWatNgXvkAN1PCMvVPP0U0YKBI1SRjjcxWfbdsI9UFsf62NkXkc+nrb69S/y5ccm2XnaIew== dependencies: - "@aws-cdk/aws-events" "1.83.0" - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/aws-kms" "1.83.0" - "@aws-cdk/core" "1.83.0" + "@aws-cdk/aws-events" "1.87.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/aws-kms" "1.87.0" + "@aws-cdk/core" "1.87.0" + "@aws-cdk/cx-api" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-servicediscovery@1.79.0": @@ -612,17 +613,17 @@ "@aws-cdk/core" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-sns@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.83.0.tgz#1caa0d95b8e72b18bc6c48b7b4ed9a238614b71d" - integrity sha512-GLByI3GCLnKL4uulHz43uJLzxNvfljjLrWzNY2+oKEAcBkDSd99i39xA1SWxg3lJWCaeSx3Y5ZmuDNk4AvHETg== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.83.0" - "@aws-cdk/aws-events" "1.83.0" - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/aws-kms" "1.83.0" - "@aws-cdk/aws-sqs" "1.83.0" - "@aws-cdk/core" "1.83.0" +"@aws-cdk/aws-sns@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.87.0.tgz#9d8751f86240fd596893f24b794aec9a28ce2f97" + integrity sha512-WkrWcWhAVdtHWz9HbR4AwGxkxwXOr6V28/2K7c8yiMMPVhK1+jEcoC+6cgTsrAsHUfUnUxWMdwmJsno4/QTgdA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.87.0" + "@aws-cdk/aws-events" "1.87.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/aws-kms" "1.87.0" + "@aws-cdk/aws-sqs" "1.87.0" + "@aws-cdk/core" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-sqs@1.79.0": @@ -636,15 +637,15 @@ "@aws-cdk/core" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-sqs@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.83.0.tgz#9121316b9edde5a1c0e0a131b5ec862b2c09173b" - integrity sha512-if3Zpeib0A8vwynLT5STZstPZ6A43Z1mIBbwjuw+qBOd8n2QvzoMTHkKUFK9pZkNyWue30lPSJWGKK2rfiZphQ== +"@aws-cdk/aws-sqs@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.87.0.tgz#0c8feba90b1367f5f8578db61f0b154c947def8e" + integrity sha512-iMC2bMlm0zClKk2zEmVEOFCimj6VLY3KcghNdaXLmTGPdY2O27JcA+qEmQaOf4afXL0ykkyEQUPiTdHnnqsKLg== dependencies: - "@aws-cdk/aws-cloudwatch" "1.83.0" - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/aws-kms" "1.83.0" - "@aws-cdk/core" "1.83.0" + "@aws-cdk/aws-cloudwatch" "1.87.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/aws-kms" "1.87.0" + "@aws-cdk/core" "1.87.0" constructs "^3.2.0" "@aws-cdk/aws-ssm@1.79.0": @@ -658,15 +659,15 @@ "@aws-cdk/core" "1.79.0" constructs "^3.2.0" -"@aws-cdk/aws-ssm@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.83.0.tgz#ea0143dc96729bfded9dbf379f9fe3745aeba6a6" - integrity sha512-zxul2nUy0ioLaY3JbFo/VDiyum43ni9jc+Iku6lS9sgOH+Y7RnD6k7zeQ8Gpf1JJLGhkV+mjyRnu0SAEmzj0rQ== +"@aws-cdk/aws-ssm@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.87.0.tgz#ec33b8cbc36daba8fdb6716a1a55f901374c2ba1" + integrity sha512-FSugBXMKj7yqWIqT5mb1Nyis7w59K2QVe3M5gpXCBizADAQU/y0CL3wW7r9sJ3jixWLVGj0G2qm0PgnhIUUOcg== dependencies: - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/aws-kms" "1.83.0" - "@aws-cdk/cloud-assembly-schema" "1.83.0" - "@aws-cdk/core" "1.83.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/aws-kms" "1.87.0" + "@aws-cdk/cloud-assembly-schema" "1.87.0" + "@aws-cdk/core" "1.87.0" constructs "^3.2.0" "@aws-cdk/cfnspec@1.79.0": @@ -700,10 +701,10 @@ jsonschema "^1.4.0" semver "^7.3.2" -"@aws-cdk/cloud-assembly-schema@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.83.0.tgz#581a365433573d68aaa64ceceb9591214bdd4c22" - integrity sha512-n6m7qkADyG4O3XX3sEKYlE6q9mFk2bYb/AdAZoDSWEi87XZKr3XMCKKH3+uITDnc8b3aysGWmIntVg2MNgvkJA== +"@aws-cdk/cloud-assembly-schema@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.87.0.tgz#c7fb111d72956463841fc15c47287a06d28b90a7" + integrity sha512-GzeGll7Jtsl1ryUPP/rA6wvRli04na37D1P4mlKka0qbjUKwYvbWTnqpW/mHRAQOmdXhX/l/762/FzsL9WF9Lw== dependencies: jsonschema "^1.4.0" semver "^7.3.2" @@ -756,17 +757,17 @@ ignore "^5.1.8" minimatch "^3.0.4" -"@aws-cdk/core@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.83.0.tgz#17362c97b3d0f805fb0efceae3b64a22d0abbccb" - integrity sha512-Oj+1eGRSng639vpAy+qUdG/rghMnXxFmLHcM37Hk2/Sgy5eCCzD0sEQnIbaQ9/RH8E8bgRJtAxyjdLthmSuLlw== +"@aws-cdk/core@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.87.0.tgz#8182c597b8ac2184ba57dfeb9298cdb82e977012" + integrity sha512-G7oEGKSahwWjgMBLrCYD3uelDVfQuoHw84AcgtTHdugM9ncTAso+UZNGH2HzoSVLcGqzRKh+epXtBVjPb+b4aQ== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.83.0" - "@aws-cdk/cx-api" "1.83.0" - "@aws-cdk/region-info" "1.83.0" + "@aws-cdk/cloud-assembly-schema" "1.87.0" + "@aws-cdk/cx-api" "1.87.0" + "@aws-cdk/region-info" "1.87.0" "@balena/dockerignore" "^1.0.2" constructs "^3.2.0" - fs-extra "^9.0.1" + fs-extra "^9.1.0" ignore "^5.1.8" minimatch "^3.0.4" @@ -783,18 +784,18 @@ "@aws-cdk/core" "1.79.0" constructs "^3.2.0" -"@aws-cdk/custom-resources@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.83.0.tgz#c3a315500b70efe7ae697df02e44a4047bc6c532" - integrity sha512-Rprw2C+dUKDEORXVZ7MssS+kr0ad2hQSHVWMmdU7pfyYIXGT+VyzeqhUb1f75YHB2/aATtdOE6vMzCsaeLyiLQ== - dependencies: - "@aws-cdk/aws-cloudformation" "1.83.0" - "@aws-cdk/aws-ec2" "1.83.0" - "@aws-cdk/aws-iam" "1.83.0" - "@aws-cdk/aws-lambda" "1.83.0" - "@aws-cdk/aws-logs" "1.83.0" - "@aws-cdk/aws-sns" "1.83.0" - "@aws-cdk/core" "1.83.0" +"@aws-cdk/custom-resources@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.87.0.tgz#e390c6d38f521538ec34d7d227246473e3dae1b5" + integrity sha512-Rz1RTE0f2wR5V+DtxgoZfyyXD5mQUFnc83MVlyevhZZiz08E/2Vsu+aY5jdryiS6mYNh+OgxIFxwh6kopiEC0Q== + dependencies: + "@aws-cdk/aws-cloudformation" "1.87.0" + "@aws-cdk/aws-ec2" "1.87.0" + "@aws-cdk/aws-iam" "1.87.0" + "@aws-cdk/aws-lambda" "1.87.0" + "@aws-cdk/aws-logs" "1.87.0" + "@aws-cdk/aws-sns" "1.87.0" + "@aws-cdk/core" "1.87.0" constructs "^3.2.0" "@aws-cdk/cx-api@1.56.0": @@ -821,12 +822,12 @@ "@aws-cdk/cloud-assembly-schema" "1.79.0" semver "^7.3.2" -"@aws-cdk/cx-api@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.83.0.tgz#c36cef39f37c2615e6a64de14dc5192639f3e381" - integrity sha512-rbvkR8IGOfUHwhJHQ0aWg37K5ed3yMpWZ60/YTZSF89aVaUpr+HoVQLU8a61j4dPofinm4joi60dZbMlqgUF7g== +"@aws-cdk/cx-api@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.87.0.tgz#13cd4acbdfcc49ab784bcc9e9a56d1662b0054e4" + integrity sha512-UgxrUIGDd5XHCLqPWUPEVr1YtQdhXS3zs72unCUSqNEsKkOwC3g4Iz3BforNkHRcMubNgW/Ko8EFelUqMzhTtA== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.83.0" + "@aws-cdk/cloud-assembly-schema" "1.87.0" semver "^7.3.2" "@aws-cdk/region-info@1.57.0": @@ -839,10 +840,10 @@ resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.79.0.tgz#2a47339ca2dd48b9ecae46e985c8c3dcb83de577" integrity sha512-klnXCc1Cd/krE4VOXJ1Blvey8ucPRzuwgGacPsCV2ugMSlaJSbdGqKzTUNxcK2o8g9PaEuJ5lNjfwqqyvp571g== -"@aws-cdk/region-info@1.83.0": - version "1.83.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.83.0.tgz#aec59f22469192f19aa4df5f94f8d65cdd07d8e0" - integrity sha512-5gwX1xhEPFb9eFFGNdHm99vSCJqrYIEvwIjFmoG8zpjV8TWtiY7D8WbhxED7Q2pejEMnuUtvmMXKgSH+lo6ung== +"@aws-cdk/region-info@1.87.0": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.87.0.tgz#72ee68b993ddcff6def5bd0dc48924911f221093" + integrity sha512-7hNHmriuFlVoTlzV+SYZycDyVioFeMjwRxJ45V8F8WCizrz53BItr+6DBx+Ey+TKvUeHM7H1422VazptqVWrnw== "@aws-cdk/yaml-cfn@1.79.0": version "1.79.0" @@ -1111,7 +1112,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7": +"@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.5", "@babel/parser@^7.12.7": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== @@ -1711,10 +1712,10 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@eslint/eslintrc@^0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.2.tgz#d01fc791e2fc33e88a29d6f3dc7e93d0cd784b76" - integrity sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ== +"@eslint/eslintrc@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318" + integrity sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg== dependencies: ajv "^6.12.4" debug "^4.1.1" @@ -1723,7 +1724,7 @@ ignore "^4.0.6" import-fresh "^3.2.1" js-yaml "^3.13.1" - lodash "^4.17.19" + lodash "^4.17.20" minimatch "^3.0.4" strip-json-comments "^3.1.1" @@ -2687,25 +2688,25 @@ integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== "@octokit/auth-token@^2.4.0": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.4.tgz#ee31c69b01d0378c12fd3ffe406030f3d94d3b56" - integrity sha512-LNfGu3Ro9uFAYh10MUZVaT7X2CnNm2C8IDQmabx+3DygYIQjs9FwzFAHN/0t6mu5HEPhxcb1XOuxdpY82vCg2Q== + version "2.4.5" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.5.tgz#568ccfb8cb46f36441fac094ce34f7a875b197f3" + integrity sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA== dependencies: - "@octokit/types" "^6.0.0" + "@octokit/types" "^6.0.3" "@octokit/endpoint@^6.0.1": - version "6.0.10" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.10.tgz#741ce1fa2f4fb77ce8ebe0c6eaf5ce63f565f8e8" - integrity sha512-9+Xef8nT7OKZglfkOMm7IL6VwxXUQyR7DUSU0LH/F7VNqs8vyd7es5pTfz9E7DwUIx7R3pGscxu1EBhYljyu7Q== + version "6.0.11" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.11.tgz#082adc2aebca6dcefa1fb383f5efb3ed081949d1" + integrity sha512-fUIPpx+pZyoLW4GCs3yMnlj2LfoXTWDUVPTC4V3MUEKZm48W+XYpeWSZCv+vYF1ZABUm2CqnDVf1sFtIYrj7KQ== dependencies: - "@octokit/types" "^6.0.0" + "@octokit/types" "^6.0.3" is-plain-object "^5.0.0" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-2.2.0.tgz#123e0438a0bc718ccdac3b5a2e69b3dd00daa85b" - integrity sha512-274lNUDonw10kT8wHg8fCcUc1ZjZHbWv0/TbAwb0ojhBQqZYc1cQ/4yqTVTtPMDeZ//g7xVEYe/s3vURkRghPg== +"@octokit/openapi-types@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-3.3.0.tgz#8797af01feb524e3f4978e1c9bf7bc7c18ef9d25" + integrity sha512-s3dd32gagPmKaSLNJ9aPNok7U+tl69YLESf6DgQz5Ml/iipPZtif3GLvWpNXoA6qspFm1LFUZX+C3SqWX/Y/TQ== "@octokit/plugin-enterprise-rest@^6.0.1": version "6.0.1" @@ -2720,9 +2721,9 @@ "@octokit/types" "^2.0.1" "@octokit/plugin-request-log@^1.0.0": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.2.tgz#394d59ec734cd2f122431fbaf05099861ece3c44" - integrity sha512-oTJSNAmBqyDR41uSMunLQKMX0jmEXbwD1fpz8FG27lScV3RhtGfBa1/BBLym+PxcC16IBlF7KH9vP1BUYxA+Eg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.3.tgz#70a62be213e1edc04bb8897ee48c311482f9700d" + integrity sha512-4RFU4li238jMJAzLgAwkBAw+4Loile5haQMQr+uhFq27BmyJXcXSKvoQKqh0agsZEiUlW6iSv3FAgvmGkur7OQ== "@octokit/plugin-rest-endpoint-methods@2.4.0": version "2.4.0" @@ -2742,18 +2743,18 @@ once "^1.4.0" "@octokit/request-error@^2.0.0": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.4.tgz#07dd5c0521d2ee975201274c472a127917741262" - integrity sha512-LjkSiTbsxIErBiRh5wSZvpZqT4t0/c9+4dOe0PII+6jXR+oj/h66s7E4a/MghV7iT8W9ffoQ5Skoxzs96+gBPA== + version "2.0.5" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.5.tgz#72cc91edc870281ad583a42619256b380c600143" + integrity sha512-T/2wcCFyM7SkXzNoyVNWjyVlUwBvW3igM3Btr/eKYiPmucXTtkxt2RBsf6gn3LTzaLSLTQtNmvg+dGsOxQrjZg== dependencies: - "@octokit/types" "^6.0.0" + "@octokit/types" "^6.0.3" deprecation "^2.0.0" once "^1.4.0" "@octokit/request@^5.2.0": - version "5.4.12" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.12.tgz#b04826fa934670c56b135a81447be2c1723a2ffc" - integrity sha512-MvWYdxengUWTGFpfpefBBpVmmEYfkwMoxonIB3sUGp5rhdgwjXL1ejo6JbgzG/QD9B/NYt/9cJX1pxXeSIUCkg== + version "5.4.13" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.13.tgz#eec5987b3e96f984fc5f41967e001170c6d23a18" + integrity sha512-WcNRH5XPPtg7i1g9Da5U9dvZ6YbTffw9BN2rVezYiE7couoSyaRsw0e+Tl8uk1fArHE7Dn14U7YqUDy59WaqEw== dependencies: "@octokit/endpoint" "^6.0.1" "@octokit/request-error" "^2.0.0" @@ -2793,18 +2794,18 @@ dependencies: "@types/node" ">= 8" -"@octokit/types@^6.0.0", "@octokit/types@^6.0.3": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.2.1.tgz#7f881fe44475ab1825776a4a59ca1ae082ed1043" - integrity sha512-jHs9OECOiZxuEzxMZcXmqrEO8GYraHF+UzNVH2ACYh8e/Y7YoT+hUf9ldvVd6zIvWv4p3NdxbQ0xx3ku5BnSiA== +"@octokit/types@^6.0.3": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.6.0.tgz#165d0e7940d5f910b3373f02336c161dcdf097fe" + integrity sha512-nmFoU3HCbw1AmnZU/eto2VvzV06+N7oAqXwMmAHGlNDF+KFykksh/VlAl85xc1P5T7Mw8fKYvXNaImNHCCH/rg== dependencies: - "@octokit/openapi-types" "^2.2.0" + "@octokit/openapi-types" "^3.3.0" "@types/node" ">= 8" "@sinonjs/commons@^1.7.0": - version "1.8.1" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" - integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw== + version "1.8.2" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.2.tgz#858f5c4b48d80778fde4b9d541f27edc0d56488b" + integrity sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw== dependencies: type-detect "4.0.8" @@ -2821,9 +2822,9 @@ integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@types/aws-lambda@^8.10.70": - version "8.10.70" - resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.70.tgz#1d1c79730669b337208e3476f7a16150d43fcaf5" - integrity sha512-adaPn39OKMIzCxaf2KHBu4d3MJKLGdm27zxAyag+rAI1UTwgtgEgrwRpuzN1NDMZn/i6vRxJZRbsSmlw7I0/Sg== + version "8.10.71" + resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.71.tgz#ab3084038411ce42f63b975e67aafb163f3aa353" + integrity sha512-l0Lag6qq06AlKllprAJ3pbgVUbXCjRGRb7VpHow8IMn2BMHTPR0t5OD97/w8CR1+wA5XZuWQoXLjYvdlk2kQrQ== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.12" @@ -2912,19 +2913,19 @@ "@types/istanbul-lib-report" "*" "@types/jest@26.x", "@types/jest@^26.0.19", "@types/jest@^26.0.7": - version "26.0.19" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.19.tgz#e6fa1e3def5842ec85045bd5210e9bb8289de790" - integrity sha512-jqHoirTG61fee6v6rwbnEuKhpSKih0tuhqeFbCmMmErhtu3BYlOZaXWjffgOstMM4S/3iQD31lI5bGLTrs97yQ== + version "26.0.20" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.20.tgz#cd2f2702ecf69e86b586e1f5223a60e454056307" + integrity sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA== dependencies: jest-diff "^26.0.0" pretty-format "^26.0.0" "@types/json-schema@^7.0.3": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" - integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== + version "7.0.7" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" + integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== -"@types/minimatch@*": +"@types/minimatch@*", "@types/minimatch@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== @@ -2935,9 +2936,9 @@ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*", "@types/node@>= 8", "@types/node@^14.0.27", "@types/node@^14.14.19": - version "14.14.20" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.20.tgz#f7974863edd21d1f8a494a73e8e2b3658615c340" - integrity sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A== + version "14.14.22" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18" + integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -3250,9 +3251,9 @@ archiver-utils@^2.1.0: readable-stream "^2.0.0" archiver@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.1.0.tgz#05b0f6f7836f3e6356a0532763d2bb91017a7e37" - integrity sha512-iKuQUP1nuKzBC2PFlGet5twENzCfyODmvkxwDV0cEFXavwcLrIW5ssTuHi9dyTPvpWr6Faweo2eQaQiLIwyXTA== + version "5.2.0" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.2.0.tgz#25aa1b3d9febf7aec5b0f296e77e69960c26db94" + integrity sha512-QEAKlgQuAtUxKeZB9w5/ggKXh21bZS+dzzuQ0RPBC20qtDCbTyzqmisoeJP46MP39fg4B4IcyvR+yeyEBdblsQ== dependencies: archiver-utils "^2.1.0" async "^3.2.0" @@ -3297,6 +3298,11 @@ array-differ@^2.0.3: resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== + array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -3314,6 +3320,11 @@ array-union@^1.0.2: dependencies: array-uniq "^1.0.1" +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== + array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -3324,7 +3335,7 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -array.prototype.map@^1.0.1: +array.prototype.map@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.3.tgz#1609623618d3d84134a37d4a220030c2bd18420b" integrity sha512-nNcb30v0wfDyIe26Yif3PcV1JXQp4zEeEfupG7L4SRjnD6HLbO5b2a7eVSba53bOx4YCHYMBHt+Fp4vYstneRA== @@ -3340,6 +3351,11 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + asap@^2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -3434,9 +3450,9 @@ aws-cdk@1.79.0: yargs "^16.2.0" aws-sdk@^2.761.0, aws-sdk@^2.804.0: - version "2.823.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.823.0.tgz#bbf7feaeb63959a451ec964b19cef6ea7128097a" - integrity sha512-djrTmGu9MqsoUoaVRXjIjNPCfHBsrBBGFyZtgRhUGz9toa1ubZb2W2buUnT3ncws/bhOj5+7nO+qxAf/JzH9NA== + version "2.832.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.832.0.tgz#db45c2fd560999fb30da4fdf5216cbd0c469cdc7" + integrity sha512-LHoqfaSEvNJxZlVjofwcTR1ldEfoOvJKhkz4IeuHIup0QiA1uNWatEWLg0zRL0lmv9IWTERXJ3heqyM0fsuWyg== dependencies: buffer "4.9.2" events "1.1.1" @@ -3562,9 +3578,9 @@ before-after-hook@^2.0.0: integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== binary-extensions@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" - integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bl@^4.0.3: version "4.0.3" @@ -3616,7 +3632,7 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.14.5, browserslist@^4.16.0: +browserslist@^4.14.5, browserslist@^4.16.1: version "4.16.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.1.tgz#bf757a2da376b3447b800a16f0f1c96358138766" integrity sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA== @@ -3673,6 +3689,11 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" +builtin-modules@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" + integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== + builtins@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" @@ -3754,13 +3775,13 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -call-bind@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" - integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== +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.0" + get-intrinsic "^1.0.2" call-me-maybe@^1.0.1: version "1.0.1" @@ -3838,9 +3859,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== caniuse-lite@^1.0.30001173: - version "1.0.30001173" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001173.tgz#3c47bbe3cd6d7a9eda7f50ac016d158005569f56" - integrity sha512-R3aqmjrICdGCTAnSXtNyvWYMK3YtV5jwudbq0T7nN9k4kmE4CBuwPqyJ+KBzepSTh0huivV2gLbSMEzTTmfeYw== + version "1.0.30001180" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001180.tgz#67abcd6d1edf48fa5e7d1e84091d1d65ab76e33b" + integrity sha512-n8JVqXuZMVSPKiPiypjFtDTXc4jWIdjxull0f92WLo7e1MSi3uJ3NvveakSh/aCl1QKFAvIz3vIj0v+0K+FrXw== capture-exit@^2.0.0: version "2.0.0" @@ -3898,10 +3919,10 @@ charenc@0.0.2: resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= -chokidar@^3.4.3: - version "3.5.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.0.tgz#458a4816a415e9d3b3caa4faec2b96a6935a9e65" - integrity sha512-JgQM9JS92ZbFR4P90EvmzNpSGhpPBGBSj10PILeDyYFwp4h2/D9OM03wsJ4zW1fEp4ka2DGrnUeD7FuvQ2aZ2Q== +"chokidar@>=2.0.0 <4.0.0", chokidar@^3.4.3: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -3970,16 +3991,16 @@ cli-cursor@^3.1.0: restore-cursor "^3.1.0" cli-highlight@^2.1.4: - version "2.1.9" - resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.9.tgz#4f4ecb05326d70d56d4b4249fabf9a70fb002497" - integrity sha512-t8RNIZgiI24i/mslZ8XT8o660RUj5ZbUJpEZrZa/BNekTzdC2LfMRAnt0Y7sgzNM4FGW5tmWg/YnbTH8o1eIOQ== + version "2.1.10" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.10.tgz#26a087da9209dce4fcb8cf5427dc97cd96ac173a" + integrity sha512-CcPFD3JwdQ2oSzy+AMG6j3LRTkNjM82kzcSKzoVw6cLanDCJNlsLjeqVTOTfOfucnWv5F0rmBemVf1m9JiIasw== dependencies: chalk "^4.0.0" highlight.js "^10.0.0" mz "^2.4.0" parse5 "^5.1.1" parse5-htmlparser2-tree-adapter "^6.0.0" - yargs "^15.0.0" + yargs "^16.0.0" cli-truncate@^2.1.0: version "2.1.0" @@ -4179,9 +4200,9 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= constructs@^3.0.2, constructs@^3.2.0: - version "3.2.96" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.96.tgz#1e6021f462f9c7b7f80565343349147595f99460" - integrity sha512-94Uugxwq3ZWgP8bhnSGa7Qud4U4RtfV4CX2/EyFLSq36eRsfiQ1zcv/W0ReOiFgKKZOhoaFP6GNueXN95o24QA== + version "3.2.117" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.117.tgz#d6f29d822f99530f4cb5c79089dc2e1bd0d0e9d3" + integrity sha512-zYDlALAHWdopUzMGr3aZPlPR8f+OEYr1+QZCkLqi/eyUjbOmlPQ6xwrlDoOaJNgpMf727T9Yo+hokCjIRsZweQ== conventional-changelog-angular@^5.0.3: version "5.0.12" @@ -4291,17 +4312,17 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js-compat@^3.8.0: - version "3.8.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.2.tgz#3717f51f6c3d2ebba8cbf27619b57160029d1d4c" - integrity sha512-LO8uL9lOIyRRrQmZxHZFl1RV+ZbcsAkFWTktn5SmH40WgLtSNYN4m4W2v9ONT147PxBY/XrRhrWq8TlvObyUjQ== + version "3.8.3" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.3.tgz#9123fb6b9cad30f0651332dc77deba48ef9b0b3f" + integrity sha512-1sCb0wBXnBIL16pfFG1Gkvei6UzvKyTNYpiC41yrdjEv0UoJoq9E/abTMzyYJ6JpTkAj15dLjbqifIzEBDVvog== dependencies: - browserslist "^4.16.0" + browserslist "^4.16.1" semver "7.0.0" core-js@^3.6.5: - version "3.8.2" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.2.tgz#0a1fd6709246da9ca8eff5bb0cbd15fba9ac7044" - integrity sha512-FfApuSRgrR6G5s58casCBd9M2k+4ikuu4wbW6pJyYU7bd9zvFc9qf7vr5xmrZOhT9nn+8uwlH1oRR9jTnFoA3A== + version "3.8.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.3.tgz#c21906e1f14f3689f93abcc6e26883550dd92dd0" + integrity sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -4442,6 +4463,11 @@ dateformat@^3.0.0: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== +de-indent@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= + debug@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" @@ -4573,6 +4599,35 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= +depcheck@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/depcheck/-/depcheck-1.3.1.tgz#b4765503da3e6ba1f3810dad0c34c0a649e7e91d" + integrity sha512-lLMfqX2J+ZF3xUEqHpgCNk+dA8erAfW6XURGNAIyUS4KL2i3lezXGYDevYk3G0rWCwy/3CpxE8ek10NrURFOtQ== + dependencies: + "@babel/parser" "^7.12.5" + "@babel/traverse" "^7.12.5" + builtin-modules "^3.1.0" + camelcase "^6.2.0" + cosmiconfig "^7.0.0" + debug "^4.2.0" + deps-regex "^0.1.4" + ignore "^5.1.8" + js-yaml "^3.14.0" + json5 "^2.1.3" + lodash "^4.17.20" + minimatch "^3.0.4" + multimatch "^5.0.0" + please-upgrade-node "^3.2.0" + query-ast "^1.0.3" + readdirp "^3.5.0" + require-package-name "^2.0.1" + resolve "^1.18.1" + sass "^1.29.0" + scss-parser "^1.0.4" + semver "^7.3.2" + vue-template-compiler "^2.6.12" + yargs "^16.1.0" + depd@^1.1.2, depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -4583,6 +4638,11 @@ deprecation@^2.0.0, deprecation@^2.3.1: resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== +deps-regex@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deps-regex/-/deps-regex-0.1.4.tgz#518667b7691460a5e7e0a341be76eb7ce8090184" + integrity sha1-UYZnt2kUYKXn4KNBvnbrfOgJAYQ= + detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" @@ -4684,9 +4744,9 @@ ecc-jsbn@~0.1.1: safer-buffer "^2.1.0" electron-to-chromium@^1.3.634: - version "1.3.634" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.634.tgz#82ea400f520f739c4f6ff00c1f7524827a917d25" - integrity sha512-QPrWNYeE/A0xRvl/QP3E0nkaEvYUvH3gM04ZWYtIa6QlSpEetRlRI1xvQ7hiMIySHHEV+mwDSX8Kj4YZY6ZQAw== + version "1.3.646" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.646.tgz#a7dc089d6d83b6d6cc01f91de524e91f12e6ccfa" + integrity sha512-P+3q8ugIPezulqoBYaLoUsF0fT4YNpe+zEDmdDUDnHZUAeSbBjMbis+JjJp9duU8BdfWV3VXf27NTBcwhRTsAQ== emittery@^0.7.1: version "0.7.2" @@ -4746,40 +4806,25 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0-next.1: - version "1.17.7" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" - integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== +es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: + version "1.18.0-next.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.2.tgz#088101a55f0541f595e7e057199e27ddc8f3a5c2" + integrity sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw== dependencies: + call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" + get-intrinsic "^1.0.2" has "^1.0.3" has-symbols "^1.0.1" is-callable "^1.2.2" + is-negative-zero "^2.0.1" is-regex "^1.1.1" - object-inspect "^1.8.0" + object-inspect "^1.9.0" object-keys "^1.1.1" - object.assign "^4.1.1" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-abstract@^1.18.0-next.1: - version "1.18.0-next.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" - integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.2" - is-negative-zero "^2.0.0" - is-regex "^1.1.1" - object-inspect "^1.8.0" - object-keys "^1.1.1" - object.assign "^4.1.1" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.3" + string.prototype.trimstart "^1.0.3" es-array-method-boxes-properly@^1.0.0: version "1.0.0" @@ -4787,16 +4832,16 @@ es-array-method-boxes-properly@^1.0.0: integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-get-iterator@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.1.tgz#b93ddd867af16d5118e00881396533c1c6647ad9" - integrity sha512-qorBw8Y7B15DVLaJWy6WdEV/ZkieBcu6QCq/xzWzGOKJqgG1j754vXRfZ3NY7HSShneqU43mPB4OkQBTkvHhFw== + version "1.1.2" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.2.tgz#9234c54aba713486d7ebde0220864af5e2b283f7" + integrity sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.1" + call-bind "^1.0.2" + get-intrinsic "^1.1.0" has-symbols "^1.0.1" - is-arguments "^1.0.4" - is-map "^2.0.1" - is-set "^2.0.1" + is-arguments "^1.1.0" + is-map "^2.0.2" + is-set "^2.0.2" is-string "^1.0.5" isarray "^2.0.5" @@ -4827,9 +4872,9 @@ es6-promisify@^5.0.0: es6-promise "^4.0.3" esbuild@^0.8.31: - version "0.8.31" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.8.31.tgz#c21e7adb3ad283c951a53de7ad64a5ae2df2ed34" - integrity sha512-7EIU0VdUxltwivjVezX3HgeNzeIVR1snkrAo57WdUnuBMykdzin5rTrxwCDM6xQqj0RL/HjOEm3wFr2ijHKeaA== + version "0.8.36" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.8.36.tgz#f5b7c61473721c7d53ffe7c88708e25f3b6182f3" + integrity sha512-kcUQB61Tf8rLJ3mOwP2ruWi/iFufaQcEs4No+JA6e7W2kMOtFExOsbyeFpEF6zNacwk2RF5fYUz5jfZwgn/SJg== escalade@^3.1.1: version "3.1.1" @@ -4897,12 +4942,12 @@ eslint-visitor-keys@^2.0.0: integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== eslint@^7.16.0: - version "7.17.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.17.0.tgz#4ccda5bf12572ad3bf760e6f195886f50569adb0" - integrity sha512-zJk08MiBgwuGoxes5sSQhOtibZ75pz0J35XTRlZOk9xMffhpA9BTbQZxoXZzOl5zMbleShbGwtw+1kGferfFwQ== + version "7.18.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.18.0.tgz#7fdcd2f3715a41fe6295a16234bd69aed2c75e67" + integrity sha512-fbgTiE8BfUJZuBeq2Yi7J3RB3WGUQ9PNuNbmgi6jt9Iv8qrkxfy19Ds3OpL1Pm7zg3BtTVhvcUZbIRQ0wmSjAQ== dependencies: "@babel/code-frame" "^7.0.0" - "@eslint/eslintrc" "^0.2.2" + "@eslint/eslintrc" "^0.3.0" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -4926,7 +4971,7 @@ eslint@^7.16.0: js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" - lodash "^4.17.19" + lodash "^4.17.20" minimatch "^3.0.4" natural-compare "^1.4.0" optionator "^0.9.1" @@ -5259,9 +5304,9 @@ flatted@^2.0.1: integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== flatted@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067" - integrity sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA== + version "3.1.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== flush-write-stream@^1.0.0: version "1.1.1" @@ -5319,15 +5364,15 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== +fs-extra@^9.0.1, 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 "^1.0.0" + universalify "^2.0.0" fs-minipass@^1.2.5: version "1.2.7" @@ -5410,10 +5455,10 @@ get-caller-file@^2.0.1, get-caller-file@^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.0, get-intrinsic@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" - integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.0.tgz#892e62931e6938c8a23ea5aaebcfb67bd97da97e" + integrity sha512-M11rgtQp5GZMZzDL7jLTNxbDfurpzuau5uqRWDPvlHjfvg3TdScAZo96GLvhMjImrmR8uAt0FS2RLoMrfWGKlg== dependencies: function-bind "^1.1.1" has "^1.0.3" @@ -5524,9 +5569,9 @@ git-up@^4.0.0: parse-url "^5.0.0" git-url-parse@^11.1.2: - version "11.4.3" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.4.3.tgz#1610284edf1f14964180f5b3399ec68b692cfd87" - integrity sha512-LZTTk0nqJnKN48YRtOpR8H5SEfp1oM2tls90NuZmBxN95PnCvmuXGzqQ4QmVirBgKx2KPYfPGteX3/raWjKenQ== + version "11.4.4" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.4.4.tgz#5d747debc2469c17bc385719f7d0427802d83d77" + integrity sha512-Y4o9o7vQngQDIU9IjyCmRJBin5iYjI5u9ZITnddRZpD7dcCFQj2sL2XuMNbLRE4b4B/4ENPsp2Q8P44fjAZ0Pw== dependencies: git-up "^4.0.0" @@ -5693,6 +5738,11 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +he@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + "heap@>= 0.2.0": version "0.2.6" resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" @@ -5819,9 +5869,9 @@ humanize-ms@^1.2.1: ms "^2.0.0" husky@^4.3.6: - version "4.3.7" - resolved "https://registry.yarnpkg.com/husky/-/husky-4.3.7.tgz#ca47bbe6213c1aa8b16bbd504530d9600de91e88" - integrity sha512-0fQlcCDq/xypoyYSJvEuzbDPHFf8ZF9IXKJxlrnvxABTSzK1VPT2RKYQKrcgJ+YD39swgoB6sbzywUqFxUiqjw== + version "4.3.8" + resolved "https://registry.yarnpkg.com/husky/-/husky-4.3.8.tgz#31144060be963fd6850e5cc8f019a1dfe194296d" + integrity sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow== dependencies: chalk "^4.0.0" ci-info "^2.0.0" @@ -5990,6 +6040,20 @@ inquirer@^6.2.0: strip-ansi "^5.1.0" through "^2.3.6" +invariant@2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + integrity sha1-nh9WrArNtr8wMwbzOL47IErmA2A= + dependencies: + loose-envify "^1.0.0" + +invariant@2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" @@ -6014,7 +6078,7 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" -is-arguments@^1.0.4: +is-arguments@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== @@ -6167,12 +6231,12 @@ is-lambda@^1.0.1: resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= -is-map@^2.0.1: +is-map@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== -is-negative-zero@^2.0.0: +is-negative-zero@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== @@ -6233,7 +6297,7 @@ is-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= -is-set@^2.0.1: +is-set@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== @@ -6379,7 +6443,7 @@ iterate-iterator@^1.0.1: resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.1.tgz#1693a768c1ddd79c969051459453f082fe82e9f6" integrity sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw== -iterate-value@^1.0.0: +iterate-value@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/iterate-value/-/iterate-value-1.0.2.tgz#935115bd37d006a52046535ebc8d07e9c9337f57" integrity sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ== @@ -6765,12 +6829,12 @@ jmespath@0.15.0: resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc= -js-tokens@^4.0.0: +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1: +js-yaml@^3.13.1, js-yaml@^3.14.0: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -6869,7 +6933,7 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json5@2.x, json5@^2.1.2: +json5@2.x, json5@^2.1.2, json5@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== @@ -7041,9 +7105,9 @@ lint-staged@^10.5.3: stringify-object "^3.3.0" listr2@^3.2.2: - version "3.2.3" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.2.3.tgz#ef9e0d790862f038dde8a9837be552b1adfd1c07" - integrity sha512-vUb80S2dSUi8YxXahO8/I/s29GqnOL8ozgHVLjfWQXa03BNEeS1TpBLjh2ruaqq5ufx46BRGvfymdBSuoXET5w== + version "3.3.0" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.3.0.tgz#fab51211e4152d88bab7d91e4f7f896b0d9e5ba1" + integrity sha512-G9IFI/m65icgVlifS0wMQnvn35/8VJGzEb3crpE4NnaegQYQOn/wP7yqi9TTJQ/eoxme4UaPbffBK1XqKP/DOg== dependencies: chalk "^4.1.0" cli-truncate "^2.1.0" @@ -7053,6 +7117,7 @@ listr2@^3.2.2: p-map "^4.0.0" rxjs "^6.6.3" through "^2.3.8" + wrap-ansi "^7.0.0" load-json-file@^1.0.0: version "1.1.0" @@ -7196,7 +7261,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.12, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.2.1: +lodash@^4.17.12, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4, lodash@^4.2.1: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== @@ -7229,6 +7294,13 @@ log4js@^6.3.0: rfdc "^1.1.4" streamroller "^2.2.4" +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" @@ -7396,9 +7468,9 @@ meow@^4.0.0: trim-newlines "^2.0.0" meow@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.0.tgz#0fcaa267e35e4d58584b8205923df6021ddcc7ba" - integrity sha512-fNWkgM1UVMey2kf24yLiccxLihc5W+6zVus3/N0b+VfnJgxV99E9u04X6NAiKdg6ED7DAQBX5sy36NM0QJZkWA== + version "8.1.2" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== dependencies: "@types/minimist" "^1.2.0" camelcase-keys "^6.2.2" @@ -7513,9 +7585,9 @@ minipass-collect@^1.0.2: minipass "^3.0.0" minipass-fetch@^1.1.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.3.2.tgz#573766fb1ae86e30df916a6b060bc2e801bf8f37" - integrity sha512-/i4fX1ss+Dtwyk++OsAI6SEV+eE1dvI6W+0hORdjfruQ7VD5uYTetJIHcEMjWiEiszWjn2aAtP1CB/Q4KfeoYA== + version "1.3.3" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.3.3.tgz#34c7cea038c817a8658461bf35174551dce17a0a" + integrity sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ== dependencies: minipass "^3.1.0" minipass-sized "^1.0.3" @@ -7664,6 +7736,17 @@ multimatch@^3.0.0: arrify "^1.0.1" minimatch "^3.0.4" +multimatch@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" + integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== + dependencies: + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" + mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -7774,9 +7857,9 @@ node-notifier@^8.0.0: which "^2.0.2" node-releases@^1.1.69: - version "1.1.69" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.69.tgz#3149dbde53b781610cd8b486d62d86e26c3725f6" - integrity sha512-DGIjo79VDEyAnRlfSqYTsy+yoHd2IOjJiKUozD2MV2D85Vso6Bug56mb9tT/fY5Urt0iqk01H7x+llAruDR2zA== + version "1.1.70" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.70.tgz#66e0ed0273aa65666d7fe78febe7634875426a08" + integrity sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw== nopt@^4.0.1: version "4.0.3" @@ -7935,7 +8018,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.8.0: +object-inspect@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== @@ -7952,7 +8035,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.0, object.assign@^4.1.1: +object.assign@^4.1.0, object.assign@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== @@ -8244,9 +8327,9 @@ parse-json@^4.0.0: json-parse-better-errors "^1.0.1" parse-json@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" - integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" error-ex "^1.3.1" @@ -8254,12 +8337,14 @@ parse-json@^5.0.0: lines-and-columns "^1.1.6" parse-path@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.2.tgz#ef14f0d3d77bae8dd4bc66563a4c151aac9e65aa" - integrity sha512-HSqVz6iuXSiL8C1ku5Gl1Z5cwDd9Wo0q8CoffdAghP6bz8pJa1tcMC+m4N+z6VAS8QdksnIGq1TB6EgR4vPR6w== + version "4.0.3" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.3.tgz#82d81ec3e071dcc4ab49aa9f2c9c0b8966bb22bf" + integrity sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA== dependencies: is-ssh "^1.3.0" protocols "^1.4.0" + qs "^6.9.4" + query-string "^6.13.8" parse-url@^5.0.0: version "5.0.2" @@ -8487,15 +8572,16 @@ promise-retry@^1.1.1: retry "^0.10.0" promise.allsettled@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.2.tgz#d66f78fbb600e83e863d893e98b3d4376a9c47c9" - integrity sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg== + version "1.0.4" + resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.4.tgz#65e71f2a604082ed69c548b68603294090ee6803" + integrity sha512-o73CbvQh/OnPFShxHcHxk0baXR2a1m4ozb85ha0H14VEoi/EJJLa9mnPfEWJx9RjA9MLfhdjZ8I6HhWtBa64Ag== dependencies: - array.prototype.map "^1.0.1" + array.prototype.map "^1.0.3" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - iterate-value "^1.0.0" + es-abstract "^1.18.0-next.2" + get-intrinsic "^1.0.2" + iterate-value "^1.0.2" promptly@^3.2.0: version "3.2.0" @@ -8537,9 +8623,9 @@ protoduck@^5.0.1: genfun "^5.0.0" proxy-agent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-4.0.0.tgz#a92976af3fbc7d846f2e850e2ac5ac6ca3fb74c7" - integrity sha512-8P0Y2SkwvKjiGU1IkEfYuTteioMIDFxPL4/j49zzt5Mz3pG1KO+mIrDG1qH0PQUHTTczjwGcYl+EzfXiFj5vUQ== + version "4.0.1" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-4.0.1.tgz#326c3250776c7044cd19655ccbfadf2e065a045c" + integrity sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA== dependencies: agent-base "^6.0.0" debug "4" @@ -8600,11 +8686,33 @@ q@^1.4.1, q@^1.5.1: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= +qs@^6.9.4: + version "6.9.6" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" + integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== + qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +query-ast@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/query-ast/-/query-ast-1.0.3.tgz#4a18374950fa80cbf9b03d7b945bbac8bb4250bf" + integrity sha512-k7z4jilpZCujhiJ+QeKSwYXHc9HxqiVKlVE7/em0zBfPpcqnXKUP8F7ld7XaAkO6oXeAD7yonqcNJWqOF2pSGA== + dependencies: + invariant "2.2.2" + lodash "^4.17.15" + +query-string@^6.13.8: + version "6.13.8" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.8.tgz#8cf231759c85484da3cf05a851810d8e825c1159" + integrity sha512-jxJzQI2edQPE/NPUOusNjO/ZOGqr1o2OBa/3M00fU76FsLXDVbJDv/p7ng5OdQyorKrkRz1oqfwmbe5MAMePQg== + dependencies: + decode-uri-component "^0.2.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" @@ -8770,7 +8878,7 @@ readdir-scoped-modules@^1.0.0: graceful-fs "^4.1.2" once "^1.3.0" -readdirp@~3.5.0: +readdirp@^3.5.0, readdirp@~3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== @@ -8856,9 +8964,9 @@ regjsgen@^0.5.1: integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== regjsparser@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" - integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + version "0.6.6" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.6.tgz#6d8c939d1a654f78859b08ddcc4aa777f3fa800a" + integrity sha512-jjyuCp+IEMIm3N1H1LLTJW1EISEJV9+5oHdEyrt43Pg9cDSb6rrLZei2cVWpl0xTjmmlpec/lEQGYgM7xfpGCQ== dependencies: jsesc "~0.5.0" @@ -8950,6 +9058,11 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +require-package-name@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9" + integrity sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk= + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -9098,6 +9211,13 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" +sass@^1.29.0: + version "1.32.5" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.5.tgz#2882d22ad5748c05fa9bff6c3b0ffbc4f4b9e1dc" + integrity sha512-kU1yJ5zUAmPxr7f3q0YXTAd1oZjSR1g3tYyv+xu0HZSl5JiNOaE987eiz7wCUvbm4I9fGWGU2TgApTtcP4GMNQ== + dependencies: + chokidar ">=2.0.0 <4.0.0" + sax@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" @@ -9115,6 +9235,14 @@ saxes@^5.0.0: dependencies: xmlchars "^2.2.0" +scss-parser@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/scss-parser/-/scss-parser-1.0.4.tgz#61cdeb28701ffcb497954b9b05729c6d38eb8b9f" + integrity sha512-oDZwDfY2JhnDrHNZPcdcPNVTpAXsJBY2/uhFfN0IzMy1xExAfJDcI1Yl/VXhfRsdQL3wLeg6/Oxt3cafBOuMzQ== + dependencies: + invariant "2.2.4" + lodash "^4.17.4" + semver-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" @@ -9386,6 +9514,11 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -9518,6 +9651,11 @@ streamroller@^2.2.4: debug "^4.1.1" fs-extra "^8.1.0" +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + string-argv@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" @@ -9566,7 +9704,7 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string.prototype.trimend@^1.0.1: +string.prototype.trimend@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== @@ -9574,7 +9712,7 @@ string.prototype.trimend@^1.0.1: call-bind "^1.0.0" define-properties "^1.1.3" -string.prototype.trimstart@^1.0.1: +string.prototype.trimstart@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== @@ -9760,9 +9898,9 @@ tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: yallist "^3.0.3" tar@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f" - integrity sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg== + version "6.1.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" + integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -9995,9 +10133,9 @@ tslib@^2.0.1: integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== tsutils@^3.17.1: - version "3.19.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.19.0.tgz#9387cb5fcb71579aa0909c509604f8a7fbe1cff1" - integrity sha512-A7BaLUPvcQ1cxVu72YfD+UMI3SQPTDv/w4ol6TOwLyI0hwfG9EC+cYlhdflJTmtYTgZ3KqdPSe/otxU4K3kArg== + version "3.20.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.20.0.tgz#ea03ea45462e146b53d70ce0893de453ff24f698" + integrity sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg== dependencies: tslib "^1.8.1" @@ -10075,9 +10213,9 @@ typescript@^3.9.7: integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== uglify-js@^3.1.4: - version "3.12.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.4.tgz#93de48bb76bb3ec0fc36563f871ba46e2ee5c7ee" - integrity sha512-L5i5jg/SHkEqzN18gQMTWsZk3KelRsfD1wUVNqtq0kzqWQqcJjyL8yc1o8hJgRrWqrAl2mUFbhfznEIoi7zi2A== + version "3.12.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.5.tgz#83241496087c640efe9dfc934832e71725aba008" + integrity sha512-SgpgScL4T7Hj/w/GexjnBHi3Ien9WS1Rpfg5y91WXMj9SY997ZCQU76mH4TpLwwfmMvoOU8wiaRkIf6NaH3mtg== uid-number@0.0.6: version "0.0.6" @@ -10153,11 +10291,6 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== - universalify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" @@ -10182,9 +10315,9 @@ upath@^1.2.0: integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== uri-js@^4.2.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" - integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== + 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" @@ -10271,6 +10404,14 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vue-template-compiler@^2.6.12: + version "2.6.12" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz#947ed7196744c8a5285ebe1233fe960437fcc57e" + integrity sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg== + dependencies: + de-indent "^1.0.2" + he "^1.1.0" + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" @@ -10600,7 +10741,7 @@ yargs@^14.2.2: y18n "^4.0.0" yargs-parser "^15.0.1" -yargs@^15.0.0, yargs@^15.3.1, yargs@^15.4.1: +yargs@^15.3.1, yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -10617,7 +10758,7 @@ yargs@^15.0.0, yargs@^15.3.1, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.2.0: +yargs@^16.0.0, yargs@^16.1.0, 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== From a6007ec95525de4c9c6a5ea804cb1ffc30760916 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 27 Jan 2021 23:25:23 -0500 Subject: [PATCH 329/481] v0.7.2 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/cli/test/add-cdk/package.json | 4 ++-- packages/cli/test/base-ts/package.json | 6 +++--- packages/cli/test/base/package.json | 6 +++--- packages/cli/test/cdk-command/package.json | 6 +++--- packages/cli/test/config-invalid/package.json | 6 +++--- packages/cli/test/config-no-name/package.json | 6 +++--- packages/cli/test/config-not-found/package.json | 6 +++--- packages/cli/test/config/package.json | 6 +++--- packages/cli/test/context/package.json | 6 +++--- packages/cli/test/eslint-ignore-rule/package.json | 6 +++--- packages/cli/test/eslint-ignore/package.json | 6 +++--- packages/cli/test/eslint-ts/package.json | 6 +++--- packages/cli/test/eslint/package.json | 6 +++--- packages/cli/test/handler-function-not-found/package.json | 6 +++--- packages/cli/test/handler-not-found/package.json | 6 +++--- packages/cli/test/jest-ts/package.json | 6 +++--- packages/cli/test/jest/package.json | 6 +++--- packages/cli/test/lambda-override-eslintrc/package.json | 6 +++--- packages/cli/test/lambda-override-tsconfig/package.json | 6 +++--- packages/cli/test/mismatched-cdk-versions/package.json | 6 +++--- packages/cli/test/stack-no-prefix/package.json | 6 +++--- packages/cli/test/stack-set-env/package.json | 6 +++--- packages/cli/test/start-base/package.json | 6 +++--- packages/cli/test/start-guide/package.json | 6 +++--- packages/cli/test/start-no-src-path/package.json | 6 +++--- packages/cli/test/template-app-ts/package.json | 6 +++--- packages/cli/test/template-app/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 4 ++-- 32 files changed, 88 insertions(+), 88 deletions(-) diff --git a/lerna.json b/lerna.json index 85484e0247..5ea7f2060f 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.7.1" + "version": "0.7.2" } diff --git a/packages/cli/package.json b/packages/cli/package.json index a416023a51..582dc90b4d 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.7.1", + "version": "0.7.2", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -47,8 +47,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^0.7.1", - "@serverless-stack/resources": "^0.7.1", + "@serverless-stack/core": "^0.7.2", + "@serverless-stack/resources": "^0.7.2", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index b827185c0e..55948062a3 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -2,12 +2,12 @@ "name": "@serverless-stack/cli-test-add-cdk", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "add-cdk": "sst add-cdk" }, "dependencies": { - "@serverless-stack/cli": "^0.7.1" + "@serverless-stack/cli": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index 64555221cc..f9b83a7387 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base-ts", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "start": "sst start", "build": "sst build", @@ -13,8 +13,8 @@ "dependencies": { "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index 3aff295506..c7c6122d77 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "start": "sst start", "build": "sst build", @@ -17,8 +17,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index 720899f2d8..57cac9d858 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-cdk-command", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "cdk": "sst cdk" }, "dependencies": { - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index c03bd6ecaa..78612f2c47 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-invalid", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index 8848748900..3e632ce060 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-no-name", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index 1510fd82d0..e793073dc5 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-not-found", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index 7d6be64698..dd9959986c 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-test", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index 2b37d42ae9..a37b4dd769 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-context", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index 74f865eb18..ef505fb4bc 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ignore-rule", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index ec5d592bea..cffa317726 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ignore", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index 88388a7303..ebd7aa8c21 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ts", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index 336fe26e9d..f1cca0df40 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index 796fd5eebb..ad0de688aa 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-handler-function-not-found", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index a3434a3dc4..8f507a4ef6 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-handler-not-found", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index 984dc5eed3..2d9a3ec0cf 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest-ts", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "build": "sst build", "test": "sst test" @@ -18,8 +18,8 @@ "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/aws-sqs": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index 9750863454..4b51392d67 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "test": "sst test" }, @@ -14,8 +14,8 @@ "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/lambda-override-eslintrc/package.json b/packages/cli/test/lambda-override-eslintrc/package.json index e85f9b1829..e48435a86c 100644 --- a/packages/cli/test/lambda-override-eslintrc/package.json +++ b/packages/cli/test/lambda-override-eslintrc/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-eslintrc", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "build": "sst build", "start": "sst start" @@ -11,8 +11,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json index 423c970067..caa9f67f49 100644 --- a/packages/cli/test/lambda-override-tsconfig/package.json +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-tsconfig", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "build": "sst build", "start": "sst start" @@ -11,8 +11,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index f78a73de1d..ba214eab9f 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-mismatched-cdk-versions", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "build": "sst build" }, @@ -12,8 +12,8 @@ "@aws-cdk/aws-iam": "1.57.0", "@aws-cdk/aws-s3": "^1.57.0", "@aws-cdk/core": "1.56.0", - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index 8ef3826ea6..fee5f62496 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-stack-no-prefix", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index 545854d86d..2073a2638b 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-stack-set-env", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index f01b6f9f4a..8a961826c1 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-base", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "start": "sst start", "build": "sst build", @@ -14,8 +14,8 @@ "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/start-guide/package.json b/packages/cli/test/start-guide/package.json index 5d2e3cd36d..59b78776c3 100644 --- a/packages/cli/test/start-guide/package.json +++ b/packages/cli/test/start-guide/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-guide", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "add-package": "sst add-package", "start": "sst start", @@ -19,8 +19,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "license": "ISC" } diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index ed224d92c6..d5fd7e271e 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-no-src-path", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "start": "sst start", "build": "sst build", @@ -15,8 +15,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1", + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2", "mirrarray": "^2.0.0" }, "license": "ISC" diff --git a/packages/cli/test/template-app-ts/package.json b/packages/cli/test/template-app-ts/package.json index 0c8d2ae97e..23a2a6242d 100644 --- a/packages/cli/test/template-app-ts/package.json +++ b/packages/cli/test/template-app-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/template-app-ts", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "start": "sst start", "build": "sst build", @@ -19,8 +19,8 @@ "license": "ISC", "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "devDependencies": { "@aws-cdk/assert": "1.79.0", diff --git a/packages/cli/test/template-app/package.json b/packages/cli/test/template-app/package.json index 85a4834019..4f53d1e38c 100644 --- a/packages/cli/test/template-app/package.json +++ b/packages/cli/test/template-app/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/template-app", "private": true, "description": "tests", - "version": "0.7.1", + "version": "0.7.2", "scripts": { "start": "sst start", "build": "sst build", @@ -19,8 +19,8 @@ "license": "ISC", "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.1", - "@serverless-stack/resources": "^0.7.1" + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2" }, "devDependencies": { "@aws-cdk/assert": "1.79.0" diff --git a/packages/core/package.json b/packages/core/package.json index 52f481ed1b..21c22c4aae 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.7.1", + "version": "0.7.2", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index d27e3a7cc5..639e13e424 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.7.1", + "version": "0.7.2", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 0c1349deae..55e3f3d02f 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.7.1", + "version": "0.7.2", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", @@ -32,8 +32,8 @@ "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/aws-lambda-nodejs": "1.79.0", "@aws-cdk/aws-logs": "1.79.0", - "@aws-cdk/cx-api": "1.79.0", "@aws-cdk/core": "1.79.0", + "@aws-cdk/cx-api": "1.79.0", "@types/jest": "^26.0.7", "chalk": "^4.1.0", "cross-spawn": "^7.0.3", From ef4b72973c400ff45297dd0998f876e88ddecb0b Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 28 Jan 2021 15:42:33 -0500 Subject: [PATCH 330/481] Tweaking docs --- www/sidebars.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/sidebars.js b/www/sidebars.js index b21b3d41dd..cfb809a7ff 100644 --- a/www/sidebars.js +++ b/www/sidebars.js @@ -18,7 +18,7 @@ module.exports = { ], }, { - Constructs: [ + "Added Constructs": [ "constructs/api", "constructs/app", "constructs/function", From 302356ca4cd28d0f9c43578ca6ae4358082d3501 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 28 Jan 2021 20:16:29 -0500 Subject: [PATCH 331/481] For the npm run -- option add helper warning and docs --- packages/cli/bin/scripts.js | 54 +++++++++++++++++++++++++++++++--- www/docs/deploying-your-app.md | 6 ++++ www/docs/packages/cli.md | 19 +++++++++++- www/docs/working-locally.md | 17 ----------- 4 files changed, 74 insertions(+), 22 deletions(-) diff --git a/packages/cli/bin/scripts.js b/packages/cli/bin/scripts.js index c82f8886ac..304678e459 100755 --- a/packages/cli/bin/scripts.js +++ b/packages/cli/bin/scripts.js @@ -18,7 +18,7 @@ const fs = require("fs-extra"); const yargs = require("yargs"); const chalk = require("chalk"); const spawn = require("cross-spawn"); -const { initializeLogger } = require("@serverless-stack/core"); +const { logger, initializeLogger } = require("@serverless-stack/core"); const packageJson = require("../package.json"); const paths = require("../scripts/util/paths"); @@ -64,7 +64,7 @@ function getCliInfo() { cdkOptions: { ...cdkOptions, verbose: argv.verbose ? 2 : 0, - noColor: process.env.NO_COLOR === 'true', + noColor: process.env.NO_COLOR === "true", }, }; } @@ -88,6 +88,48 @@ function addOptions(currentCmd) { }; } +/** + * If `npm run` is used to execute these commands, you need to add `--` before + * the options. If it's not used, the command will run but the options will not be + * set correctly. The region or the stage might get set as the stack. This + * function simply checks if the stack is set to a common stage name or a region. + * And shows a warning. + */ +function checkNpmScriptArgs() { + const commonStageAndRegions = [ + "qa", + "dev", + "prod", + "stage", + "staging", + "preprod", + "production", + "development", + "eu-west-1", + "eu-west-2", + "sa-east-1", + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "ap-south-1", + "ca-central-1", + "eu-central-1", + "ap-northeast-2", + "ap-southeast-1", + "ap-southeast-2", + "ap-northeast-1", + ]; + + if (commonStageAndRegions.indexOf(argv.stack) !== -1) { + logger.warn( + chalk.yellow( + `\nWarning: It looks like you might be setting the stack option to "${argv.stack}" by mistake. If you are using "npm run", make sure to add "--" before the options. For example, "npm run deploy -- --stage prod".\n` + ) + ); + } +} + const argv = yargs .parserConfiguration({ "boolean-negation": false }) @@ -175,12 +217,12 @@ const argv = yargs // Disable color if (!process.stdout.isTTY || argv.noColor) { - process.env.NO_COLOR = 'true'; + process.env.NO_COLOR = "true"; chalk.level = 0; } if (argv.verbose) { - process.env.DEBUG = 'true'; + process.env.DEBUG = "true"; } // Empty and recreate the .build directory @@ -195,6 +237,10 @@ switch (script) { case cmd.remove: { const cliInfo = getCliInfo(); + if (cliInfo.npm) { + checkNpmScriptArgs(); + } + // Prepare app prepareCdk(argv, cliInfo).then(({ config }) => internals[script](argv, config, cliInfo) diff --git a/www/docs/deploying-your-app.md b/www/docs/deploying-your-app.md index 662b240f58..895997e5b0 100644 --- a/www/docs/deploying-your-app.md +++ b/www/docs/deploying-your-app.md @@ -21,6 +21,12 @@ This uses your **default AWS Profile**. And the **region** and **stage** specifi AWS_PROFILE=my-profile npx sst deploy --stage prod --region eu-west-1 ``` +Just note that if you are using `npm run` to deploy, you'll need to be careful while setting the stage or region. You'll need to use an extra `--` for the options. For example: + +```bash +npm run deploy -- --stage prod --region eu-west-1 +``` + ## Removing an app Finally, you can remove all your stacks and their resources from AWS using. diff --git a/www/docs/packages/cli.md b/www/docs/packages/cli.md index cb4b167b2f..6f6277fb16 100644 --- a/www/docs/packages/cli.md +++ b/www/docs/packages/cli.md @@ -111,7 +111,7 @@ Runs your tests using Jest. Takes all the [Jest CLI options](https://jestjs.io/d ### `cdk` -The sst CLI comes with a forked version of AWS CDK that it uses internally. This command gives direct access to it. To use this command you'll need to pass in the location of the CDK app. In our cases this is going to be generated in `build/run.js`. For example, to run the CDK `list` command you'll need to. +The SST CLI comes with a forked version of AWS CDK that it uses internally. This command gives direct access to it. To use this command you'll need to pass in the location of the CDK app. In our cases this is going to be generated in `build/run.js`. For example, to run the CDK `list` command you'll need to. ```bash npx sst cdk --app=build/run.js list @@ -136,3 +136,20 @@ AWS_PROFILE=production npx sst deploy ``` Where `production` is a profile defined locally in your `~/.aws/credentials`. + +## Package scripts + +If you used the `create-serverless-stack` CLI to create your app, the above commands (`start`, `build`, `deploy`, and `remove`) are also available in your `package.json`. So you can run them using. + +```bash +# With npm +npm run +# Or with Yarn +yarn run +``` + +Just note that for `npm run`, you'll need to use an extra `--` for the options. For example: + +```bash +npm run build -- --stage alpha +``` diff --git a/www/docs/working-locally.md b/www/docs/working-locally.md index c98f50a528..a5b396ae31 100644 --- a/www/docs/working-locally.md +++ b/www/docs/working-locally.md @@ -56,23 +56,6 @@ yarn test Internally, SST uses [Jest](https://jestjs.io/). You'll just need to add your tests to the `test/` directory. -## Package scripts - -The above commands (`start`, `build`, `deploy`, and `remove`) are also available in your `package.json`. So you can run them using. - -```bash -# With npm -npm run -# Or with Yarn -yarn run -``` - -Just note that for `npm run`, you'll need to use an extra `--` for the options. For example: - -```bash -npm run build -- --stage alpha -``` - ## Linting, type checking Your code is automatically linted when building or deploying. If you'd like to customize the lint rules, add a `.eslintrc.json` in your project root. If you'd like to turn off linting, add `*` to an `.eslintignore` file in your project root. From e028167672d0907ec0c3b708520bb4b9ecc5ad79 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 28 Jan 2021 22:00:05 -0500 Subject: [PATCH 332/481] Implement constructs --- packages/cli/test/start-guide/lib/ApiStack.js | 29 +- .../cli/test/start-guide/lib/DynamoDBStack.js | 12 +- .../cli/test/start-guide/lib/MiscStack.js | 35 +++ packages/cli/test/start-guide/lib/index.js | 6 +- .../test/start-guide/services/misc/handler.js | 30 ++ packages/resources/package.json | 8 + packages/resources/src/Api.ts | 69 +++-- packages/resources/src/Function.ts | 92 ++++++ packages/resources/src/Queue.ts | 54 ++++ packages/resources/src/Scheduler.ts | 84 +++++ packages/resources/src/Table.ts | 98 ++++++ packages/resources/src/Topic.ts | 66 ++++ packages/resources/src/index.ts | 4 + yarn.lock | 292 ++++++++++++++++++ 14 files changed, 823 insertions(+), 56 deletions(-) create mode 100644 packages/cli/test/start-guide/lib/MiscStack.js create mode 100644 packages/cli/test/start-guide/services/misc/handler.js create mode 100644 packages/resources/src/Queue.ts create mode 100644 packages/resources/src/Scheduler.ts create mode 100644 packages/resources/src/Table.ts create mode 100644 packages/resources/src/Topic.ts diff --git a/packages/cli/test/start-guide/lib/ApiStack.js b/packages/cli/test/start-guide/lib/ApiStack.js index 31e6fb1c5c..40c8bf30ad 100644 --- a/packages/cli/test/start-guide/lib/ApiStack.js +++ b/packages/cli/test/start-guide/lib/ApiStack.js @@ -1,6 +1,4 @@ import * as cdk from "@aws-cdk/core"; -import * as iam from "@aws-cdk/aws-iam"; - import * as sst from "@serverless-stack/resources"; export default class ApiStack extends sst.Stack { @@ -10,10 +8,10 @@ export default class ApiStack extends sst.Stack { constructor(scope, id, props) { super(scope, id, props); - const { tableName, tableArn } = props; + const { table } = props; // Create API - const apiRet = new sst.Api(this, "Api", { + const api = new sst.Api(this, "Api", { routes: { "GET /notes": "list.main", "POST /notes": "create.main", @@ -24,32 +22,21 @@ export default class ApiStack extends sst.Stack { defaultAuthorizationType: 'AWS_IAM', defaultFunctionProps: { srcPath: 'services/notes', - environment: { tableName }, - initialPolicy: [ new iam.PolicyStatement({ - actions: [ - "dynamodb:Scan", - "dynamodb:Query", - "dynamodb:GetItem", - "dynamodb:PutItem", - "dynamodb:UpdateItem", - "dynamodb:DeleteItem", - "dynamodb:DescribeTable", - ], - effect: iam.Effect.ALLOW, - resources: [ tableArn ], - }) ] + environment: { tableName: table.dynamodbTable.tableName }, }, }); - this.httpApi = apiRet.httpApi; + api.attachPermissions([ table ]); // set API endpoint as stack output new cdk.CfnOutput(this, `ApiEndpoint`, { - value: this.httpApi.apiEndpoint, + value: api.httpApi.apiEndpoint, }); // set log group name as stack output new cdk.CfnOutput(this, `AccessLogGroupName`, { - value: apiRet.accessLogGroup.logGroupName, + value: api.accessLogGroup.logGroupName, }); + + this.httpApi = api.httpApi; } } diff --git a/packages/cli/test/start-guide/lib/DynamoDBStack.js b/packages/cli/test/start-guide/lib/DynamoDBStack.js index 407d634014..9183329ba9 100644 --- a/packages/cli/test/start-guide/lib/DynamoDBStack.js +++ b/packages/cli/test/start-guide/lib/DynamoDBStack.js @@ -8,10 +8,14 @@ export default class DynamoDBStack extends sst.Stack { constructor(scope, id, props) { super(scope, id, props); - this.table = new dynamodb.Table(this, "Table", { - billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, // Use on-demand billing mode - sortKey: { name: "noteId", type: dynamodb.AttributeType.STRING }, - partitionKey: { name: "userId", type: dynamodb.AttributeType.STRING }, + const table = new sst.Table(this, "Notes", { + attributes: { + userId: dynamodb.AttributeType.STRING, + noteId: dynamodb.AttributeType.STRING, + }, + primaryIndex: { partitionKey: 'userId', sortKey: 'noteId' }, }); + + this.table = table; } } diff --git a/packages/cli/test/start-guide/lib/MiscStack.js b/packages/cli/test/start-guide/lib/MiscStack.js new file mode 100644 index 0000000000..856f331d09 --- /dev/null +++ b/packages/cli/test/start-guide/lib/MiscStack.js @@ -0,0 +1,35 @@ +import * as sst from "@serverless-stack/resources"; + +export default class MiscStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + const event = new sst.Topic(this, "Topic", { + subscribers: [ + "services/misc/handler.snsSubscriber", + ], + }); + + const queue = new sst.Queue(this, "Queue", { + consumer: "services/misc/handler.sqsConsumer", + }); + + const cron = new sst.Scheduler(this, "Scheduler", { + schedule: 'rate(1 minute)', + job: { + handler: "services/misc/handler.cron1", + environment: { topicArn: event.snsTopic.topicArn }, + }, + }); + cron.attachPermissions([ event ]); + + const cron2 = new sst.Scheduler(this, "Scheduler2", { + schedule: 'rate(1 minute)', + job: { + handler: "services/misc/handler.cron2", + environment: { queueUrl: queue.sqsQueue.queueUrl }, + }, + }); + cron2.attachPermissions([ queue ]); + } +} diff --git a/packages/cli/test/start-guide/lib/index.js b/packages/cli/test/start-guide/lib/index.js index ea11dfef87..b751956852 100644 --- a/packages/cli/test/start-guide/lib/index.js +++ b/packages/cli/test/start-guide/lib/index.js @@ -2,6 +2,7 @@ import S3Stack from "./S3Stack"; import CognitoStack from "./CognitoStack"; import DynamoDBStack from "./DynamoDBStack"; import ApiStack from "./ApiStack"; +import MiscStack from "./MiscStack"; // Add stacks export default function main(app) { @@ -10,12 +11,13 @@ export default function main(app) { const s3Stack = new S3Stack(app, "s3"); const apiStack = new ApiStack(app, "api", { - tableName: dbStack.table.tableName, - tableArn: dbStack.table.tableArn, + table: dbStack.table, }); new CognitoStack(app, "cognito", { apiId: apiStack.httpApi.httpApiId, bucketArn: s3Stack.bucket.bucketArn, }); + + new MiscStack(app, "misc"); } diff --git a/packages/cli/test/start-guide/services/misc/handler.js b/packages/cli/test/start-guide/services/misc/handler.js new file mode 100644 index 0000000000..8cb594a006 --- /dev/null +++ b/packages/cli/test/start-guide/services/misc/handler.js @@ -0,0 +1,30 @@ +import AWS from "aws-sdk"; + +const sqs = new AWS.SQS(); +const sns = new AWS.SNS(); + +export const cron1 = async (event) => { + console.log('=== cron1 called ==='); + console.log(event); + await sns.publish({ + TopicArn: process.env.topicArn, + Message: JSON.stringify({ hello: 'sns' }), + MessageStructure : 'string', + }).promise(); +}; +export const cron2 = async (event) => { + console.log('=== cron2 called ==='); + console.log(event); + await sqs.sendMessage({ + QueueUrl: process.env.queueUrl, + MessageBody: JSON.stringify({ hello: 'sqs' }), + }).promise(); +}; +export const snsSubscriber = async (event) => { + console.log('=== snsSubscriber called ==='); + console.log(event); +}; +export const sqsConsumer = async (event) => { + console.log('=== sqsConsumer called ==='); + console.log(event); +}; diff --git a/packages/resources/package.json b/packages/resources/package.json index 0a83e05bc5..46a12aa1cb 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -27,9 +27,17 @@ "access": "public" }, "dependencies": { + "@aws-cdk/aws-dynamodb": "1.79.0", + "@aws-cdk/aws-events": "1.79.0", + "@aws-cdk/aws-events-targets": "1.79.0", + "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", + "@aws-cdk/aws-lambda-event-sources": "1.79.0", "@aws-cdk/aws-lambda-nodejs": "1.79.0", "@aws-cdk/aws-logs": "1.79.0", + "@aws-cdk/aws-sns": "1.79.0", + "@aws-cdk/aws-sns-subscriptions": "1.79.0", + "@aws-cdk/aws-sqs": "1.79.0", "@aws-cdk/core": "1.79.0", "@types/jest": "^26.0.7", "chalk": "^4.1.0", diff --git a/packages/resources/src/Api.ts b/packages/resources/src/Api.ts index 0bb1c4f458..ab85d9eca5 100644 --- a/packages/resources/src/Api.ts +++ b/packages/resources/src/Api.ts @@ -4,7 +4,7 @@ import * as apig from "@aws-cdk/aws-apigatewayv2"; import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; import { App } from "./App"; -import { Function as Func, FunctionProps } from "./Function"; +import { Function as Func, FunctionProps, FunctionPermissions } from "./Function"; const allowedMethods = [ apig.HttpMethod.GET, @@ -94,7 +94,7 @@ export class Api extends cdk.Construct { super(scope, id); const root = scope.node.root as App; - const { + let { // Convenience props cors, accessLog, @@ -104,17 +104,20 @@ export class Api extends cdk.Construct { // Full functionality props httpApiProps, } = props; - - //////////////////// - // Configure CORS - //////////////////// + const isCustomApiProps = httpApiProps !== undefined; // Validate input - if (cors !== undefined && httpApiProps !== undefined) { + if (httpApiProps !== undefined && cors !== undefined) { throw new Error(`Cannot define both cors and httpApiProps`); } + if (httpApiProps !== undefined && accessLog !== undefined) { + throw new Error(`Cannot define both accessLog and httpApiProps`); + } + + //////////////////// + // Configure CORS + //////////////////// - let apiProps; if (httpApiProps === undefined) { let corsPreflight; if (cors === undefined || cors === true) { @@ -124,47 +127,44 @@ export class Api extends cdk.Construct { allowOrigins: ["*"], }; } - apiProps = { corsPreflight }; - } else { - apiProps = { ...httpApiProps }; + httpApiProps = { corsPreflight }; } //////////////////// // Create Api //////////////////// - apiProps.apiName = apiProps.apiName || root.logicalPrefixedName(id); - this.httpApi = new apig.HttpApi(this, "Api", apiProps); + this.httpApi = new apig.HttpApi(this, "Api", { ...httpApiProps, + apiName: httpApiProps.apiName || root.logicalPrefixedName(id), + }); /////////////////////////// // Configure access log /////////////////////////// - // Validate input - if (accessLog !== undefined && httpApiProps !== undefined) { - throw new Error(`Cannot define both accessLog and httpApiProps`); - } - // note: Access log configuration is not supported by L2 constructs as of CDK v1.85.0. We // need to define it at L1 construct level. - if ( - httpApiProps === undefined && - (accessLog === undefined || accessLog === true) - ) { + if ( ! isCustomApiProps && (accessLog === undefined || accessLog === true)) { // create log group this.accessLogGroup = new logs.LogGroup(this, "LogGroup"); // get log format const logFormat = JSON.stringify({ - path: "$context.path", - status: "$context.status", - routeKey: "$context.routeKey", - protocol: "$context.protocol", + // request info + requestTime: "$context.requestTime", requestId: "$context.requestId", - ip: "$context.identity.sourceIp", httpMethod: "$context.httpMethod", - requestTime: "$context.requestTime", - responseLength: "$context.responseLength", + path: "$context.path", + routeKey: "$context.routeKey", + status: "$context.status", responseLatency: "$context.responseLatency", + // integration info + integrationRequestId: "$context.integration.requestId", + integrationStatus: "$context.integration.status", + integrationLatency: "$context.integration.latency", + integrationServiceStatus: "$context.integration.integrationStatus", + // caller info + ip: "$context.identity.sourceIp", + userAgent: "$context.identity.userAgent", cognitoIdentityId: "$context.identity.cognitoIdentityId", }); @@ -266,4 +266,15 @@ export class Api extends cdk.Construct { getFunction(routeKey: string): Func { return this.functions[routeKey]; } + + attachPermissions(permissions: FunctionPermissions) { + Object.values(this.functions).forEach(func => + func.attachPermissions(permissions) + ); + } + + attachPermissionsToRoutes(routeKey: string, permissions: FunctionPermissions) { + const func = this.getFunction(routeKey); + func.attachPermissions(permissions) + } } diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index 06762d29c7..7a9489fcb4 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -1,8 +1,12 @@ import path from "path"; import * as cdk from "@aws-cdk/core"; +import * as iam from "@aws-cdk/aws-iam"; import * as lambda from "@aws-cdk/aws-lambda"; import { App } from "./App"; +import { Table } from "./Table"; +import { Queue } from "./Queue"; +import { Topic } from "./Topic"; import { builder } from "./util/builder"; export type HandlerProps = FunctionHandlerProps; @@ -27,6 +31,18 @@ export interface FunctionProps extends lambda.FunctionOptions { * @default - Defaults to NODEJS_12_X */ readonly runtime?: lambda.Runtime; + /** + * The amount of memory in MB allocated. + * + * @default - Defaults to 1024 + */ + readonly memorySize?: number; + /** + * The execution timeout in seconds. + * + * @default - Defaults to Duration.seconds(20) + */ + readonly timeout?: cdk.Duration; /** * Enable AWS X-Ray Tracing. * @@ -56,6 +72,11 @@ export interface FunctionHandlerProps { readonly handler: string; } +/** + * Doe props for Lambda function. + */ +export type FunctionPermissions = string | [ string ] | [ cdk.Construct ] | [ {(grantee: iam.IGrantable): iam.Grant;} ]; + export class Function extends lambda.Function { constructor(scope: cdk.Construct, id: string, props: FunctionProps) { const root = scope.node.root as App; @@ -63,6 +84,8 @@ export class Function extends lambda.Function { // Set defaults const handler = props.handler; const runtime = props.runtime || lambda.Runtime.NODEJS_12_X; + const timeout = props.timeout || cdk.Duration.seconds(20); + const memorySize = props.memorySize || 1024; const tracing = props.tracing || lambda.Tracing.ACTIVE; const bundle = props.bundle === undefined ? true : props.bundle; const srcPath = props.srcPath || "."; @@ -92,6 +115,8 @@ export class Function extends lambda.Function { super(scope, id, { ...props, runtime, + timeout, + memorySize, tracing, code: lambda.Code.fromAsset( path.resolve(__dirname, "../dist/stub.zip") @@ -114,6 +139,8 @@ export class Function extends lambda.Function { super(scope, id, { ...props, runtime, + timeout, + memorySize, tracing, handler: outHandler, code: lambda.Code.fromAsset(outZip), @@ -128,4 +155,69 @@ export class Function extends lambda.Function { // register Lambda function in app root.registerLambdaHandler({ srcPath, handler } as FunctionHandlerProps); } + + attachPermissions(permissions: FunctionPermissions) { + let policyActions = []; + + // Four patterns + // + // attachPermissions('*'); + // attachPermissions([ 'sns', 'sqs' ]); + // attachPermissions([ event, queue ]); + // attachPermissions([ + // event.snsTopic.grantPublicPermission, + // queue.sqsQueue.grantSendMessagesPermission, + // ]); + + // Case: 'admin' permissions => '*' + if (typeof permissions === "string") { + if (permissions === '*') { + policyActions.push("*"); + } + else { + throw new Error(`The specified permissions is not supported.`); + } + } + else { + permissions.forEach((permission: string | cdk.Construct | {(grantee: iam.IGrantable): iam.Grant}) => { + // Case: 's3' permissions => 's3:*' + if (typeof permission === 'string') { + policyActions.push(`${permission}:*`); + return; + } + + // Case: construct => 's3:*' + if (permission instanceof cdk.Construct) { + const cfnType = permission.node?.defaultChild?.constructor.name; + if (cfnType === 'CfnTable' || permission instanceof Table) { + policyActions.push(`dynamodb:*`); + } + else if (cfnType === 'CfnTopic' || permission instanceof Topic) { + policyActions.push(`sns:*`); + } + else if (cfnType === 'CfnQueue' || permission instanceof Queue) { + policyActions.push(`sqs:*`); + } + else if (cfnType === 'CfnBucket') { + policyActions.push(`s3:*`); + } + } + // Case: grant method + //else if (permission instanceof sqs.Queue) { + // policyActions.push(`sqs:*`); + //} + else { + throw new Error(`The specified permissions is not supported.`); + } + }); + } + + if (policyActions.length > 0) { + this.addToRolePolicy(new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: policyActions, + resources: ["*"], + })); + } + } } diff --git a/packages/resources/src/Queue.ts b/packages/resources/src/Queue.ts new file mode 100644 index 0000000000..b72d57a19c --- /dev/null +++ b/packages/resources/src/Queue.ts @@ -0,0 +1,54 @@ +import * as cdk from "@aws-cdk/core"; +import * as sqs from "@aws-cdk/aws-sqs"; +import * as lambdaEventSources from "@aws-cdk/aws-lambda-event-sources"; +import { App } from "./App"; +import { Function as Func, FunctionProps, FunctionPermissions } from "./Function"; + +export interface QueueProps { + readonly consumer: string | FunctionProps; + readonly queueProps?: sqs.QueueProps; +} + +export class Queue extends cdk.Construct { + public readonly sqsQueue: sqs.Queue; + public readonly consumerFunction: Func; + + constructor(scope: cdk.Construct, id: string, props: QueueProps) { + super(scope, id); + + const root = scope.node.root as App; + let { + // Convenience props + consumer, + // Full functionality props + queueProps, + } = props; + + //////////////////// + // Create Queue + //////////////////// + if (queueProps === undefined) { + queueProps = {}; + } + + this.sqsQueue = new sqs.Queue(this, "Queue", { ...(queueProps || {}), + queueName: queueProps.queueName || root.logicalPrefixedName(id), + }); + + /////////////////////////// + // Create Consumer + /////////////////////////// + + if ( ! consumer) { + throw new Error(`No consumer defined for the "${id}" Queue`); + } + const functionProps = (typeof consumer === "string") ? { handler: consumer } : consumer; + this.consumerFunction = new Func(this, `Consumer`, functionProps); + this.consumerFunction.addEventSource(new lambdaEventSources.SqsEventSource(this.sqsQueue)); + } + + attachPermissions(permissions: FunctionPermissions) { + this.consumerFunction.attachPermissions(permissions); + } +} + diff --git a/packages/resources/src/Scheduler.ts b/packages/resources/src/Scheduler.ts new file mode 100644 index 0000000000..fff1a81740 --- /dev/null +++ b/packages/resources/src/Scheduler.ts @@ -0,0 +1,84 @@ +import * as cdk from "@aws-cdk/core"; +import * as events from "@aws-cdk/aws-events"; +import * as eventsTargets from "@aws-cdk/aws-events-targets"; +import { App } from "./App"; +import { Function as Func, FunctionProps, FunctionPermissions } from "./Function"; + +export interface SchedulerProps { + readonly schedule: string | cdk.Duration | events.CronOptions; + readonly job: string | FunctionProps; + readonly ruleProps?: events.RuleProps; +} + +export class Scheduler extends cdk.Construct { + public readonly eventRule: events.Rule; + public readonly jobFunction: Func; + + constructor(scope: cdk.Construct, id: string, props: SchedulerProps) { + super(scope, id); + + const root = scope.node.root as App; + let { + // Convenience props + schedule, + job, + // Full functionality props + ruleProps, + } = props; + + // Validate input + if (ruleProps !== undefined && schedule !== undefined) { + throw new Error(`Cannot define both schedule and ruleProps`); + } + + /////////////////////////// + // Configure Rule + /////////////////////////// + + if (ruleProps === undefined) { + // Configure Schedule + let propSchedule: events.Schedule; + if ( ! schedule) { + throw new Error(`No schedule defined for the "${id}" Scheduler`); + } + if (typeof schedule === 'string' + && (schedule.startsWith('rate(') || schedule.startsWith('cron('))) { + propSchedule = events.Schedule.expression(schedule); + } + else if (schedule instanceof cdk.Duration) { + propSchedule = events.Schedule.rate(schedule); + } + else { + propSchedule = events.Schedule.cron(schedule as events.CronOptions); + } + + ruleProps = { + schedule: propSchedule + }; + } + + /////////////////////////// + // Create Targets + /////////////////////////// + + if ( ! job) { + throw new Error(`No job defined for the "${id}" Scheduler`); + } + + const functionProps = (typeof job === "string") ? { handler: job } : job; + this.jobFunction = new Func(this, "Job", functionProps); + + //////////////////// + // Create Rule + //////////////////// + + this.eventRule = new events.Rule(this, "Rule", { ...ruleProps, + targets: [ new eventsTargets.LambdaFunction(this.jobFunction) ], + }); + } + + attachPermissions(permissions: FunctionPermissions) { + this.jobFunction.attachPermissions(permissions) + } +} + diff --git a/packages/resources/src/Table.ts b/packages/resources/src/Table.ts new file mode 100644 index 0000000000..97a22bdb77 --- /dev/null +++ b/packages/resources/src/Table.ts @@ -0,0 +1,98 @@ +import * as cdk from "@aws-cdk/core"; +import * as dynamodb from "@aws-cdk/aws-dynamodb"; +import { App } from "./App"; + +export interface TableProps { + readonly attributes: { [key: string]: dynamodb.AttributeType }, + readonly primaryIndex: TableIndexProps; + readonly secondaryIndexes?: { [key: string]: TableIndexProps }; + readonly tableProps?: dynamodb.TableProps; +} + +export interface TableIndexProps { + readonly partitionKey: string; + readonly sortKey?: string; +} + +export class Table extends cdk.Construct { + public readonly dynamodbTable: dynamodb.Table; + + constructor(scope: cdk.Construct, id: string, props: TableProps) { + super(scope, id); + + const root = scope.node.root as App; + let { + // Convenience props + attributes, + primaryIndex, + secondaryIndexes, + // Full functionality props + tableProps, + } = props; + + // Validate input + if (tableProps !== undefined && attributes !== undefined) { + throw new Error(`Cannot define both attributes and tableProps`); + } + if (tableProps !== undefined && primaryIndex !== undefined) { + throw new Error(`Cannot define both primaryIndex and tableProps`); + } + if (tableProps !== undefined && secondaryIndexes !== undefined) { + throw new Error(`Cannot define both secondaryIndexes and tableProps`); + } + + const buildAttribute = (name: string): dynamodb.Attribute => { + return { + name, + type: attributes[name], + }; + } + + //////////////////// + // Configure Table + //////////////////// + + if (tableProps === undefined) { + // Validate attributes + if ( ! attributes || Object.keys(attributes).length === 0) { + throw new Error(`No attributes defined for the "${id}" Table`); + } + + // Validate primaryIndex + if ( ! primaryIndex || ! primaryIndex.partitionKey) { + throw new Error(`No primary key defined for the "${id}" Table`); + } + + tableProps = { + partitionKey: buildAttribute(primaryIndex.partitionKey), + sortKey: primaryIndex.sortKey ? buildAttribute(primaryIndex.sortKey) : undefined, + pointInTimeRecovery: true, + billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, + }; + } + + //////////////////// + // Create Table + //////////////////// + this.dynamodbTable = new dynamodb.Table(this, "Table", { ...tableProps, + tableName: tableProps.tableName || root.logicalPrefixedName(id), + }); + + ////////////////////////////// + // Create Secondary Indexes + ////////////////////////////// + + if (secondaryIndexes !== undefined) { + Object.keys(secondaryIndexes).forEach(indexName => { + if (secondaryIndexes !== undefined) { + const { partitionKey, sortKey } = secondaryIndexes[indexName]; + this.dynamodbTable.addGlobalSecondaryIndex({ + indexName, + partitionKey: buildAttribute(partitionKey), + sortKey: sortKey ? buildAttribute(sortKey) : undefined, + }); + } + }); + } + } +} diff --git a/packages/resources/src/Topic.ts b/packages/resources/src/Topic.ts new file mode 100644 index 0000000000..58c3abce96 --- /dev/null +++ b/packages/resources/src/Topic.ts @@ -0,0 +1,66 @@ +import * as cdk from "@aws-cdk/core"; +import * as sns from "@aws-cdk/aws-sns"; +import * as snsSubscriptions from "@aws-cdk/aws-sns-subscriptions"; +import { App } from "./App"; +import { Function as Func, FunctionProps, FunctionPermissions } from "./Function"; + +export interface TopicProps { + readonly subscribers: (string | FunctionProps)[]; + readonly topicProps?: sns.TopicProps; +} + +export class Topic extends cdk.Construct { + public readonly snsTopic: sns.Topic; + public readonly subscriberFunctions: Func[]; + + constructor(scope: cdk.Construct, id: string, props: TopicProps) { + super(scope, id); + + const root = scope.node.root as App; + let { + // Convenience props + subscribers, + // Full functionality props + topicProps, + } = props; + + //////////////////// + // Create Topic + //////////////////// + + if (topicProps === undefined) { + topicProps = {}; + } + + this.snsTopic = new sns.Topic(this, "Topic", { ...(topicProps || {}), + topicName: topicProps.topicName || root.logicalPrefixedName(id), + }); + + /////////////////////////// + // Create Subscribers + /////////////////////////// + + if ( ! subscribers || subscribers.length === 0) { + throw new Error(`No subscribers defined for the "${id}" Topic`); + } + + this.subscriberFunctions = []; + subscribers.forEach((subscriber, i) => { + const functionProps = (typeof subscriber === "string") ? { handler: subscriber } : subscriber; + const func = new Func(this, `Subscriber_${i}`, functionProps); + this.snsTopic.addSubscription(new snsSubscriptions.LambdaSubscription(func)); + this.subscriberFunctions.push(func); + }); + } + + attachPermissions(permissions: FunctionPermissions) { + this.subscriberFunctions.forEach(subscriber => + subscriber.attachPermissions(permissions) + ); + } + + attachPermissionsToSubscriber(index: number, permissions: FunctionPermissions) { + this.subscriberFunctions[index].attachPermissions(permissions) + } +} + diff --git a/packages/resources/src/index.ts b/packages/resources/src/index.ts index c425a2595e..535fe7975c 100644 --- a/packages/resources/src/index.ts +++ b/packages/resources/src/index.ts @@ -1,4 +1,8 @@ export * from "./App"; export * from "./Api"; +export * from "./Queue"; export * from "./Stack"; +export * from "./Table"; +export * from "./Topic"; export * from "./Function"; +export * from "./Scheduler"; diff --git a/yarn.lock b/yarn.lock index 6ff6e406b3..14ab4a0ecf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -31,6 +31,25 @@ "@aws-cdk/cx-api" "1.83.0" constructs "^3.2.0" +"@aws-cdk/aws-apigateway@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigateway/-/aws-apigateway-1.79.0.tgz#e2c166324ee50581c643a7692c25a5dd5ad9f11f" + integrity sha512-P66Jnu3kFnEuN5gXm5BDOK/L7sYWu75kWJztTfyW1nOSqGfiGj4cvrXMMvSGrEw2lmEKLnNgAl93M64DbTdT9Q== + dependencies: + "@aws-cdk/assets" "1.79.0" + "@aws-cdk/aws-certificatemanager" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + "@aws-cdk/aws-apigatewayv2-integrations@1.79.0": version "1.79.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2-integrations/-/aws-apigatewayv2-integrations-1.79.0.tgz#79bb0e39feb5630ed2493a8bdfe5e9f478b04798" @@ -97,6 +116,50 @@ "@aws-cdk/core" "1.83.0" constructs "^3.2.0" +"@aws-cdk/aws-autoscaling-hooktargets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-hooktargets/-/aws-autoscaling-hooktargets-1.79.0.tgz#f5257167e79ebeeea4ae2a4221209a69722fe393" + integrity sha512-NAo7FB/+6L/Sw5dwwNcI7McUYZbEE6HqjRqEMfDgeW1SrVdZ68q8C9s/Ipn5FLPvQYkKbMHrlc9W+PqzvdcZRQ== + dependencies: + "@aws-cdk/aws-autoscaling" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/aws-sns-subscriptions" "1.79.0" + "@aws-cdk/aws-sqs" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-autoscaling@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling/-/aws-autoscaling-1.79.0.tgz#cd120cbc3f6b7b9da01713a797635ad9b26a45cd" + integrity sha512-4cvtJZYIoEdXTD+8bhY/MGQSatEz1T3A7L0VEfAhV1Zr9doNyOsKq5ec9f7idfKgyLMxpANP1YSb4qE7lDzsCQ== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-elasticloadbalancing" "1.79.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-batch@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-batch/-/aws-batch-1.79.0.tgz#4709b18324958e9fd73acdff37569bada4f17f70" + integrity sha512-O+onGGmUN2nDyHu96sL6i5vKYxom/yWDxWBKuR+2jmQ105cWvteZuMCK9lGM9dMJQ+nVDaK1ttzlH2IHr1muuw== + dependencies: + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-ecr" "1.79.0" + "@aws-cdk/aws-ecs" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-secretsmanager" "1.79.0" + "@aws-cdk/aws-ssm" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + "@aws-cdk/aws-certificatemanager@1.79.0": version "1.79.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.79.0.tgz#7989b7553c059d0d96814832badaaf49b32b3d87" @@ -145,6 +208,22 @@ "@aws-cdk/cx-api" "1.83.0" constructs "^3.2.0" +"@aws-cdk/aws-cloudfront@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudfront/-/aws-cloudfront-1.79.0.tgz#2416be41c1f4a0654f43345702c02e0eaee79113" + integrity sha512-MVbVVBeA8NRlmJ74EVOHM7lnNRmlU6oPz3SlKwS0uY46Zhw26L+5KUupF4UQznMBslMaycE0DyfwgNS9R0su4A== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-ssm" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + "@aws-cdk/aws-cloudwatch@1.79.0": version "1.79.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.79.0.tgz#3bbeb41369d250470e87adc7e78d9f3d12a442ff" @@ -163,6 +242,38 @@ "@aws-cdk/core" "1.83.0" constructs "^3.2.0" +"@aws-cdk/aws-codebuild@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codebuild/-/aws-codebuild-1.79.0.tgz#9453d2a5f61ef43b77bf6a77a778ce76ca6ff721" + integrity sha512-dvcznkli6z93597+Z8ONp8ZbZZu/OMUVf2UGbxVR1SRdo2mpSXOl4nUyxxptLM9oAWQ1C7kEGZQi1SFI6VZgCg== + dependencies: + "@aws-cdk/assets" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-codecommit" "1.79.0" + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-ecr" "1.79.0" + "@aws-cdk/aws-ecr-assets" "1.79.0" + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/aws-secretsmanager" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-codecommit@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codecommit/-/aws-codecommit-1.79.0.tgz#f149b43b8c7db44dc0a5d2e1106e54dbf95b95fa" + integrity sha512-/AVhiRz6Y5h+H4DD71L4Lha0f2ER+xOOy71RGAlYIc3HAAhs726Fo9qmxp6NHUq8HjlHJ98sh4CVataE7bb8ag== + dependencies: + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + "@aws-cdk/aws-codeguruprofiler@1.79.0": version "1.79.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.79.0.tgz#5aee986accca91b966e1a91ddc69d75d6c15721e" @@ -181,6 +292,18 @@ "@aws-cdk/core" "1.83.0" constructs "^3.2.0" +"@aws-cdk/aws-codepipeline@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codepipeline/-/aws-codepipeline-1.79.0.tgz#c950afdea67a90d902d42a35fe0ee7c031e11ce8" + integrity sha512-C/4MpcLvnU+dnJ9rjXRlp0bvFaAHLO7Nus6w9TLAfg/rFVSSxjtv5n9METwKWzco9FGB7kYBvAjSFOVbmA6nAA== + dependencies: + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + "@aws-cdk/aws-cognito@1.79.0": version "1.79.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.79.0.tgz#b9263085c64415205ec07959ef34db47bbc01d66" @@ -319,6 +442,38 @@ "@aws-cdk/core" "1.83.0" constructs "^3.2.0" +"@aws-cdk/aws-ecs@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecs/-/aws-ecs-1.79.0.tgz#381ba96200fa2031a36f2424f2e416bee1368880" + integrity sha512-VmUQmOpzdg9UobCkaOUioaHcegn6ju8T++Epagirt2IAJBe9sBcj06mUoWfjlBBIXMcG5SMTk30Opx66ppjrfw== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.79.0" + "@aws-cdk/aws-autoscaling" "1.79.0" + "@aws-cdk/aws-autoscaling-hooktargets" "1.79.0" + "@aws-cdk/aws-certificatemanager" "1.79.0" + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-ecr" "1.79.0" + "@aws-cdk/aws-ecr-assets" "1.79.0" + "@aws-cdk/aws-elasticloadbalancing" "1.79.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-route53" "1.79.0" + "@aws-cdk/aws-route53-targets" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-s3-assets" "1.79.0" + "@aws-cdk/aws-secretsmanager" "1.79.0" + "@aws-cdk/aws-servicediscovery" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/aws-sqs" "1.79.0" + "@aws-cdk/aws-ssm" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + "@aws-cdk/aws-efs@1.79.0": version "1.79.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.79.0.tgz#429163c5334977ea4d63fec70b8f076dc8432647" @@ -343,6 +498,15 @@ "@aws-cdk/cx-api" "1.83.0" constructs "^3.2.0" +"@aws-cdk/aws-elasticloadbalancing@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancing/-/aws-elasticloadbalancing-1.79.0.tgz#980aa169db66ab2d11628b01e4abd4b95db59cb2" + integrity sha512-Z8PmDCYs5zkl3WNK9OQvwiZvpyQdfxUeIWRoAGaLJI/g9a0Y/qQX6fRBHByTj2nwpKherg7XGlY+hJXmRrJBWQ== + dependencies: + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + "@aws-cdk/aws-elasticloadbalancingv2@1.79.0": version "1.79.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.79.0.tgz#e20094caaf87be3302aad2083611206027e92342" @@ -360,6 +524,30 @@ "@aws-cdk/region-info" "1.79.0" constructs "^3.2.0" +"@aws-cdk/aws-events-targets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events-targets/-/aws-events-targets-1.79.0.tgz#14154900b0231474fd99f4931f885967c8bfe12a" + integrity sha512-nkFxA4NuVN1myENlCy2CZRY513BujA1v5Ui94tLewfAzcBHEzOPXdZckXiArZJp0MAamTXw++esr8g8td9xoQQ== + dependencies: + "@aws-cdk/aws-batch" "1.79.0" + "@aws-cdk/aws-codebuild" "1.79.0" + "@aws-cdk/aws-codepipeline" "1.79.0" + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-ecs" "1.79.0" + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kinesis" "1.79.0" + "@aws-cdk/aws-kinesisfirehose" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/aws-sns-subscriptions" "1.79.0" + "@aws-cdk/aws-sqs" "1.79.0" + "@aws-cdk/aws-stepfunctions" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/custom-resources" "1.79.0" + constructs "^3.2.0" + "@aws-cdk/aws-events@1.79.0": version "1.79.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.79.0.tgz#fa676d751de3aceb4bb408f00dab6e085ca90ea6" @@ -405,6 +593,25 @@ "@aws-cdk/region-info" "1.83.0" constructs "^3.2.0" +"@aws-cdk/aws-kinesis@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kinesis/-/aws-kinesis-1.79.0.tgz#89c348b4a29c4db2c470cb42229349c6a75c3112" + integrity sha512-J7z0tNJM2q6PMJbn4rZa/DBoFhRIJR3fFpGOzow1aexuLl3oHHVpI/Dt6Gxb/ebhfUdX+Dbiul4ACOfHJqdDKw== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-kinesisfirehose@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kinesisfirehose/-/aws-kinesisfirehose-1.79.0.tgz#84da64364e00316f4d3467429bea42ea584413a7" + integrity sha512-XQB8/opTA6FS8V4ozwQPvnaGVkkGtkGWrZ/OQIxMuNeUW+VFk775sD4kzlvhn5+2erDjgXbsK0Mogltd83wahQ== + dependencies: + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + "@aws-cdk/aws-kms@1.79.0": version "1.79.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.79.0.tgz#7c358ecd3823a7f965a7a091929c0afbc472d4d5" @@ -425,6 +632,25 @@ "@aws-cdk/cx-api" "1.83.0" constructs "^3.2.0" +"@aws-cdk/aws-lambda-event-sources@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-event-sources/-/aws-lambda-event-sources-1.79.0.tgz#7bea3f2bb084a058dbda94aa7b027e0baf090945" + integrity sha512-nFAhW6e3Kde42naT5gaIArmx8b/TkqeDLVbtsvTxS9pkE/kZMNNKT1Mrmvs5jFcHRFo9n1+l9sEYsXWjAqwi/w== + dependencies: + "@aws-cdk/aws-apigateway" "1.79.0" + "@aws-cdk/aws-dynamodb" "1.79.0" + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kinesis" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-s3-notifications" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/aws-sns-subscriptions" "1.79.0" + "@aws-cdk/aws-sqs" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + "@aws-cdk/aws-lambda-nodejs@1.79.0": version "1.79.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.79.0.tgz#f5a9b113a2dec4235a3b98084df285fa25e0880e" @@ -504,6 +730,25 @@ "@aws-cdk/core" "1.83.0" constructs "^3.2.0" +"@aws-cdk/aws-route53-targets@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53-targets/-/aws-route53-targets-1.79.0.tgz#b7ea83c1b5c8c9bc5ac2ed160090c67f6b4545b1" + integrity sha512-1hYlCPDnRnxktLoqLgaR/1tGFeFtznhaF0Vish6WFZ4TTDw1wWCArmpyUaJiiaNCDNd7ChQW39J0k+G5WYnA9w== + dependencies: + "@aws-cdk/aws-apigateway" "1.79.0" + "@aws-cdk/aws-apigatewayv2" "1.79.0" + "@aws-cdk/aws-cloudfront" "1.79.0" + "@aws-cdk/aws-cognito" "1.79.0" + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-elasticloadbalancing" "1.79.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-route53" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/region-info" "1.79.0" + constructs "^3.2.0" + "@aws-cdk/aws-route53@1.79.0": version "1.79.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.79.0.tgz#877e568089f397989f0be59e7eb57742e9f03399" @@ -554,6 +799,19 @@ "@aws-cdk/cx-api" "1.83.0" constructs "^3.2.0" +"@aws-cdk/aws-s3-notifications@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-notifications/-/aws-s3-notifications-1.79.0.tgz#36380a753c834b4524cb8d8cea067c9f68c4f791" + integrity sha512-i4mDy6+kDNuibfz3vi7nAs8Gba5W1bSAADyxKrHDxJI+3UzKYyKvlzmF6WIOBr0eEIECCYbxKVgFAg+8up7mBw== + dependencies: + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-s3" "1.79.0" + "@aws-cdk/aws-sns" "1.79.0" + "@aws-cdk/aws-sqs" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + "@aws-cdk/aws-s3@1.79.0": version "1.79.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.79.0.tgz#2de74f669d9cd058679c98c701f640412e2de3da" @@ -576,6 +834,28 @@ "@aws-cdk/core" "1.83.0" constructs "^3.2.0" +"@aws-cdk/aws-sam@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sam/-/aws-sam-1.79.0.tgz#30bd8dcdb07863be808170608c630b30dfc891f4" + integrity sha512-+lYwZp95ELoIQbZTE005th0kP2wyLb/cpN/ZuXU4Kd0OSJjaejMmHtoTLie0ojE5MYFSAck8EZ0sNuRv3XUQNg== + dependencies: + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + +"@aws-cdk/aws-secretsmanager@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-secretsmanager/-/aws-secretsmanager-1.79.0.tgz#35a7830417b3742e346ce46b43a205c9e43cd754" + integrity sha512-ELzKvOC8FOBX+fNiqB2ZMun9G11JbioRlGymNs4ZyOAsg6YoqzzhjlCgXOPiA+En9jBp0dZeJaqSdqPwhUCKPg== + dependencies: + "@aws-cdk/aws-ec2" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-kms" "1.79.0" + "@aws-cdk/aws-lambda" "1.79.0" + "@aws-cdk/aws-sam" "1.79.0" + "@aws-cdk/core" "1.79.0" + "@aws-cdk/cx-api" "1.79.0" + constructs "^3.2.0" + "@aws-cdk/aws-servicediscovery@1.79.0": version "1.79.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.79.0.tgz#b5a940a6591024bed859103565bfd83ae1a38679" @@ -669,6 +949,18 @@ "@aws-cdk/core" "1.83.0" constructs "^3.2.0" +"@aws-cdk/aws-stepfunctions@1.79.0": + version "1.79.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-stepfunctions/-/aws-stepfunctions-1.79.0.tgz#7db982e925a0a31c8c3f19555ea571bc9c21c140" + integrity sha512-gk+WYp8s6ILiT6I4Rxf2RH3GD/aotdFkuICi34RW5K1iY1N9obU32+Ljdcx/6vO1xdhTQKxxMERiNl0LWklHLA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.79.0" + "@aws-cdk/aws-events" "1.79.0" + "@aws-cdk/aws-iam" "1.79.0" + "@aws-cdk/aws-logs" "1.79.0" + "@aws-cdk/core" "1.79.0" + constructs "^3.2.0" + "@aws-cdk/cfnspec@1.79.0": version "1.79.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.79.0.tgz#b5fe241290f20ed1a3911ba8f0a9807aab0ec749" From 98aa6799d52e0f6e5e775d9b6aae8ba4e1a59bf3 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 28 Jan 2021 22:01:47 -0500 Subject: [PATCH 333/481] Changing default Lambda timeout to 10s --- packages/resources/src/Function.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index 7a9489fcb4..3e43bf071e 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -40,7 +40,7 @@ export interface FunctionProps extends lambda.FunctionOptions { /** * The execution timeout in seconds. * - * @default - Defaults to Duration.seconds(20) + * @default - Defaults to Duration.seconds(10) */ readonly timeout?: cdk.Duration; /** @@ -84,7 +84,7 @@ export class Function extends lambda.Function { // Set defaults const handler = props.handler; const runtime = props.runtime || lambda.Runtime.NODEJS_12_X; - const timeout = props.timeout || cdk.Duration.seconds(20); + const timeout = props.timeout || cdk.Duration.seconds(10); const memorySize = props.memorySize || 1024; const tracing = props.tracing || lambda.Tracing.ACTIVE; const bundle = props.bundle === undefined ? true : props.bundle; From 519245b9804f34ea0934b3da15694f0f2b6bc316 Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 30 Jan 2021 15:38:37 -0500 Subject: [PATCH 334/481] Add tests for constructs --- .../cli/test/start-guide/lib/DynamoDBStack.js | 5 +- .../cli/test/start-guide/lib/MiscStack.js | 4 +- packages/resources/package.json | 1 + packages/resources/src/Api.ts | 124 ++--- packages/resources/src/App.ts | 14 +- .../resources/src/{Scheduler.ts => Cron.ts} | 59 ++- packages/resources/src/Function.ts | 63 ++- packages/resources/src/Queue.ts | 28 +- packages/resources/src/Table.ts | 60 +-- packages/resources/src/Topic.ts | 28 +- packages/resources/src/index.ts | 2 +- packages/resources/test/Api.test.ts | 446 +++++++++++++----- packages/resources/test/Cron.test.ts | 159 +++++++ packages/resources/test/Function.test.ts | 234 ++++++++- packages/resources/test/Queue.test.ts | 118 +++++ packages/resources/test/Table.test.ts | 106 +++++ packages/resources/test/Topic.test.ts | 161 +++++++ packages/resources/test/helpers.ts | 9 - 18 files changed, 1283 insertions(+), 338 deletions(-) rename packages/resources/src/{Scheduler.ts => Cron.ts} (50%) create mode 100644 packages/resources/test/Cron.test.ts create mode 100644 packages/resources/test/Queue.test.ts create mode 100644 packages/resources/test/Table.test.ts create mode 100644 packages/resources/test/Topic.test.ts delete mode 100644 packages/resources/test/helpers.ts diff --git a/packages/cli/test/start-guide/lib/DynamoDBStack.js b/packages/cli/test/start-guide/lib/DynamoDBStack.js index 9183329ba9..1425a4c128 100644 --- a/packages/cli/test/start-guide/lib/DynamoDBStack.js +++ b/packages/cli/test/start-guide/lib/DynamoDBStack.js @@ -9,11 +9,14 @@ export default class DynamoDBStack extends sst.Stack { super(scope, id, props); const table = new sst.Table(this, "Notes", { - attributes: { + fields: { userId: dynamodb.AttributeType.STRING, noteId: dynamodb.AttributeType.STRING, }, primaryIndex: { partitionKey: 'userId', sortKey: 'noteId' }, + secondaryIndexes: { + abc: { partitionKey: 'userId', sortKey: 'noteId' }, + }, }); this.table = table; diff --git a/packages/cli/test/start-guide/lib/MiscStack.js b/packages/cli/test/start-guide/lib/MiscStack.js index 856f331d09..a4f44f76da 100644 --- a/packages/cli/test/start-guide/lib/MiscStack.js +++ b/packages/cli/test/start-guide/lib/MiscStack.js @@ -14,7 +14,7 @@ export default class MiscStack extends sst.Stack { consumer: "services/misc/handler.sqsConsumer", }); - const cron = new sst.Scheduler(this, "Scheduler", { + const cron = new sst.Cron(this, "Cron", { schedule: 'rate(1 minute)', job: { handler: "services/misc/handler.cron1", @@ -23,7 +23,7 @@ export default class MiscStack extends sst.Stack { }); cron.attachPermissions([ event ]); - const cron2 = new sst.Scheduler(this, "Scheduler2", { + const cron2 = new sst.Cron(this, "Cron2", { schedule: 'rate(1 minute)', job: { handler: "services/misc/handler.cron2", diff --git a/packages/resources/package.json b/packages/resources/package.json index b231d55722..3a96e84f80 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -54,6 +54,7 @@ "zip-local": "^0.3.4" }, "devDependencies": { + "@aws-cdk/assert": "1.79.0", "@types/cross-spawn": "^6.0.2", "@types/fs-extra": "^9.0.6", "@types/node": "^14.0.27" diff --git a/packages/resources/src/Api.ts b/packages/resources/src/Api.ts index ab85d9eca5..ab2e4cafaf 100644 --- a/packages/resources/src/Api.ts +++ b/packages/resources/src/Api.ts @@ -4,7 +4,7 @@ import * as apig from "@aws-cdk/aws-apigatewayv2"; import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; import { App } from "./App"; -import { Function as Func, FunctionProps, FunctionPermissions } from "./Function"; +import { Function as Func, FunctionProps, FunctionDefinition, FunctionPermissions } from "./Function"; const allowedMethods = [ apig.HttpMethod.GET, @@ -20,7 +20,7 @@ export interface ApiProps { /** * Path to the entry point of the function. A .js or .ts file. */ - readonly routes: { [key: string]: string | ApiRouteProps }; + readonly routes: { [key: string]: FunctionDefinition | ApiRouteProps }; /** * CORS configuration. @@ -51,27 +51,15 @@ export interface ApiProps { /** * Default HTTP Api props. */ - readonly httpApiProps?: apig.HttpApiProps; + readonly httpApi?: apig.HttpApi; } /** * Props for API route. */ export interface ApiRouteProps { - /** - * Route authorization type - * - * @default - Defaults to 'NONE' - */ readonly authorizationType?: string; - - /** - * The runtime environment. Only runtimes of the Node.js family are - * supported. - * - * @default - Defaults to {} - */ - readonly functionProps?: FunctionProps; + readonly function?: FunctionDefinition; } export class Api extends cdk.Construct { @@ -95,30 +83,30 @@ export class Api extends cdk.Construct { const root = scope.node.root as App; let { - // Convenience props + // Api props cors, accessLog, + httpApi, + // Routes props routes, defaultAuthorizationType, defaultFunctionProps, - // Full functionality props - httpApiProps, } = props; - const isCustomApiProps = httpApiProps !== undefined; // Validate input - if (httpApiProps !== undefined && cors !== undefined) { - throw new Error(`Cannot define both cors and httpApiProps`); + if (httpApi !== undefined && cors !== undefined) { + throw new Error(`Cannot define both cors and httpApi`); } - if (httpApiProps !== undefined && accessLog !== undefined) { - throw new Error(`Cannot define both accessLog and httpApiProps`); + if (httpApi !== undefined && accessLog !== undefined) { + throw new Error(`Cannot define both accessLog and httpApi`); } //////////////////// - // Configure CORS + // Create Api //////////////////// - if (httpApiProps === undefined) { + if ( ! httpApi) { + // Configure CORS let corsPreflight; if (cors === undefined || cors === true) { corsPreflight = { @@ -127,23 +115,23 @@ export class Api extends cdk.Construct { allowOrigins: ["*"], }; } - httpApiProps = { corsPreflight }; - } - //////////////////// - // Create Api - //////////////////// - this.httpApi = new apig.HttpApi(this, "Api", { ...httpApiProps, - apiName: httpApiProps.apiName || root.logicalPrefixedName(id), - }); + this.httpApi = new apig.HttpApi(this, "Api", { + apiName: root.logicalPrefixedName(id), + corsPreflight, + }); + } + else { + this.httpApi = httpApi; + } /////////////////////////// - // Configure access log + // Create access log /////////////////////////// // note: Access log configuration is not supported by L2 constructs as of CDK v1.85.0. We // need to define it at L1 construct level. - if ( ! isCustomApiProps && (accessLog === undefined || accessLog === true)) { + if ( ! httpApi && (accessLog === undefined || accessLog === true)) { // create log group this.accessLogGroup = new logs.LogGroup(this, "LogGroup"); @@ -198,18 +186,23 @@ export class Api extends cdk.Construct { this.functions = {}; routeKeys.forEach((routeKey: string) => { - let routeProps = routes[routeKey]; - if (typeof routeProps === "string") { - routeProps = { functionProps: { handler: routeProps } }; - } + // Normalize routeProps + let routeProps = ( + this.isInstanceOfApiRouteProps(routes[routeKey]) + ? routes[routeKey] + : { function: (routes[routeKey] as FunctionDefinition) } + ) as ApiRouteProps; + + // Normalize routeKey + routeKey = this.normalizeRouteKey(routeKey); // Get path and method - const routeNameParts = routeKey.split(/\s+/); - if (routeNameParts.length !== 2) { + const routeKeyParts = routeKey.split(' '); + if (routeKeyParts.length !== 2) { throw new Error(`Invalid route ${routeKey}`); } - const methodStr = routeNameParts[0].toUpperCase(); - const path = routeNameParts[1]; + const methodStr = routeKeyParts[0].toUpperCase(); + const path = routeKeyParts[1]; const method = allowedMethods.find((per) => per === methodStr); if (!method) { throw new Error(`Invalid method defined for "${routeKey}"`); @@ -228,21 +221,29 @@ export class Api extends cdk.Construct { ); } - // Get Lambda props - const functionProps = { - ...(defaultFunctionProps || {}), - ...routeProps.functionProps, - } as FunctionProps; - if (!functionProps.handler) { - throw new Error(`No handler defined for "${routeKey}"`); + // Create Function + let functionDefinition; + if (typeof routeProps.function === 'string') { + functionDefinition = { + ...(defaultFunctionProps || {}), + handler: routeProps.function, + }; } + else if (routeProps.function instanceof Func) { + if (defaultFunctionProps) { + throw new Error(`Cannot define defaultFunctionProps when a Function is passed in to the routes`); + } + functionDefinition = routeProps.function; + } + else { + functionDefinition = { + ...(defaultFunctionProps || {}), + ...(routeProps.function as FunctionProps), + } as FunctionProps; + } + const lambda = Func.fromDefinition(this, `Lambda_${methodStr}_${path}`, functionDefinition); // Create route - const lambda = new Func( - this, - `Lambda_${methodStr}_${path}`, - functionProps - ); const route = new apig.HttpRoute(this, `Route_${methodStr}_${path}`, { httpApi: this.httpApi, routeKey: apig.HttpRouteKey.with(path, method), @@ -263,8 +264,17 @@ export class Api extends cdk.Construct { }); } + isInstanceOfApiRouteProps(object: any): boolean { + return (object as ApiRouteProps).function !== undefined + || (object as ApiRouteProps).authorizationType !== undefined; + } + + normalizeRouteKey(routeKey: string): string { + return routeKey.split(/\s+/).join(' '); + } + getFunction(routeKey: string): Func { - return this.functions[routeKey]; + return this.functions[this.normalizeRouteKey(routeKey)]; } attachPermissions(permissions: FunctionPermissions) { diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index cddc0924c2..e15f1a36ae 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -173,9 +173,12 @@ export class App extends cdk.App { const cloudAssembly = super.synth(options); // Run lint and type check on handler input files - // Note: do not need to run while debugging because the Lambda functions are replaced by - // stubs and have not been transpiled. - if (!this.local) { + // Note: do not need to run in two scenarios: + // 1. do not need to run while debugging because the Lambda functions are + // replaced by stubs and have not been transpiled. + // 2. do not need to run while running resources tests because .eslint file + // does not exist inside .build folder. + if (!this.local && ! this.isJestTest()) { this.processInputFiles(); } @@ -187,6 +190,10 @@ export class App extends cdk.App { return cloudAssembly; } + isJestTest(): boolean { + return process.env.NODE_ENV === 'test' && process.env.JEST_WORKER_ID !== undefined; + } + registerLambdaHandler(handler: FunctionHandlerProps): void { this.lambdaHandlers.push(handler); } @@ -227,6 +234,7 @@ export class App extends cdk.App { } lint(srcPath: string, inputFiles: Array): void { + console.log('=== ', process.env); inputFiles = inputFiles.filter( (file: string) => file.indexOf("node_modules") === -1 && diff --git a/packages/resources/src/Scheduler.ts b/packages/resources/src/Cron.ts similarity index 50% rename from packages/resources/src/Scheduler.ts rename to packages/resources/src/Cron.ts index fff1a81740..07c863efcf 100644 --- a/packages/resources/src/Scheduler.ts +++ b/packages/resources/src/Cron.ts @@ -2,45 +2,46 @@ import * as cdk from "@aws-cdk/core"; import * as events from "@aws-cdk/aws-events"; import * as eventsTargets from "@aws-cdk/aws-events-targets"; import { App } from "./App"; -import { Function as Func, FunctionProps, FunctionPermissions } from "./Function"; +import { Function as Func, FunctionDefinition, FunctionPermissions } from "./Function"; -export interface SchedulerProps { - readonly schedule: string | cdk.Duration | events.CronOptions; - readonly job: string | FunctionProps; - readonly ruleProps?: events.RuleProps; +export interface CronProps { + readonly job: FunctionDefinition; + readonly schedule?: string | cdk.Duration | events.CronOptions; + readonly eventsRule?: events.Rule; } -export class Scheduler extends cdk.Construct { - public readonly eventRule: events.Rule; +export class Cron extends cdk.Construct { + public readonly eventsRule: events.Rule; public readonly jobFunction: Func; - constructor(scope: cdk.Construct, id: string, props: SchedulerProps) { + constructor(scope: cdk.Construct, id: string, props: CronProps) { super(scope, id); const root = scope.node.root as App; let { - // Convenience props + // Topic props schedule, + eventsRule, + // Function props job, - // Full functionality props - ruleProps, } = props; // Validate input - if (ruleProps !== undefined && schedule !== undefined) { - throw new Error(`Cannot define both schedule and ruleProps`); + if (eventsRule !== undefined && schedule !== undefined) { + throw new Error(`Cannot define both schedule and eventsRule`); } /////////////////////////// - // Configure Rule + // Create Rule /////////////////////////// - if (ruleProps === undefined) { - // Configure Schedule - let propSchedule: events.Schedule; + if ( ! eventsRule) { if ( ! schedule) { - throw new Error(`No schedule defined for the "${id}" Scheduler`); + throw new Error(`No schedule defined for the "${id}" Cron`); } + + // Configure Schedule + let propSchedule: events.Schedule; if (typeof schedule === 'string' && (schedule.startsWith('rate(') || schedule.startsWith('cron('))) { propSchedule = events.Schedule.expression(schedule); @@ -52,9 +53,12 @@ export class Scheduler extends cdk.Construct { propSchedule = events.Schedule.cron(schedule as events.CronOptions); } - ruleProps = { + this.eventsRule = new events.Rule(this, "Rule", { schedule: propSchedule - }; + }); + } + else { + this.eventsRule = eventsRule; } /////////////////////////// @@ -62,19 +66,10 @@ export class Scheduler extends cdk.Construct { /////////////////////////// if ( ! job) { - throw new Error(`No job defined for the "${id}" Scheduler`); + throw new Error(`No job defined for the "${id}" Cron`); } - - const functionProps = (typeof job === "string") ? { handler: job } : job; - this.jobFunction = new Func(this, "Job", functionProps); - - //////////////////// - // Create Rule - //////////////////// - - this.eventRule = new events.Rule(this, "Rule", { ...ruleProps, - targets: [ new eventsTargets.LambdaFunction(this.jobFunction) ], - }); + this.jobFunction = Func.fromDefinition(this, "Job", job); + this.eventsRule.addTarget(new eventsTargets.LambdaFunction(this.jobFunction)); } attachPermissions(permissions: FunctionPermissions) { diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index 3e43bf071e..c9b59444de 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -10,8 +10,9 @@ import { Topic } from "./Topic"; import { builder } from "./util/builder"; export type HandlerProps = FunctionHandlerProps; +export type FunctionDefinition = string | Function | FunctionProps; -export interface FunctionProps extends lambda.FunctionOptions { +export interface FunctionProps extends Omit { /** * Path to the entry point and handler function. Of the format: * `/path/to/file.function`. @@ -40,9 +41,9 @@ export interface FunctionProps extends lambda.FunctionOptions { /** * The execution timeout in seconds. * - * @default - Defaults to Duration.seconds(10) + * @default - number */ - readonly timeout?: cdk.Duration; + readonly timeout?: number; /** * Enable AWS X-Ray Tracing. * @@ -72,10 +73,15 @@ export interface FunctionHandlerProps { readonly handler: string; } -/** - * Doe props for Lambda function. - */ -export type FunctionPermissions = string | [ string ] | [ cdk.Construct ] | [ {(grantee: iam.IGrantable): iam.Grant;} ]; +export type FunctionPermissions = FunctionPermissionType | (FunctionPermissionType | cdk.Construct | {(grantee: iam.IGrantable): iam.Grant;})[]; + +export enum FunctionPermissionType { + ALL = "*", + S3 = "s3:*", + SNS = "sns:*", + SQS = "sqs:*", + DynamoDB = "dynamodb:*", +} export class Function extends lambda.Function { constructor(scope: cdk.Construct, id: string, props: FunctionProps) { @@ -84,7 +90,7 @@ export class Function extends lambda.Function { // Set defaults const handler = props.handler; const runtime = props.runtime || lambda.Runtime.NODEJS_12_X; - const timeout = props.timeout || cdk.Duration.seconds(10); + const timeout = props.timeout || 10; const memorySize = props.memorySize || 1024; const tracing = props.tracing || lambda.Tracing.ACTIVE; const bundle = props.bundle === undefined ? true : props.bundle; @@ -115,7 +121,7 @@ export class Function extends lambda.Function { super(scope, id, { ...props, runtime, - timeout, + timeout: cdk.Duration.seconds(timeout), memorySize, tracing, code: lambda.Code.fromAsset( @@ -139,7 +145,7 @@ export class Function extends lambda.Function { super(scope, id, { ...props, runtime, - timeout, + timeout: cdk.Duration.seconds(timeout), memorySize, tracing, handler: outHandler, @@ -171,18 +177,16 @@ export class Function extends lambda.Function { // Case: 'admin' permissions => '*' if (typeof permissions === "string") { - if (permissions === '*') { - policyActions.push("*"); - } - else { - throw new Error(`The specified permissions is not supported.`); + if ( ! Object.values(FunctionPermissionType).includes(permissions)) { + throw new Error(`The specified permissions is not a supported FunctionPermissionType.`); } + policyActions.push(permissions); } else { - permissions.forEach((permission: string | cdk.Construct | {(grantee: iam.IGrantable): iam.Grant}) => { + permissions.forEach((permission: FunctionPermissionType | cdk.Construct | {(grantee: iam.IGrantable): iam.Grant}) => { // Case: 's3' permissions => 's3:*' if (typeof permission === 'string') { - policyActions.push(`${permission}:*`); + policyActions.push(permission); return; } @@ -201,11 +205,14 @@ export class Function extends lambda.Function { else if (cfnType === 'CfnBucket') { policyActions.push(`s3:*`); } + else { + throw new Error(`The specified permissions is not a supported construct type.`); + } } // Case: grant method - //else if (permission instanceof sqs.Queue) { - // policyActions.push(`sqs:*`); - //} + else if (typeof permission === 'function') { + permission(this); + } else { throw new Error(`The specified permissions is not supported.`); } @@ -220,4 +227,20 @@ export class Function extends lambda.Function { })); } } + + static fromDefinition(scope: cdk.Construct, id: string, definition: FunctionDefinition): Function { + if (typeof definition === 'string') { + return new Function(scope, id, { handler: definition }); + } + else if (definition instanceof Function) { + return definition; + } + else if (definition instanceof lambda.Function) { + throw new Error(`Please use sst.Function instead of lambda.Function for the "${id}" Function.`); + } + else if ((definition as FunctionProps).handler !== undefined) { + return new Function(scope, id, definition); + } + throw new Error(`Invalid function definition for the "${id}" Function`); + } } diff --git a/packages/resources/src/Queue.ts b/packages/resources/src/Queue.ts index b72d57a19c..8e9299fb26 100644 --- a/packages/resources/src/Queue.ts +++ b/packages/resources/src/Queue.ts @@ -2,11 +2,11 @@ import * as cdk from "@aws-cdk/core"; import * as sqs from "@aws-cdk/aws-sqs"; import * as lambdaEventSources from "@aws-cdk/aws-lambda-event-sources"; import { App } from "./App"; -import { Function as Func, FunctionProps, FunctionPermissions } from "./Function"; +import { Function as Func, FunctionDefinition, FunctionPermissions } from "./Function"; export interface QueueProps { - readonly consumer: string | FunctionProps; - readonly queueProps?: sqs.QueueProps; + readonly consumer: FunctionDefinition; + readonly sqsQueue?: sqs.Queue; } export class Queue extends cdk.Construct { @@ -18,22 +18,23 @@ export class Queue extends cdk.Construct { const root = scope.node.root as App; let { - // Convenience props + // Queue props + sqsQueue, + // Function props consumer, - // Full functionality props - queueProps, } = props; //////////////////// // Create Queue //////////////////// - if (queueProps === undefined) { - queueProps = {}; + if ( ! sqsQueue) { + this.sqsQueue = new sqs.Queue(this, "Queue", { + queueName: root.logicalPrefixedName(id), + }); + } + else { + this.sqsQueue = sqsQueue; } - - this.sqsQueue = new sqs.Queue(this, "Queue", { ...(queueProps || {}), - queueName: queueProps.queueName || root.logicalPrefixedName(id), - }); /////////////////////////// // Create Consumer @@ -42,8 +43,7 @@ export class Queue extends cdk.Construct { if ( ! consumer) { throw new Error(`No consumer defined for the "${id}" Queue`); } - const functionProps = (typeof consumer === "string") ? { handler: consumer } : consumer; - this.consumerFunction = new Func(this, `Consumer`, functionProps); + this.consumerFunction = Func.fromDefinition(this, `Consumer`, consumer); this.consumerFunction.addEventSource(new lambdaEventSources.SqsEventSource(this.sqsQueue)); } diff --git a/packages/resources/src/Table.ts b/packages/resources/src/Table.ts index 97a22bdb77..7199116696 100644 --- a/packages/resources/src/Table.ts +++ b/packages/resources/src/Table.ts @@ -3,10 +3,9 @@ import * as dynamodb from "@aws-cdk/aws-dynamodb"; import { App } from "./App"; export interface TableProps { - readonly attributes: { [key: string]: dynamodb.AttributeType }, + readonly fields: { [key: string]: dynamodb.AttributeType }, readonly primaryIndex: TableIndexProps; readonly secondaryIndexes?: { [key: string]: TableIndexProps }; - readonly tableProps?: dynamodb.TableProps; } export interface TableIndexProps { @@ -22,60 +21,41 @@ export class Table extends cdk.Construct { const root = scope.node.root as App; let { - // Convenience props - attributes, + fields, primaryIndex, secondaryIndexes, - // Full functionality props - tableProps, } = props; - // Validate input - if (tableProps !== undefined && attributes !== undefined) { - throw new Error(`Cannot define both attributes and tableProps`); - } - if (tableProps !== undefined && primaryIndex !== undefined) { - throw new Error(`Cannot define both primaryIndex and tableProps`); - } - if (tableProps !== undefined && secondaryIndexes !== undefined) { - throw new Error(`Cannot define both secondaryIndexes and tableProps`); - } - const buildAttribute = (name: string): dynamodb.Attribute => { return { name, - type: attributes[name], + type: fields[name], }; } //////////////////// - // Configure Table + // Create Table //////////////////// - if (tableProps === undefined) { - // Validate attributes - if ( ! attributes || Object.keys(attributes).length === 0) { - throw new Error(`No attributes defined for the "${id}" Table`); - } - - // Validate primaryIndex - if ( ! primaryIndex || ! primaryIndex.partitionKey) { - throw new Error(`No primary key defined for the "${id}" Table`); - } + // Validate fields + if (fields === undefined || Object.keys(fields).length === 0) { + throw new Error(`No fields defined for the "${id}" Table`); + } - tableProps = { - partitionKey: buildAttribute(primaryIndex.partitionKey), - sortKey: primaryIndex.sortKey ? buildAttribute(primaryIndex.sortKey) : undefined, - pointInTimeRecovery: true, - billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, - }; + // Validate primaryIndex + if (primaryIndex === undefined) { + throw new Error(`No primary index defined for the "${id}" Table`); + } + else if ( ! primaryIndex.partitionKey) { + throw new Error(`No partition key defined in primary index for the "${id}" Table`); } - //////////////////// - // Create Table - //////////////////// - this.dynamodbTable = new dynamodb.Table(this, "Table", { ...tableProps, - tableName: tableProps.tableName || root.logicalPrefixedName(id), + this.dynamodbTable = new dynamodb.Table(this, "Table", { + tableName: root.logicalPrefixedName(id), + partitionKey: buildAttribute(primaryIndex.partitionKey), + sortKey: primaryIndex.sortKey ? buildAttribute(primaryIndex.sortKey) : undefined, + pointInTimeRecovery: true, + billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, }); ////////////////////////////// diff --git a/packages/resources/src/Topic.ts b/packages/resources/src/Topic.ts index 58c3abce96..50284c754f 100644 --- a/packages/resources/src/Topic.ts +++ b/packages/resources/src/Topic.ts @@ -2,11 +2,11 @@ import * as cdk from "@aws-cdk/core"; import * as sns from "@aws-cdk/aws-sns"; import * as snsSubscriptions from "@aws-cdk/aws-sns-subscriptions"; import { App } from "./App"; -import { Function as Func, FunctionProps, FunctionPermissions } from "./Function"; +import { Function as Func, FunctionDefinition, FunctionPermissions } from "./Function"; export interface TopicProps { - readonly subscribers: (string | FunctionProps)[]; - readonly topicProps?: sns.TopicProps; + readonly subscribers: FunctionDefinition[]; + readonly snsTopic?: sns.Topic; } export class Topic extends cdk.Construct { @@ -18,23 +18,24 @@ export class Topic extends cdk.Construct { const root = scope.node.root as App; let { - // Convenience props + // Topic props + snsTopic, + // Function props subscribers, - // Full functionality props - topicProps, } = props; //////////////////// // Create Topic //////////////////// - if (topicProps === undefined) { - topicProps = {}; + if ( ! snsTopic) { + this.snsTopic = new sns.Topic(this, "Topic", { + topicName: root.logicalPrefixedName(id), + }); + } + else { + this.snsTopic = snsTopic; } - - this.snsTopic = new sns.Topic(this, "Topic", { ...(topicProps || {}), - topicName: topicProps.topicName || root.logicalPrefixedName(id), - }); /////////////////////////// // Create Subscribers @@ -46,8 +47,7 @@ export class Topic extends cdk.Construct { this.subscriberFunctions = []; subscribers.forEach((subscriber, i) => { - const functionProps = (typeof subscriber === "string") ? { handler: subscriber } : subscriber; - const func = new Func(this, `Subscriber_${i}`, functionProps); + const func = Func.fromDefinition(this, `Subscriber_${i}`, subscriber); this.snsTopic.addSubscription(new snsSubscriptions.LambdaSubscription(func)); this.subscriberFunctions.push(func); }); diff --git a/packages/resources/src/index.ts b/packages/resources/src/index.ts index 535fe7975c..ed0c877d99 100644 --- a/packages/resources/src/index.ts +++ b/packages/resources/src/index.ts @@ -1,8 +1,8 @@ export * from "./App"; export * from "./Api"; +export * from "./Cron"; export * from "./Queue"; export * from "./Stack"; export * from "./Table"; export * from "./Topic"; export * from "./Function"; -export * from "./Scheduler"; diff --git a/packages/resources/test/Api.test.ts b/packages/resources/test/Api.test.ts index 6d3168f6b9..072050a058 100644 --- a/packages/resources/test/Api.test.ts +++ b/packages/resources/test/Api.test.ts @@ -1,22 +1,34 @@ -/* eslint-disable @typescript-eslint/no-explicit-any*/ -/* eslint-disable @typescript-eslint/ban-ts-comment*/ - +import '@aws-cdk/assert/jest'; +import { ABSENT } from '@aws-cdk/assert'; import * as lambda from "@aws-cdk/aws-lambda"; -import { App, Stack, Api } from "../src"; -import { getStackCfResources } from "./helpers"; +import * as apig from "@aws-cdk/aws-apigatewayv2"; +import { App, Stack, Api, Function } from "../src"; -test("api-name", async () => { - const app = new App(); - const stack = new Stack(app, "stack"); - const { httpApi } = new Api(stack, "Api", { +test("base", async () => { + const stack = new Stack(new App(), "stack"); + const { accessLogGroup } = new Api(stack, "Api", { routes: { "GET /": "test/lambda.handler", }, }); - expect((httpApi.node?.defaultChild as any).name).toMatch("dev-my-app-Api"); + expect(stack).toHaveResource('AWS::ApiGatewayV2::Api', { + Name: "dev-my-app-Api", + CorsConfiguration: { + AllowHeaders: ["*"], + AllowMethods: ["GET", "PUT", "POST", "HEAD", "PATCH", "DELETE", "OPTIONS"], + AllowOrigins: ["*"], + }, + }); + expect(stack).toHaveResource('AWS::ApiGatewayV2::Stage', { + AccessLogSettings: { + DestinationArn: { "Fn::GetAtt": [ "ApiLogGroup1717FE17", "Arn" ] }, + Format: + '{\"requestTime\":\"$context.requestTime\",\"requestId\":\"$context.requestId\",\"httpMethod\":\"$context.httpMethod\",\"path\":\"$context.path\",\"routeKey\":\"$context.routeKey\",\"status\":\"$context.status\",\"responseLatency\":\"$context.responseLatency\",\"integrationRequestId\":\"$context.integration.requestId\",\"integrationStatus\":\"$context.integration.status\",\"integrationLatency\":\"$context.integration.latency\",\"integrationServiceStatus\":\"$context.integration.integrationStatus\",\"ip\":\"$context.identity.sourceIp\",\"userAgent\":\"$context.identity.userAgent\",\"cognitoIdentityId\":\"$context.identity.cognitoIdentityId\"}', + }, + }); }); -test("api-cors-redefined", async () => { +test("cors-redefined", async () => { const app = new App(); const stack = new Stack(app, "stack"); expect(() => { @@ -25,27 +37,12 @@ test("api-cors-redefined", async () => { routes: { "GET /": "test/lambda.handler", }, - httpApiProps: {}, + httpApi: new apig.HttpApi(stack, "HttpApi"), }); - }).toThrow(/Cannot define both cors and httpApiProps/); + }).toThrow(/Cannot define both cors and httpApi/); }); -test("api-cors-default", async () => { - const app = new App(); - const stack = new Stack(app, "stack"); - const { httpApi } = new Api(stack, "Api", { - routes: { - "GET /": "test/lambda.handler", - }, - }); - expect((httpApi.node?.defaultChild as any).corsConfiguration).toMatchObject({ - allowHeaders: ["*"], - allowMethods: ["GET", "PUT", "POST", "HEAD", "PATCH", "DELETE", "OPTIONS"], - allowOrigins: ["*"], - }); -}); - -test("api-cors-true", async () => { +test("cors-true", async () => { const app = new App(); const stack = new Stack(app, "stack"); const { httpApi } = new Api(stack, "Api", { @@ -54,14 +51,16 @@ test("api-cors-true", async () => { "GET /": "test/lambda.handler", }, }); - expect((httpApi.node?.defaultChild as any).corsConfiguration).toMatchObject({ - allowHeaders: ["*"], - allowMethods: ["GET", "PUT", "POST", "HEAD", "PATCH", "DELETE", "OPTIONS"], - allowOrigins: ["*"], + expect(stack).toHaveResource('AWS::ApiGatewayV2::Api', { + CorsConfiguration: { + AllowHeaders: ["*"], + AllowMethods: ["GET", "PUT", "POST", "HEAD", "PATCH", "DELETE", "OPTIONS"], + AllowOrigins: ["*"], + }, }); }); -test("api-cors-false", async () => { +test("cors-false", async () => { const app = new App(); const stack = new Stack(app, "stack"); const { httpApi } = new Api(stack, "Api", { @@ -70,10 +69,12 @@ test("api-cors-false", async () => { "GET /": "test/lambda.handler", }, }); - expect((httpApi.node?.defaultChild as any).corsConfiguration).toBeUndefined(); + expect(stack).toHaveResource('AWS::ApiGatewayV2::Api', { + CorsConfiguration: ABSENT, + }); }); -test("api-access-log-redefined", async () => { +test("access-log-redefined", async () => { const app = new App(); const stack = new Stack(app, "stack"); expect(() => { @@ -82,30 +83,12 @@ test("api-access-log-redefined", async () => { routes: { "GET /": "test/lambda.handler", }, - httpApiProps: {}, + httpApi: new apig.HttpApi(stack, "HttpApi"), }); - }).toThrow(/Cannot define both accessLog and httpApiProps/); -}); - -test("api-access-log-default", async () => { - const app = new App(); - const stack = new Stack(app, "stack"); - const { httpApi, accessLogGroup } = new Api(stack, "Api", { - routes: { - "GET /": "test/lambda.handler", - }, - }); - expect(accessLogGroup?.logGroupArn).toContain("TOKEN"); - expect( - (httpApi.defaultStage?.node.defaultChild as any).accessLogSettings - ).toMatchObject({ - format: - '{"path":"$context.path","status":"$context.status","routeKey":"$context.routeKey","protocol":"$context.protocol","requestId":"$context.requestId","ip":"$context.identity.sourceIp","httpMethod":"$context.httpMethod","requestTime":"$context.requestTime","responseLength":"$context.responseLength","responseLatency":"$context.responseLatency","cognitoIdentityId":"$context.identity.cognitoIdentityId"}', - destinationArn: accessLogGroup?.logGroupArn, - }); + }).toThrow(/Cannot define both accessLog and httpApi/); }); -test("api-access-log-true", async () => { +test("access-log-true", async () => { const app = new App(); const stack = new Stack(app, "stack"); const { httpApi, accessLogGroup } = new Api(stack, "Api", { @@ -114,17 +97,16 @@ test("api-access-log-true", async () => { "GET /": "test/lambda.handler", }, }); - expect(accessLogGroup?.logGroupArn).toContain("TOKEN"); - expect( - (httpApi.defaultStage?.node.defaultChild as any).accessLogSettings - ).toMatchObject({ - format: - '{"path":"$context.path","status":"$context.status","routeKey":"$context.routeKey","protocol":"$context.protocol","requestId":"$context.requestId","ip":"$context.identity.sourceIp","httpMethod":"$context.httpMethod","requestTime":"$context.requestTime","responseLength":"$context.responseLength","responseLatency":"$context.responseLatency","cognitoIdentityId":"$context.identity.cognitoIdentityId"}', - destinationArn: accessLogGroup?.logGroupArn, + expect(stack).toHaveResource('AWS::ApiGatewayV2::Stage', { + AccessLogSettings: { + DestinationArn: { "Fn::GetAtt": [ "ApiLogGroup1717FE17", "Arn" ] }, + Format: + '{\"requestTime\":\"$context.requestTime\",\"requestId\":\"$context.requestId\",\"httpMethod\":\"$context.httpMethod\",\"path\":\"$context.path\",\"routeKey\":\"$context.routeKey\",\"status\":\"$context.status\",\"responseLatency\":\"$context.responseLatency\",\"integrationRequestId\":\"$context.integration.requestId\",\"integrationStatus\":\"$context.integration.status\",\"integrationLatency\":\"$context.integration.latency\",\"integrationServiceStatus\":\"$context.integration.integrationStatus\",\"ip\":\"$context.identity.sourceIp\",\"userAgent\":\"$context.identity.userAgent\",\"cognitoIdentityId\":\"$context.identity.cognitoIdentityId\"}', + }, }); }); -test("api-access-log-false", async () => { +test("access-log-false", async () => { const app = new App(); const stack = new Stack(app, "stack"); const { httpApi, accessLogGroup } = new Api(stack, "Api", { @@ -133,13 +115,12 @@ test("api-access-log-false", async () => { "GET /": "test/lambda.handler", }, }); - expect(accessLogGroup).toBeUndefined(); - expect( - (httpApi.defaultStage?.node.defaultChild as any).accessLogSettings - ).toBeUndefined(); + expect(stack).toHaveResource('AWS::ApiGatewayV2::Stage', { + AccessLogSettings: ABSENT, + }); }); -test("api-default-authorization-type-invalid", async () => { +test("default-authorization-type-invalid", async () => { const app = new App(); const stack = new Stack(app, "stack"); expect(() => { @@ -154,7 +135,7 @@ test("api-default-authorization-type-invalid", async () => { ); }); -test("api-default-authorization-type-iam", async () => { +test("default-authorization-type-iam", async () => { const app = new App(); const stack = new Stack(app, "stack"); new Api(stack, "Api", { @@ -163,13 +144,12 @@ test("api-default-authorization-type-iam", async () => { }, defaultAuthorizationType: "AWS_IAM", }); - const route = Object.values(getStackCfResources(stack)).find( - (resource: any) => resource.Type === "AWS::ApiGatewayV2::Route" - ) as any; - expect(route.Properties.AuthorizationType).toContain("AWS_IAM"); + expect(stack).toHaveResource('AWS::ApiGatewayV2::Route', { + AuthorizationType: "AWS_IAM", + }); }); -test("api-default-authorization-type-none", async () => { +test("default-authorization-type-none", async () => { const app = new App(); const stack = new Stack(app, "stack"); new Api(stack, "Api", { @@ -178,13 +158,12 @@ test("api-default-authorization-type-none", async () => { }, defaultAuthorizationType: "NONE", }); - const route = Object.values(getStackCfResources(stack)).find( - (resource: any) => resource.Type === "AWS::ApiGatewayV2::Route" - ) as any; - expect(route.Properties.AuthorizationType).toContain("NONE"); + expect(stack).toHaveResource('AWS::ApiGatewayV2::Route', { + AuthorizationType: "NONE", + }); }); -test("api-default-authorization-type-default", async () => { +test("default-authorization-type-default", async () => { const app = new App(); const stack = new Stack(app, "stack"); new Api(stack, "Api", { @@ -192,13 +171,12 @@ test("api-default-authorization-type-default", async () => { "GET /": "test/lambda.handler", }, }); - const route = Object.values(getStackCfResources(stack)).find( - (resource: any) => resource.Type === "AWS::ApiGatewayV2::Route" - ) as any; - expect(route.Properties.AuthorizationType).toContain("NONE"); + expect(stack).toHaveResource('AWS::ApiGatewayV2::Route', { + AuthorizationType: "NONE", + }); }); - -test("api-default-lambda-props", async () => { + +test("default-function-props", async () => { const app = new App(); const stack = new Stack(app, "stack"); new Api(stack, "Api", { @@ -209,13 +187,12 @@ test("api-default-lambda-props", async () => { runtime: lambda.Runtime.NODEJS_8_10, }, }); - const route = Object.values(getStackCfResources(stack)).find( - (resource: any) => resource.Type === "AWS::Lambda::Function" - ) as any; - expect(route.Properties.Runtime).toMatch("nodejs8.10"); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Runtime: "nodejs8.10", + }); }); -test("api-routes-undefined", async () => { +test("routes-undefined", async () => { const app = new App(); const stack = new Stack(app, "stack"); expect(() => { @@ -224,7 +201,7 @@ test("api-routes-undefined", async () => { }).toThrow(/Missing "routes" in sst.Api/); }); -test("api-routes-empty", async () => { +test("routes-empty", async () => { const app = new App(); const stack = new Stack(app, "stack"); expect(() => { @@ -234,7 +211,7 @@ test("api-routes-empty", async () => { }).toThrow(/At least 1 route is required/); }); -test("api-route-invalid", async () => { +test("route-invalid", async () => { const app = new App(); const stack = new Stack(app, "stack"); expect(() => { @@ -246,7 +223,7 @@ test("api-route-invalid", async () => { }).toThrow(/Invalid route GET \/ 1 2 3/); }); -test("api-route-invalid-method", async () => { +test("route-invalid-method", async () => { const app = new App(); const stack = new Stack(app, "stack"); expect(() => { @@ -258,7 +235,7 @@ test("api-route-invalid-method", async () => { }).toThrow(/Invalid method defined for "ANY \/"/); }); -test("api-route-invalid-path", async () => { +test("route-invalid-path", async () => { const app = new App(); const stack = new Stack(app, "stack"); expect(() => { @@ -270,14 +247,14 @@ test("api-route-invalid-path", async () => { }).toThrow(/Invalid path defined for "GET "/); }); -test("api-route-authorization-type-invalid", async () => { +test("route-authorization-type-invalid", async () => { const app = new App(); const stack = new Stack(app, "stack"); expect(() => { new Api(stack, "Api", { routes: { "GET /": { - functionProps: { + function: { handler: "test/lambda.handler", }, authorizationType: "ABC", @@ -289,63 +266,280 @@ test("api-route-authorization-type-invalid", async () => { ); }); -test("api-route-authorization-type-override-by-default", async () => { +test("route-authorization-type-override-by-default", async () => { const app = new App(); const stack = new Stack(app, "stack"); new Api(stack, "Api", { defaultAuthorizationType: "AWS_IAM", routes: { "GET /": { - functionProps: { + function: { handler: "test/lambda.handler", }, authorizationType: "NONE", }, }, }); - const route = Object.values(getStackCfResources(stack)).find( - (resource: any) => resource.Type === "AWS::ApiGatewayV2::Route" - ) as any; - expect(route.Properties.AuthorizationType).toContain("NONE"); + expect(stack).toHaveResource('AWS::ApiGatewayV2::Route', { + AuthorizationType: "NONE", + }); }); -test("api-route-handler-undefined", async () => { +test("route-value-string", async () => { + const app = new App(); + const stack = new Stack(app, "stack"); + new Api(stack, "Api", { + routes: { + "GET /": "test/lambda.handler", + }, + }); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); +}); + +test("route-value-string-with-defaultFunctionProps", async () => { + const app = new App(); + const stack = new Stack(app, "stack"); + new Api(stack, "Api", { + routes: { + "GET /": "test/lambda.handler", + }, + defaultFunctionProps: { + timeout: 3, + }, + }); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + Timeout: 3 + }); +}); + +test("route-value-Function", async () => { + const app = new App(); + const stack = new Stack(app, "stack"); + const f = new Function(stack, "F", { handler: "test/lambda.handler" }); + new Api(stack, "Api", { + routes: { + "GET /": f, + }, + }); + expect(stack).toCountResources('AWS::Lambda::Function', 1); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); +}); + +test("route-value-Function-with-defaultFunctionProps", async () => { + const app = new App(); + const stack = new Stack(app, "stack"); + const f = new Function(stack, "F", { handler: "test/lambda.handler" }); + expect(() => { + new Api(stack, "Api", { + routes: { + "GET /": f, + }, + defaultFunctionProps: { + timeout: 3, + }, + }); + }).toThrow(/Cannot define defaultFunctionProps/); +}); + +test("route-value-FunctionProps-empty", async () => { const app = new App(); const stack = new Stack(app, "stack"); expect(() => { new Api(stack, "Api", { routes: { "GET /": { - functionProps: {}, + function: {}, }, }, }); - }).toThrow(/No handler defined for "GET \/"/); + }).toThrow(/No handler defined/); +}); + +test("route-value-FunctionProps", async () => { + const app = new App(); + const stack = new Stack(app, "stack"); + new Api(stack, "Api", { + routes: { + "GET /": { + handler: "test/lambda.handler", + }, + }, + }); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); }); -test("api-route-handler-override-by-default", async () => { +test("route-value-FunctionProps-with-defaultFunctionProps", async () => { const app = new App(); const stack = new Stack(app, "stack"); new Api(stack, "Api", { + routes: { + "GET /": { + handler: "test/lambda.handler", + }, + }, defaultFunctionProps: { - runtime: lambda.Runtime.NODEJS_8_10, + timeout: 3, }, + }); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + Timeout: 3, + }); +}); + +test("route-value-FunctionProps-with-defaultFunctionProps-override", async () => { + const app = new App(); + const stack = new Stack(app, "stack"); + new Api(stack, "Api", { + routes: { + "GET /": { + handler: "test/lambda.handler", + timeout: 5, + }, + }, + defaultFunctionProps: { + timeout: 3, + }, + }); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + Timeout: 5, + }); +}); + +test("route-value-ApiRouteProps-function-string", async () => { + const app = new App(); + const stack = new Stack(app, "stack"); + new Api(stack, "Api", { + routes: { + "GET /": { + function: "test/lambda.handler", + }, + }, + }); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); +}); + +test("route-value-ApiRouteProps-function-string-with-defaultFunctionProps", async () => { + const app = new App(); + const stack = new Stack(app, "stack"); + new Api(stack, "Api", { + routes: { + "GET /": { + function: "test/lambda.handler", + }, + }, + defaultFunctionProps: { + timeout: 3, + }, + }); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + Timeout: 3, + }); +}); + +test("route-value-ApiRouteProps-function-Function", async () => { + const app = new App(); + const stack = new Stack(app, "stack"); + const f = new Function(stack, "F", { handler: "test/lambda.handler" }); + new Api(stack, "Api", { + routes: { + "GET /": { function: f }, + }, + }); + expect(stack).toCountResources('AWS::Lambda::Function', 1); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); +}); + +test("route-value-ApiRouteProps-function-Function-with-defaultFunctionProps", async () => { + const app = new App(); + const stack = new Stack(app, "stack"); + const f = new Function(stack, "F", { handler: "test/lambda.handler" }); + expect(() => { + new Api(stack, "Api", { + routes: { + "GET /": { function: f }, + }, + defaultFunctionProps: { + timeout: 3, + }, + }); + }).toThrow(/Cannot define defaultFunctionProps/); +}); + +test("route-value-ApiRouteProps-function-FunctionProps", async () => { + const app = new App(); + const stack = new Stack(app, "stack"); + new Api(stack, "Api", { routes: { "GET /": { - functionProps: { + function: { handler: "test/lambda.handler", - runtime: lambda.Runtime.NODEJS_10_X, }, }, }, }); - const route = Object.values(getStackCfResources(stack)).find( - (resource: any) => resource.Type === "AWS::Lambda::Function" - ) as any; - expect(route.Properties.Runtime).toMatch("nodejs10.x"); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); }); -test("api-get-function", async () => { +test("route-value-ApiRouteProps-function-FunctionProps-with-defaultFunctionProps", async () => { + const app = new App(); + const stack = new Stack(app, "stack"); + new Api(stack, "Api", { + routes: { + "GET /": { + function: { + handler: "test/lambda.handler", + }, + }, + }, + defaultFunctionProps: { + timeout: 3, + }, + }); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + Timeout: 3, + }); +}); + +test("route-value-ApiRouteProps-function-FunctionProps-with-defaultFunctionProps-override", async () => { + const app = new App(); + const stack = new Stack(app, "stack"); + new Api(stack, "Api", { + routes: { + "GET /": { + function: { + handler: "test/lambda.handler", + timeout: 5, + }, + }, + }, + defaultFunctionProps: { + timeout: 3, + }, + }); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + Timeout: 5, + }); +}); + +test("get-function", async () => { const app = new App(); const stack = new Stack(app, "stack"); const ret = new Api(stack, "Api", { @@ -353,11 +547,22 @@ test("api-get-function", async () => { "GET /": "test/lambda.handler", }, }); - const lambda = ret.getFunction("GET /"); - expect(lambda).toBeDefined(); + expect(ret.getFunction("GET /")).toBeDefined(); +}); + +test("get-function-multi-spaces", async () => { + const app = new App(); + const stack = new Stack(app, "stack"); + const ret = new Api(stack, "Api", { + routes: { + "GET /": "test/lambda.handler", + }, + }); + expect(ret.getFunction("GET /")).toBeDefined(); + expect(ret.getFunction("GET /")).toBeDefined(); }); -test("api-get-function-undefined", async () => { +test("get-function-undefined", async () => { const app = new App(); const stack = new Stack(app, "stack"); const ret = new Api(stack, "Api", { @@ -365,6 +570,5 @@ test("api-get-function-undefined", async () => { "GET /": "test/lambda.handler", }, }); - const lambda = ret.getFunction("GET /path"); - expect(lambda).toBeUndefined(); + expect(ret.getFunction("GET /path")).toBeUndefined(); }); diff --git a/packages/resources/test/Cron.test.ts b/packages/resources/test/Cron.test.ts new file mode 100644 index 0000000000..562ead413f --- /dev/null +++ b/packages/resources/test/Cron.test.ts @@ -0,0 +1,159 @@ +import '@aws-cdk/assert/jest'; +import * as cdk from "@aws-cdk/core"; +import * as events from "@aws-cdk/aws-events"; +import { App, Stack, Cron, Function, FunctionPermissionType } from "../src"; + +const lambdaDefaultPolicy = { + Action: [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords" + ], + Effect: "Allow", + Resource: "*" +}; + +test("schedule-string", async () => { + const stack = new Stack(new App(), "stack"); + new Cron(stack, "Cron", { + schedule: 'rate(1 minute)', + job: "test/lambda.handler" + }); + expect(stack).toHaveResource('AWS::Events::Rule', { + ScheduleExpression: "rate(1 minute)", + }); +}); + +test("schedule-rate", async () => { + const stack = new Stack(new App(), "stack"); + new Cron(stack, "Cron", { + schedule: cdk.Duration.days(1), + job: "test/lambda.handler" + }); + expect(stack).toHaveResource('AWS::Events::Rule', { + ScheduleExpression: "rate(1 day)", + }); +}); + +test("schedule-cron", async () => { + const stack = new Stack(new App(), "stack"); + new Cron(stack, "Cron", { + schedule: { minute: '0', hour: '4' }, + job: "test/lambda.handler" + }); + expect(stack).toCountResources('AWS::Lambda::Function', 1); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); + expect(stack).toCountResources('AWS::Events::Rule', 1); + expect(stack).toHaveResource('AWS::Events::Rule', { + ScheduleExpression: "cron(0 4 * * ? *)", + }); +}); + +test("schedule-undefined", async () => { + const stack = new Stack(new App(), "stack"); + expect(() => { + new Cron(stack, "Cron", { + job: "test/lambda.handler" + }); + }).toThrow(/No schedule defined/); +}); + +test("job-string", async () => { + const stack = new Stack(new App(), "stack"); + new Cron(stack, "Cron", { + schedule: 'rate(1 minute)', + job: "test/lambda.handler" + }); + expect(stack).toCountResources('AWS::Lambda::Function', 1); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); +}); + +test("job-Function", async () => { + const stack = new Stack(new App(), "stack"); + const f = new Function(stack, "Function", { handler: "test/lambda.handler" }); + new Cron(stack, "Cron", { + schedule: 'rate(1 minute)', + job: f + }); + expect(stack).toCountResources('AWS::Lambda::Function', 1); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); +}); + +test("job-FunctionProps", async () => { + const stack = new Stack(new App(), "stack"); + new Cron(stack, "Cron", { + schedule: 'rate(1 minute)', + job: { handler: "test/lambda.handler" } + }); + expect(stack).toCountResources('AWS::Lambda::Function', 1); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); +}); + +test("job-undefined", async () => { + const stack = new Stack(new App(), "stack"); + expect(() => { + // @ts-ignore + new Cron(stack, "Cron", { + schedule: 'rate(1 minute)', + }); + }).toThrow(/No job defined/); +}); + +test("eventsRule", async () => { + const stack = new Stack(new App(), "stack"); + const rule = new events.Rule(stack, "Rule", { + schedule: events.Schedule.expression('rate(1 minute)'), + }); + new Cron(stack, "Cron", { + job: "test/lambda.handler", + eventsRule: rule, + }); + expect(stack).toCountResources('AWS::Lambda::Function', 1); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); + expect(stack).toCountResources('AWS::Events::Rule', 1); + expect(stack).toHaveResource('AWS::Events::Rule', { + ScheduleExpression: "rate(1 minute)", + }); +}); + +test("eventsRule-redefined", async () => { + const stack = new Stack(new App(), "stack"); + const rule = new events.Rule(stack, "Rule", { + schedule: events.Schedule.expression('rate(1 minute)'), + }); + expect(() => { + new Cron(stack, "Cron", { + schedule: 'rate(1 minute)', + job: "test/lambda.handler", + eventsRule: rule, + }); + }).toThrow(/Cannot define both schedule and eventsRule/); +}); + +test("attachPermissions", async () => { + const stack = new Stack(new App(), "stack"); + const cron = new Cron(stack, "Cron", { + schedule: 'rate(1 minute)', + job: "test/lambda.handler", + }); + cron.attachPermissions([ FunctionPermissionType.S3 ]); + expect(stack).toHaveResource('AWS::IAM::Policy', { + PolicyDocument: { + Statement: [ + lambdaDefaultPolicy, + { Action: "s3:*", Effect: "Allow", Resource: "*" }, + ], + Version: "2012-10-17" + }, + PolicyName: "CronJobServiceRoleDefaultPolicy283E5BD2", + }); +}); diff --git a/packages/resources/test/Function.test.ts b/packages/resources/test/Function.test.ts index b29d2474ba..e186787227 100644 --- a/packages/resources/test/Function.test.ts +++ b/packages/resources/test/Function.test.ts @@ -1,14 +1,17 @@ -/* eslint-disable @typescript-eslint/no-explicit-any*/ -/* eslint-disable @typescript-eslint/ban-ts-comment*/ - +import '@aws-cdk/assert/jest'; +import * as apig from "@aws-cdk/aws-apigatewayv2"; +import * as sns from "@aws-cdk/aws-sns"; import * as lambda from "@aws-cdk/aws-lambda"; -import { - App, - Stack, - Function, - HandlerProps, - FunctionHandlerProps, -} from "../src"; +import { App, Stack, Function, HandlerProps, FunctionPermissionType, FunctionHandlerProps } from "../src"; + +const lambdaDefaultPolicy = { + Action: [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords" + ], + Effect: "Allow", + Resource: "*" +}; test("non-namespaced-props", async () => { const handlerProps = { srcPath: "a", handler: "b" } as HandlerProps; @@ -20,29 +23,212 @@ test("namespaced-props", async () => { expect(handlerProps).toBeDefined(); }); -test("function-handler-missing", async () => { - const app = new App(); - const stack = new Stack(app, "stack"); +test("base", async () => { + const stack = new Stack(new App(), "stack"); + const f = new Function(stack, "Function", { + handler: "test/lambda.handler", + }); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + Timeout: 10, + MemorySize: 1024, + TracingConfig: { Mode: "Active" }, + }); +}); + +test("base-override", async () => { + const stack = new Stack(new App(), "stack"); + const f = new Function(stack, "Function", { + handler: "test/lambda.handler", + timeout: 20, + memorySize: 512, + }); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + Timeout: 20, + MemorySize: 512, + }); +}); + +test("handler-missing", async () => { + const stack = new Stack(new App(), "stack"); expect(() => { new Function(stack, "Function", {}); }).toThrow(/No handler defined/); }); -test("function-xray-default", async () => { - const app = new App(); - const stack = new Stack(app, "stack"); - const func = new Function(stack, "Function", { +test("runtime-invalid", async () => { + const stack = new Stack(new App(), "stack"); + expect(() => { + new Function(stack, "Function", { + handler: "test/lambda.handler", + runtime: lambda.Runtime.PYTHON_3_8, + }); + }).toThrow(/The specified runtime is not supported/); +}); + +test("xray-disabled", async () => { + const stack = new Stack(new App(), "stack"); + const f = new Function(stack, "Function", { handler: "test/lambda.handler", + tracing: lambda.Tracing.DISABLED, }); - expect((func.node?.defaultChild as any).tracingConfig.mode).toMatch("Active"); + expect((f.node?.defaultChild as any).tracingConfig).toBeUndefined(); }); -test("function-xray-disabled", async () => { - const app = new App(); - const stack = new Stack(app, "stack"); - const func = new Function(stack, "Function", { +test("attachPermission-string-all", async () => { + const stack = new Stack(new App(), "stack"); + const f = new Function(stack, "Function", { handler: "test/lambda.handler", - tracing: lambda.Tracing.DISABLED, }); - expect((func.node?.defaultChild as any).tracingConfig).toBeUndefined(); + f.attachPermissions(FunctionPermissionType.ALL); + expect(stack).toHaveResource('AWS::IAM::Policy', { + PolicyDocument: { + Statement: [ + lambdaDefaultPolicy, + { Action: "*", Effect: "Allow", Resource: "*" }, + ], + Version: "2012-10-17" + }, + }); }); + +test("attachPermission-string-invalid", async () => { + const stack = new Stack(new App(), "stack"); + const f = new Function(stack, "Function", { + handler: "test/lambda.handler", + }); + expect(() => { + f.attachPermissions("abc" as FunctionPermissionType); + }).toThrow(/The specified permissions is not a supported FunctionPermissionType/); +}); + +test("attachPermission-array-empty", async () => { + const stack = new Stack(new App(), "stack"); + const f = new Function(stack, "Function", { + handler: "test/lambda.handler", + }); + f.attachPermissions([]); + expect(stack).toHaveResource('AWS::IAM::Policy', { + PolicyDocument: { + Statement: [ lambdaDefaultPolicy ], + Version: "2012-10-17" + }, + }); +}); + +test("attachPermission-array-string", async () => { + const stack = new Stack(new App(), "stack"); + const f = new Function(stack, "Function", { + handler: "test/lambda.handler", + }); + f.attachPermissions([ FunctionPermissionType.S3, FunctionPermissionType.DynamoDB ]); + expect(stack).toHaveResource('AWS::IAM::Policy', { + PolicyDocument: { + Statement: [ + lambdaDefaultPolicy, + { Action: [ "s3:*", "dynamodb:*" ], Effect: "Allow", Resource: "*" }, + ], + Version: "2012-10-17" + }, + }); +}); + +test("attachPermission-array-cfn-construct", async () => { + const stack = new Stack(new App(), "stack"); + const topic = new sns.Topic(stack, "Topic"); + const f = new Function(stack, "Function", { + handler: "test/lambda.handler", + }); + f.attachPermissions([ topic ]); + expect(stack).toHaveResource('AWS::IAM::Policy', { + PolicyDocument: { + Statement: [ + lambdaDefaultPolicy, + { Action: "sns:*", Effect: "Allow", Resource: "*" }, + ], + Version: "2012-10-17" + }, + }); +}); + +test("attachPermission-array-cfn-construct-not-supported", async () => { + const stack = new Stack(new App(), "stack"); + const api = new apig.HttpApi(stack, "Api"); + const f = new Function(stack, "Function", { + handler: "test/lambda.handler", + }); + expect(() => { + f.attachPermissions([ api ]); + }).toThrow(/The specified permissions is not a supported construct type/); +}); + +test("attachPermission-array-cfn-grant", async () => { + const stack = new Stack(new App(), "stack"); + const topic = new sns.Topic(stack, "Topic"); + const f = new Function(stack, "Function", { + handler: "test/lambda.handler", + }); + f.attachPermissions([ topic.grantPublish.bind(topic) ]); + expect(stack).toHaveResource('AWS::IAM::Policy', { + PolicyDocument: { + Statement: [ + lambdaDefaultPolicy, + { Action: "sns:Publish", Effect: "Allow", Resource: { Ref: "TopicBFC7AF6E" } }, + ], + Version: "2012-10-17" + }, + }); +}); + +test("fromDefinition-string", async () => { + const stack = new Stack(new App(), "stack"); + const f = Function.fromDefinition(stack, "Function", "test/lambda.handler"); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + Timeout: 10, + }); +}); + +test("fromDefinition-props", async () => { + const stack = new Stack(new App(), "stack"); + const f = Function.fromDefinition(stack, "Function", { + handler: "test/lambda.handler", + }); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); +}); + +test("fromDefinition-sstFunction", async () => { + const stack = new Stack(new App(), "stack"); + const f = Function.fromDefinition(stack, "Function", new Function(stack, "Function", { + handler: "test/lambda.handler", + timeout: 20, + })); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + Timeout: 20, + }); +}); + +test("fromDefinition-lambdaFunction", async () => { + const stack = new Stack(new App(), "stack"); + expect(() => { + // @ts-ignore + Function.fromDefinition(stack, "Function", new lambda.Function(stack, "Function", { + runtime: lambda.Runtime.NODEJS_10_X, + handler: "lambda.handler", + code: lambda.Code.fromAsset('test'), + })); + }).toThrow(/Please use sst.Function instead of lambda.Function for the \"Function\" Function./); +}); + +test("fromDefinition-garbage", async () => { + const stack = new Stack(new App(), "stack"); + expect(() => { + // @ts-ignore + Function.fromDefinition(stack, "Function", { }); + }).toThrow(/Invalid function definition for the \"Function\" Function/); +}); + diff --git a/packages/resources/test/Queue.test.ts b/packages/resources/test/Queue.test.ts new file mode 100644 index 0000000000..3eb2ab1e42 --- /dev/null +++ b/packages/resources/test/Queue.test.ts @@ -0,0 +1,118 @@ +import '@aws-cdk/assert/jest'; +import * as sqs from "@aws-cdk/aws-sqs"; +import { App, Stack, Queue, Function, FunctionPermissionType } from "../src"; + +const lambdaDefaultPolicy = { + Action: [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords" + ], + Effect: "Allow", + Resource: "*" +}; +const queueDefaultPolicy = { + "Action": [ + "sqs:ReceiveMessage", + "sqs:ChangeMessageVisibility", + "sqs:GetQueueUrl", + "sqs:DeleteMessage", + "sqs:GetQueueAttributes" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "Queue381943A6", + "Arn" + ] + } +}; + +test("consumer-string", async () => { + const stack = new Stack(new App(), "stack"); + new Queue(stack, "Queue", { + consumer: "test/lambda.handler" + }); + expect(stack).toCountResources('AWS::Lambda::Function', 1); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); + expect(stack).toCountResources('AWS::SQS::Queue', 1); + expect(stack).toHaveResource('AWS::SQS::Queue', { + QueueName: "dev-my-app-Queue", + }); +}); + +test("consumer-Function", async () => { + const stack = new Stack(new App(), "stack"); + const f = new Function(stack, "Function", { handler: "test/lambda.handler" }); + new Queue(stack, "Queue", { + consumer: f + }); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); + expect(stack).toHaveResource('AWS::SQS::Queue', { + QueueName: "dev-my-app-Queue", + }); +}); + +test("consumer-FunctionProps", async () => { + const stack = new Stack(new App(), "stack"); + new Queue(stack, "Queue", { + consumer: { handler: "test/lambda.handler" } + }); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); + expect(stack).toHaveResource('AWS::SQS::Queue', { + QueueName: "dev-my-app-Queue", + }); +}); + +test("consumer-undefined", async () => { + const stack = new Stack(new App(), "stack"); + expect(() => { + // @ts-ignore + new Queue(stack, "Queue", { + }); + }).toThrow(/No consumer defined/); +}); + +test("sqsQueue", async () => { + const stack = new Stack(new App(), "stack"); + const queue = new sqs.Queue(stack, "Q", { + queueName: 'my-queue', + }); + new Queue(stack, "Queue", { + consumer: "test/lambda.handler", + sqsQueue: queue, + }); + expect(stack).toCountResources('AWS::Lambda::Function', 1); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); + expect(stack).toCountResources('AWS::SQS::Queue', 1); + expect(stack).toHaveResource('AWS::SQS::Queue', { + QueueName: "my-queue", + }); +}); + +test("attachPermissions", async () => { + const stack = new Stack(new App(), "stack"); + const queue = new Queue(stack, "Queue", { + consumer: "test/lambda.handler", + }); + queue.attachPermissions([ FunctionPermissionType.S3 ]); + expect(stack).toHaveResource('AWS::IAM::Policy', { + PolicyDocument: { + Statement: [ + lambdaDefaultPolicy, + queueDefaultPolicy, + { Action: "s3:*", Effect: "Allow", Resource: "*" }, + ], + Version: "2012-10-17" + }, + PolicyName: "QueueConsumerServiceRoleDefaultPolicy8A09B9BC", + }); +}); + diff --git a/packages/resources/test/Table.test.ts b/packages/resources/test/Table.test.ts new file mode 100644 index 0000000000..5a934a9413 --- /dev/null +++ b/packages/resources/test/Table.test.ts @@ -0,0 +1,106 @@ +import '@aws-cdk/assert/jest'; +import * as dynamodb from "@aws-cdk/aws-dynamodb"; +import { App, Stack, Table } from "../src"; + +test("base", async () => { + const stack = new Stack(new App(), "stack"); + new Table(stack, "Table", { + fields: { + "noteId": dynamodb.AttributeType.STRING, + "userId": dynamodb.AttributeType.STRING, + }, + primaryIndex: { partitionKey: "noteId", sortKey: "userId" }, + }); + expect(stack).toHaveResource('AWS::DynamoDB::Table', { + TableName: "dev-my-app-Table", + BillingMode: dynamodb.BillingMode.PAY_PER_REQUEST, + PointInTimeRecoverySpecification: { PointInTimeRecoveryEnabled: true }, + KeySchema: [ + { AttributeName: 'noteId', KeyType: 'HASH' }, + { AttributeName: 'userId', KeyType: 'RANGE' } + ], + }); +}); + +test("secondary-indexes", async () => { + const stack = new Stack(new App(), "stack"); + new Table(stack, "Table", { + fields: { + "noteId": dynamodb.AttributeType.STRING, + "userId": dynamodb.AttributeType.STRING, + "time": dynamodb.AttributeType.NUMBER, + }, + primaryIndex: { partitionKey: "noteId", sortKey: "userId" }, + secondaryIndexes: { + "userTimeIndex": { partitionKey: "userId", sortKey: "time" }, + }, + }); + expect(stack).toHaveResource('AWS::DynamoDB::Table', { + KeySchema: [ + { AttributeName: 'noteId', KeyType: 'HASH' }, + { AttributeName: 'userId', KeyType: 'RANGE' }, + ], + GlobalSecondaryIndexes: [{ + IndexName: 'userTimeIndex', + KeySchema: [ + { AttributeName: 'userId', KeyType: 'HASH' }, + { AttributeName: 'time', KeyType: 'RANGE' }, + ], + Projection: { + ProjectionType: 'ALL', + }, + }], + }); +}); + +test("fields-undefined", async () => { + const stack = new Stack(new App(), "stack"); + expect(() => { + // @ts-ignore + new Table(stack, "Table", { + primaryIndex: { partitionKey: "noteId", sortKey: "userId" }, + secondaryIndexes: { + "userTimeIndex": { partitionKey: "userId", sortKey: "time" }, + }, + }); + }).toThrow(/No fields defined/); +}); + +test("fields-empty", async () => { + const stack = new Stack(new App(), "stack"); + expect(() => { + new Table(stack, "Table", { + fields: {}, + primaryIndex: { partitionKey: "noteId", sortKey: "userId" }, + }); + }).toThrow(/No fields defined/); +}); + +test("primaryIndex-undefined", async () => { + const stack = new Stack(new App(), "stack"); + expect(() => { + // @ts-ignore + new Table(stack, "Table", { + fields: { + "noteId": dynamodb.AttributeType.STRING, + "userId": dynamodb.AttributeType.STRING, + }, + }); + }).toThrow(/No primary index defined/); +}); + +test("primaryIndex-missing-partitionKey", async () => { + const stack = new Stack(new App(), "stack"); + expect(() => { + new Table(stack, "Table", { + fields: { + "noteId": dynamodb.AttributeType.STRING, + "userId": dynamodb.AttributeType.STRING, + }, + // @ts-ignore + primaryIndex: {}, + + }); + }).toThrow(/No partition key defined/); +}); + diff --git a/packages/resources/test/Topic.test.ts b/packages/resources/test/Topic.test.ts new file mode 100644 index 0000000000..f8a4a6ecf2 --- /dev/null +++ b/packages/resources/test/Topic.test.ts @@ -0,0 +1,161 @@ +import '@aws-cdk/assert/jest'; +import * as sns from "@aws-cdk/aws-sns"; +import { App, Stack, Topic, Function, FunctionPermissionType } from "../src"; + +const lambdaDefaultPolicy = { + Action: [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords" + ], + Effect: "Allow", + Resource: "*" +}; + +test("subscribers-string", async () => { + const stack = new Stack(new App(), "stack"); + new Topic(stack, "Topic", { + subscribers: [ "test/lambda.handler" ] + }); + expect(stack).toCountResources('AWS::Lambda::Function', 1); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); + expect(stack).toCountResources('AWS::SNS::Topic', 1); + expect(stack).toHaveResource('AWS::SNS::Topic', { + TopicName: "dev-my-app-Topic", + }); +}); + +test("subscribers-string-multiple", async () => { + const stack = new Stack(new App(), "stack"); + new Topic(stack, "Topic", { + subscribers: [ "test/lambda.handler", "test/lambda.handler" ] + }); + expect(stack).toCountResources('AWS::Lambda::Function', 2); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); + expect(stack).toCountResources('AWS::SNS::Topic', 1); + expect(stack).toHaveResource('AWS::SNS::Topic', { + TopicName: "dev-my-app-Topic", + }); +}); + +test("subscribers-Function", async () => { + const stack = new Stack(new App(), "stack"); + const f = new Function(stack, "Function", { handler: "test/lambda.handler" }); + new Topic(stack, "Topic", { + subscribers: [ f ] + }); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); + expect(stack).toHaveResource('AWS::SNS::Topic', { + TopicName: "dev-my-app-Topic", + }); +}); + +test("subscribers-FunctionProps", async () => { + const stack = new Stack(new App(), "stack"); + new Topic(stack, "Topic", { + subscribers: [ { handler: "test/lambda.handler" } ] + }); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); + expect(stack).toHaveResource('AWS::SNS::Topic', { + TopicName: "dev-my-app-Topic", + }); +}); + +test("subscribers-undefined", async () => { + const stack = new Stack(new App(), "stack"); + expect(() => { + // @ts-ignore + new Topic(stack, "Topic", { + }); + }).toThrow(/No subscribers defined/); +}); + +test("subscribers-empty", async () => { + const stack = new Stack(new App(), "stack"); + expect(() => { + new Topic(stack, "Topic", { + subscribers: [] + }); + }).toThrow(/No subscribers defined/); +}); + +test("snsTopic", async () => { + const stack = new Stack(new App(), "stack"); + const topic = new sns.Topic(stack, "T", { + topicName: 'my-topic', + }); + new Topic(stack, "Topic", { + subscribers: [ "test/lambda.handler" ], + snsTopic: topic, + }); + expect(stack).toCountResources('AWS::Lambda::Function', 1); + expect(stack).toHaveResource('AWS::Lambda::Function', { + Handler: "test/lambda.handler", + }); + expect(stack).toCountResources('AWS::SNS::Topic', 1); + expect(stack).toHaveResource('AWS::SNS::Topic', { + TopicName: "my-topic", + }); +}); + +test("attachPermissions", async () => { + const stack = new Stack(new App(), "stack"); + const topic = new Topic(stack, "Topic", { + subscribers: [ "test/lambda.handler", "test/lambda.handler" ] + }); + topic.attachPermissions([ FunctionPermissionType.S3 ]); + expect(stack).toHaveResource('AWS::IAM::Policy', { + PolicyDocument: { + Statement: [ + lambdaDefaultPolicy, + { Action: "s3:*", Effect: "Allow", Resource: "*" }, + ], + Version: "2012-10-17" + }, + PolicyName: "TopicSubscriber0ServiceRoleDefaultPolicyB81AA9BE", + }); + expect(stack).toHaveResource('AWS::IAM::Policy', { + PolicyDocument: { + Statement: [ + lambdaDefaultPolicy, + { Action: "s3:*", Effect: "Allow", Resource: "*" }, + ], + Version: "2012-10-17" + }, + PolicyName: "TopicSubscriber1ServiceRoleDefaultPolicyA0E825CD", + }); +}); + +test("attachPermissionsToSubscriber", async () => { + const stack = new Stack(new App(), "stack"); + const topic = new Topic(stack, "Topic", { + subscribers: [ "test/lambda.handler", "test/lambda.handler" ] + }); + topic.attachPermissionsToSubscriber(0, [ FunctionPermissionType.S3 ]); + expect(stack).toHaveResource('AWS::IAM::Policy', { + PolicyDocument: { + Statement: [ + lambdaDefaultPolicy, + { Action: "s3:*", Effect: "Allow", Resource: "*" }, + ], + Version: "2012-10-17" + }, + PolicyName: "TopicSubscriber0ServiceRoleDefaultPolicyB81AA9BE", + }); + expect(stack).toHaveResource('AWS::IAM::Policy', { + PolicyDocument: { + Statement: [ + lambdaDefaultPolicy, + ], + Version: "2012-10-17" + }, + PolicyName: "TopicSubscriber1ServiceRoleDefaultPolicyA0E825CD", + }); +}); diff --git a/packages/resources/test/helpers.ts b/packages/resources/test/helpers.ts deleted file mode 100644 index bff3908e47..0000000000 --- a/packages/resources/test/helpers.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any*/ -/* eslint-disable @typescript-eslint/ban-ts-comment*/ - -import * as cdk from "@aws-cdk/core"; - -export function getStackCfResources(stack: cdk.Stack): any { - // @ts-ignore - return stack._toCloudFormation().Resources; -} From 2b9aa9378faa70fed8b189bbd4863003a114c41e Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 30 Jan 2021 17:35:27 -0500 Subject: [PATCH 335/481] Grant permission to specific resource when attachPermissions to a construct --- packages/resources/src/Function.ts | 62 +++++++++++++----------- packages/resources/test/Function.test.ts | 5 +- 2 files changed, 37 insertions(+), 30 deletions(-) diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index c9b59444de..d9f1a42a44 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -163,8 +163,6 @@ export class Function extends lambda.Function { } attachPermissions(permissions: FunctionPermissions) { - let policyActions = []; - // Four patterns // // attachPermissions('*'); @@ -180,33 +178,41 @@ export class Function extends lambda.Function { if ( ! Object.values(FunctionPermissionType).includes(permissions)) { throw new Error(`The specified permissions is not a supported FunctionPermissionType.`); } - policyActions.push(permissions); + this.addToRolePolicyByActionAndResource(permissions, "*"); } else { permissions.forEach((permission: FunctionPermissionType | cdk.Construct | {(grantee: iam.IGrantable): iam.Grant}) => { // Case: 's3' permissions => 's3:*' if (typeof permission === 'string') { - policyActions.push(permission); - return; + this.addToRolePolicyByActionAndResource(permission, "*"); } // Case: construct => 's3:*' - if (permission instanceof cdk.Construct) { - const cfnType = permission.node?.defaultChild?.constructor.name; - if (cfnType === 'CfnTable' || permission instanceof Table) { - policyActions.push(`dynamodb:*`); - } - else if (cfnType === 'CfnTopic' || permission instanceof Topic) { - policyActions.push(`sns:*`); - } - else if (cfnType === 'CfnQueue' || permission instanceof Queue) { - policyActions.push(`sqs:*`); - } - else if (cfnType === 'CfnBucket') { - policyActions.push(`s3:*`); - } - else { - throw new Error(`The specified permissions is not a supported construct type.`); + else if (permission instanceof Table) { + this.addToRolePolicyByActionAndResource("dynamodb:*", permission.dynamodbTable.tableArn); + } + else if (permission instanceof Topic) { + this.addToRolePolicyByActionAndResource("sns:*", permission.snsTopic.topicArn); + } + else if (permission instanceof Queue) { + this.addToRolePolicyByActionAndResource("sqs:*", permission.sqsQueue.queueArn); + } + else if (permission instanceof cdk.Construct) { + switch(permission.node?.defaultChild?.constructor.name) { + case 'CfnTable': + this.addToRolePolicyByActionAndResource("dynamodb:*", (permission as any).tableArn); + break; + case 'CfnTopic': + this.addToRolePolicyByActionAndResource("sns:*", (permission as any).topicArn); + break; + case 'CfnQueue': + this.addToRolePolicyByActionAndResource("sqs:*", (permission as any).queueArn); + break; + case 'CfnBucket': + this.addToRolePolicyByActionAndResource("s3:*", (permission as any).bucketArn); + break; + default: + throw new Error(`The specified permissions is not a supported construct type.`); } } // Case: grant method @@ -218,14 +224,14 @@ export class Function extends lambda.Function { } }); } + } - if (policyActions.length > 0) { - this.addToRolePolicy(new iam.PolicyStatement({ - effect: iam.Effect.ALLOW, - actions: policyActions, - resources: ["*"], - })); - } + addToRolePolicyByActionAndResource(action: string, resource: string) { + this.addToRolePolicy(new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: [ action ], + resources: [ resource ], + })); } static fromDefinition(scope: cdk.Construct, id: string, definition: FunctionDefinition): Function { diff --git a/packages/resources/test/Function.test.ts b/packages/resources/test/Function.test.ts index e186787227..ef74f28836 100644 --- a/packages/resources/test/Function.test.ts +++ b/packages/resources/test/Function.test.ts @@ -127,7 +127,8 @@ test("attachPermission-array-string", async () => { PolicyDocument: { Statement: [ lambdaDefaultPolicy, - { Action: [ "s3:*", "dynamodb:*" ], Effect: "Allow", Resource: "*" }, + { Action: "s3:*", Effect: "Allow", Resource: "*" }, + { Action: "dynamodb:*", Effect: "Allow", Resource: "*" }, ], Version: "2012-10-17" }, @@ -145,7 +146,7 @@ test("attachPermission-array-cfn-construct", async () => { PolicyDocument: { Statement: [ lambdaDefaultPolicy, - { Action: "sns:*", Effect: "Allow", Resource: "*" }, + { Action: "sns:*", Effect: "Allow", Resource: { "Ref": "TopicBFC7AF6E" } }, ], Version: "2012-10-17" }, From 4521bcead34bc7fc728deaf3e934734cc86c9f75 Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 30 Jan 2021 21:26:33 -0500 Subject: [PATCH 336/481] Update Function's attachPermissions input --- packages/resources/src/Api.ts | 6 +- packages/resources/src/Cron.ts | 2 +- packages/resources/src/Function.ts | 33 +++++------ packages/resources/src/Queue.ts | 2 +- packages/resources/src/Table.ts | 2 +- packages/resources/src/Topic.ts | 2 +- packages/resources/test/Api.test.ts | 72 +++++++++++++++++++++++- packages/resources/test/Cron.test.ts | 4 +- packages/resources/test/Function.test.ts | 12 ++-- packages/resources/test/Queue.test.ts | 4 +- packages/resources/test/Topic.test.ts | 6 +- 11 files changed, 106 insertions(+), 39 deletions(-) diff --git a/packages/resources/src/Api.ts b/packages/resources/src/Api.ts index ab2e4cafaf..328d59470f 100644 --- a/packages/resources/src/Api.ts +++ b/packages/resources/src/Api.ts @@ -82,7 +82,7 @@ export class Api extends cdk.Construct { super(scope, id); const root = scope.node.root as App; - let { + const { // Api props cors, accessLog, @@ -187,7 +187,7 @@ export class Api extends cdk.Construct { routeKeys.forEach((routeKey: string) => { // Normalize routeProps - let routeProps = ( + const routeProps = ( this.isInstanceOfApiRouteProps(routes[routeKey]) ? routes[routeKey] : { function: (routes[routeKey] as FunctionDefinition) } @@ -283,7 +283,7 @@ export class Api extends cdk.Construct { ); } - attachPermissionsToRoutes(routeKey: string, permissions: FunctionPermissions) { + attachPermissionsToRoute(routeKey: string, permissions: FunctionPermissions) { const func = this.getFunction(routeKey); func.attachPermissions(permissions) } diff --git a/packages/resources/src/Cron.ts b/packages/resources/src/Cron.ts index 07c863efcf..e30d2ed5f3 100644 --- a/packages/resources/src/Cron.ts +++ b/packages/resources/src/Cron.ts @@ -18,7 +18,7 @@ export class Cron extends cdk.Construct { super(scope, id); const root = scope.node.root as App; - let { + const { // Topic props schedule, eventsRule, diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index d9f1a42a44..968cef48c2 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -73,15 +73,7 @@ export interface FunctionHandlerProps { readonly handler: string; } -export type FunctionPermissions = FunctionPermissionType | (FunctionPermissionType | cdk.Construct | {(grantee: iam.IGrantable): iam.Grant;})[]; - -export enum FunctionPermissionType { - ALL = "*", - S3 = "s3:*", - SNS = "sns:*", - SQS = "sqs:*", - DynamoDB = "dynamodb:*", -} +export type FunctionPermissions = string | (string | cdk.Construct | [ cdk.Construct, string ])[]; export class Function extends lambda.Function { constructor(scope: cdk.Construct, id: string, props: FunctionProps) { @@ -169,22 +161,24 @@ export class Function extends lambda.Function { // attachPermissions([ 'sns', 'sqs' ]); // attachPermissions([ event, queue ]); // attachPermissions([ - // event.snsTopic.grantPublicPermission, - // queue.sqsQueue.grantSendMessagesPermission, + // [ event.snsTopic, 'grantPublish' ], + // [ queue.sqsQueue, 'grantSendMessages' ], // ]); // Case: 'admin' permissions => '*' if (typeof permissions === "string") { - if ( ! Object.values(FunctionPermissionType).includes(permissions)) { - throw new Error(`The specified permissions is not a supported FunctionPermissionType.`); + if (permissions === "*") { + this.addToRolePolicyByActionAndResource(permissions, "*"); + } + else { + throw new Error(`The specified permissions is not a supported.`); } - this.addToRolePolicyByActionAndResource(permissions, "*"); } else { - permissions.forEach((permission: FunctionPermissionType | cdk.Construct | {(grantee: iam.IGrantable): iam.Grant}) => { + permissions.forEach((permission: string | cdk.Construct | [ cdk.Construct, string ]) => { // Case: 's3' permissions => 's3:*' if (typeof permission === 'string') { - this.addToRolePolicyByActionAndResource(permission, "*"); + this.addToRolePolicyByActionAndResource(`${permission}:*`, "*"); } // Case: construct => 's3:*' @@ -216,8 +210,11 @@ export class Function extends lambda.Function { } } // Case: grant method - else if (typeof permission === 'function') { - permission(this); + else if (permission.length === 2 + && (permission[0] instanceof cdk.Construct) + && (typeof permission[1] === "string") + && permission[0][permission[1]]) { + permission[0][permission[1]](this); } else { throw new Error(`The specified permissions is not supported.`); diff --git a/packages/resources/src/Queue.ts b/packages/resources/src/Queue.ts index 8e9299fb26..134dcd29cc 100644 --- a/packages/resources/src/Queue.ts +++ b/packages/resources/src/Queue.ts @@ -17,7 +17,7 @@ export class Queue extends cdk.Construct { super(scope, id); const root = scope.node.root as App; - let { + const { // Queue props sqsQueue, // Function props diff --git a/packages/resources/src/Table.ts b/packages/resources/src/Table.ts index 7199116696..6ce4e5dc54 100644 --- a/packages/resources/src/Table.ts +++ b/packages/resources/src/Table.ts @@ -20,7 +20,7 @@ export class Table extends cdk.Construct { super(scope, id); const root = scope.node.root as App; - let { + const { fields, primaryIndex, secondaryIndexes, diff --git a/packages/resources/src/Topic.ts b/packages/resources/src/Topic.ts index 50284c754f..c0d930a1e9 100644 --- a/packages/resources/src/Topic.ts +++ b/packages/resources/src/Topic.ts @@ -17,7 +17,7 @@ export class Topic extends cdk.Construct { super(scope, id); const root = scope.node.root as App; - let { + const { // Topic props snsTopic, // Function props diff --git a/packages/resources/test/Api.test.ts b/packages/resources/test/Api.test.ts index 072050a058..fc69bc0787 100644 --- a/packages/resources/test/Api.test.ts +++ b/packages/resources/test/Api.test.ts @@ -4,6 +4,15 @@ import * as lambda from "@aws-cdk/aws-lambda"; import * as apig from "@aws-cdk/aws-apigatewayv2"; import { App, Stack, Api, Function } from "../src"; +const lambdaDefaultPolicy = { + Action: [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords" + ], + Effect: "Allow", + Resource: "*" +}; + test("base", async () => { const stack = new Stack(new App(), "stack"); const { accessLogGroup } = new Api(stack, "Api", { @@ -357,7 +366,7 @@ test("route-value-FunctionProps-empty", async () => { }, }, }); - }).toThrow(/No handler defined/); + }).toThrow(/Invalid function definition/); }); test("route-value-FunctionProps", async () => { @@ -572,3 +581,64 @@ test("get-function-undefined", async () => { }); expect(ret.getFunction("GET /path")).toBeUndefined(); }); + +test("attachPermissions", async () => { + const stack = new Stack(new App(), "stack"); + const api = new Api(stack, "Api", { + routes: { + "GET /": "test/lambda.handler", + "GET /2": "test/lambda.handler", + }, + }); + api.attachPermissions([ 's3' ]); + expect(stack).toHaveResource('AWS::IAM::Policy', { + PolicyDocument: { + Statement: [ + lambdaDefaultPolicy, + { Action: "s3:*", Effect: "Allow", Resource: "*" }, + ], + Version: "2012-10-17" + }, + PolicyName: "ApiLambdaGETServiceRoleDefaultPolicy013A8DEA", + }); + expect(stack).toHaveResource('AWS::IAM::Policy', { + PolicyDocument: { + Statement: [ + lambdaDefaultPolicy, + { Action: "s3:*", Effect: "Allow", Resource: "*" }, + ], + Version: "2012-10-17" + }, + PolicyName: "ApiLambdaGET2ServiceRoleDefaultPolicy934FD89B", + }); +}); + +test("attachPermissionsToRoute", async () => { + const stack = new Stack(new App(), "stack"); + const api = new Api(stack, "Api", { + routes: { + "GET /": "test/lambda.handler", + "GET /2": "test/lambda.handler", + }, + }); + api.attachPermissionsToRoute('GET /', [ 's3' ]); + expect(stack).toHaveResource('AWS::IAM::Policy', { + PolicyDocument: { + Statement: [ + lambdaDefaultPolicy, + { Action: "s3:*", Effect: "Allow", Resource: "*" }, + ], + Version: "2012-10-17" + }, + PolicyName: "ApiLambdaGETServiceRoleDefaultPolicy013A8DEA", + }); + expect(stack).toHaveResource('AWS::IAM::Policy', { + PolicyDocument: { + Statement: [ + lambdaDefaultPolicy, + ], + Version: "2012-10-17" + }, + PolicyName: "ApiLambdaGET2ServiceRoleDefaultPolicy934FD89B", + }); +}); diff --git a/packages/resources/test/Cron.test.ts b/packages/resources/test/Cron.test.ts index 562ead413f..72c152c5d2 100644 --- a/packages/resources/test/Cron.test.ts +++ b/packages/resources/test/Cron.test.ts @@ -1,7 +1,7 @@ import '@aws-cdk/assert/jest'; import * as cdk from "@aws-cdk/core"; import * as events from "@aws-cdk/aws-events"; -import { App, Stack, Cron, Function, FunctionPermissionType } from "../src"; +import { App, Stack, Cron, Function } from "../src"; const lambdaDefaultPolicy = { Action: [ @@ -145,7 +145,7 @@ test("attachPermissions", async () => { schedule: 'rate(1 minute)', job: "test/lambda.handler", }); - cron.attachPermissions([ FunctionPermissionType.S3 ]); + cron.attachPermissions([ "s3" ]); expect(stack).toHaveResource('AWS::IAM::Policy', { PolicyDocument: { Statement: [ diff --git a/packages/resources/test/Function.test.ts b/packages/resources/test/Function.test.ts index ef74f28836..2877a9a1fe 100644 --- a/packages/resources/test/Function.test.ts +++ b/packages/resources/test/Function.test.ts @@ -2,7 +2,7 @@ import '@aws-cdk/assert/jest'; import * as apig from "@aws-cdk/aws-apigatewayv2"; import * as sns from "@aws-cdk/aws-sns"; import * as lambda from "@aws-cdk/aws-lambda"; -import { App, Stack, Function, HandlerProps, FunctionPermissionType, FunctionHandlerProps } from "../src"; +import { App, Stack, Function, HandlerProps, FunctionHandlerProps } from "../src"; const lambdaDefaultPolicy = { Action: [ @@ -81,7 +81,7 @@ test("attachPermission-string-all", async () => { const f = new Function(stack, "Function", { handler: "test/lambda.handler", }); - f.attachPermissions(FunctionPermissionType.ALL); + f.attachPermissions("*"); expect(stack).toHaveResource('AWS::IAM::Policy', { PolicyDocument: { Statement: [ @@ -99,8 +99,8 @@ test("attachPermission-string-invalid", async () => { handler: "test/lambda.handler", }); expect(() => { - f.attachPermissions("abc" as FunctionPermissionType); - }).toThrow(/The specified permissions is not a supported FunctionPermissionType/); + f.attachPermissions("abc"); + }).toThrow(/The specified permissions is not a supported/); }); test("attachPermission-array-empty", async () => { @@ -122,7 +122,7 @@ test("attachPermission-array-string", async () => { const f = new Function(stack, "Function", { handler: "test/lambda.handler", }); - f.attachPermissions([ FunctionPermissionType.S3, FunctionPermissionType.DynamoDB ]); + f.attachPermissions([ "s3", "dynamodb" ]); expect(stack).toHaveResource('AWS::IAM::Policy', { PolicyDocument: { Statement: [ @@ -170,7 +170,7 @@ test("attachPermission-array-cfn-grant", async () => { const f = new Function(stack, "Function", { handler: "test/lambda.handler", }); - f.attachPermissions([ topic.grantPublish.bind(topic) ]); + f.attachPermissions([ [ topic, 'grantPublish' ] ]); expect(stack).toHaveResource('AWS::IAM::Policy', { PolicyDocument: { Statement: [ diff --git a/packages/resources/test/Queue.test.ts b/packages/resources/test/Queue.test.ts index 3eb2ab1e42..89f4a104e5 100644 --- a/packages/resources/test/Queue.test.ts +++ b/packages/resources/test/Queue.test.ts @@ -1,6 +1,6 @@ import '@aws-cdk/assert/jest'; import * as sqs from "@aws-cdk/aws-sqs"; -import { App, Stack, Queue, Function, FunctionPermissionType } from "../src"; +import { App, Stack, Queue, Function } from "../src"; const lambdaDefaultPolicy = { Action: [ @@ -102,7 +102,7 @@ test("attachPermissions", async () => { const queue = new Queue(stack, "Queue", { consumer: "test/lambda.handler", }); - queue.attachPermissions([ FunctionPermissionType.S3 ]); + queue.attachPermissions([ "s3" ]); expect(stack).toHaveResource('AWS::IAM::Policy', { PolicyDocument: { Statement: [ diff --git a/packages/resources/test/Topic.test.ts b/packages/resources/test/Topic.test.ts index f8a4a6ecf2..67c47475a6 100644 --- a/packages/resources/test/Topic.test.ts +++ b/packages/resources/test/Topic.test.ts @@ -1,6 +1,6 @@ import '@aws-cdk/assert/jest'; import * as sns from "@aws-cdk/aws-sns"; -import { App, Stack, Topic, Function, FunctionPermissionType } from "../src"; +import { App, Stack, Topic, Function } from "../src"; const lambdaDefaultPolicy = { Action: [ @@ -110,7 +110,7 @@ test("attachPermissions", async () => { const topic = new Topic(stack, "Topic", { subscribers: [ "test/lambda.handler", "test/lambda.handler" ] }); - topic.attachPermissions([ FunctionPermissionType.S3 ]); + topic.attachPermissions([ "s3" ]); expect(stack).toHaveResource('AWS::IAM::Policy', { PolicyDocument: { Statement: [ @@ -138,7 +138,7 @@ test("attachPermissionsToSubscriber", async () => { const topic = new Topic(stack, "Topic", { subscribers: [ "test/lambda.handler", "test/lambda.handler" ] }); - topic.attachPermissionsToSubscriber(0, [ FunctionPermissionType.S3 ]); + topic.attachPermissionsToSubscriber(0, [ "s3" ]); expect(stack).toHaveResource('AWS::IAM::Policy', { PolicyDocument: { Statement: [ From 51afc578108acd825ae5a93e27f34677616111bc Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 30 Jan 2021 23:12:30 -0500 Subject: [PATCH 337/481] Adding docs for new constructs --- www/docs/constructs/api.md | 130 +++++++++++++++++++----- www/docs/constructs/app.md | 8 +- www/docs/constructs/cron.md | 168 ++++++++++++++++++++++++++++++++ www/docs/constructs/function.md | 74 ++++++++++++-- www/docs/constructs/queue.md | 119 ++++++++++++++++++++++ www/docs/constructs/stack.md | 2 +- www/docs/constructs/table.md | 99 +++++++++++++++++++ www/docs/constructs/topic.md | 134 +++++++++++++++++++++++++ www/docs/packages/resources.md | 2 +- www/sidebars.js | 12 ++- 10 files changed, 706 insertions(+), 42 deletions(-) create mode 100644 www/docs/constructs/cron.md create mode 100644 www/docs/constructs/queue.md create mode 100644 www/docs/constructs/table.md create mode 100644 www/docs/constructs/topic.md diff --git a/www/docs/constructs/api.md b/www/docs/constructs/api.md index 98d183e1dd..2906190659 100644 --- a/www/docs/constructs/api.md +++ b/www/docs/constructs/api.md @@ -1,5 +1,5 @@ --- -id: api +id: Api title: "Api" description: "Docs for the sst.Api construct in the @serverless-stack/resources package" --- @@ -28,13 +28,13 @@ An instance of `Api` contains the following properties. _Type_: [`cdk.aws-apigatewayv2.HttpApi`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-apigatewayv2.HttpApi.html) -The internally created `HttpApi` instance. +The internally created CDK `HttpApi` instance. ### accessLogGroup? _Type_: [`cdk.aws-logs.LogGroup`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-logs.LogGroup.html) -If access logs are enabled, this is the internally created `LogGroup` instance. +If access logs are enabled, this is the internally created CDK `LogGroup` instance. ## Methods @@ -56,13 +56,43 @@ _Returns_ Get the instance of the internally created [`Function`](function.md), for a given route key. Where the `routeKey` is the key used to define a route. For example, `GET /notes`. +### attachPermissions + +```ts +attachPermissions(permissions: FunctionPermissions) +``` + +_Parameters_ + +- **permissions** [`FunctionPermissions`](function.md#functionpermissions) + +Attaches the given list of [permissions](function.md#functionpermissions) to all the routes. This allows the functions to access other AWS resources. + +Internally calls [`Function.attachPermissions`](function.md#attachpermissions). + +### attachPermissionsToRoute + +```ts +attachPermissionsToRoute(routeKey: string, permissions: FunctionPermissions) +``` + +_Parameters_ + +- **routeKey** `string` + +- **permissions** [`FunctionPermissions`](function.md#functionpermissions) + +Attaches the given list of [permissions](function.md#functionpermissions) to a specific route. This allows that function to access other AWS resources. + +Internally calls [`Function.attachPermissions`](function.md#attachpermissions). + ## ApiProps ### routes -_Type_: `{ [key: string]: string }` or [`{ [key: string]: ApiRouteProps }`](#apirouteprops) +_Type_ : `{ [key: string]: FunctionDefinition | ApiRouteProps }` -The routes for this API. Takes an associative array, with the key being the route and the value is either the handler of the Lambda function. +The routes for this API. Takes an associative array, with the key being the route as a string and the value is either the [`FunctionDefinition`](function.md#functiondefinition). ```js { @@ -71,13 +101,13 @@ The routes for this API. Takes an associative array, with the key being the rout } ``` -Or a the [ApiRouteProps](#apirouteprops). +Or the [ApiRouteProps](#apirouteprops). ```js { "GET /notes": { authorizationType: "AWS_IAM", - functionProps: { + function: { handler: "src/list.main", environment: { TABLE_NAME: "notesTable", @@ -89,45 +119,45 @@ Or a the [ApiRouteProps](#apirouteprops). ### cors? -_Type_: `boolean`, _defaults to_ `true` +_Type_ : `boolean`, _defaults to_ `true` CORS support for all the endpoints in the API. ### accessLog? -_Type_: `boolean`, _defaults to_ `true` +_Type_ : `boolean`, _defaults to_ `true` CloudWatch access logs for the API. -### httpApiProps? +### httpApi?, -_Type_: [`cdk.aws-apigatewayv2.HttpApiProps`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-apigatewayv2.HttpApiProps.html), _defaults to_ `{}` +_Type_ : [`cdk.aws-apigatewayv2.HttpApi`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-apigatewayv2.HttpApi.html), _defaults to_ `undefined` -Set the props for the [`cdk.aws-apigatewayv2.HttpApi`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-apigatewayv2.HttpApi.html) this construct creates internally. +Optionally, pass in an instance of the CDK `HttpApi`. This will override the default settings this construct uses to create the CDK `HttpApi` internally. ### defaultFunctionProps? -_Type_: [`FunctionProps`](function.md#funcionprops), _defaults to_ `{}` +_Type_ : [`FunctionProps`](function.md#functionprops), _defaults to_ `{}` -The default function props to be applied to all the Lambda functions in the API. If the `functionProps` are specified per route, the default values are overridden. +The default function props to be applied to all the Lambda functions in the API. If the `function` is specified for a route, these default values are overridden. ### defaultAuthorizationType? -_Type_: `string`, _defaults to_ `true` +_Type_ : `string`, _defaults to_ `true` The authorization type for all the endpoints in the API. Currently, supports `NONE` or `AWS_IAM`. ## ApiRouteProps -### functionProps? +### function? -_Type_: [`FunctionProps`](function.md#functionprops), _defaults to_ `{}` +_Type_ : [`FunctionDefinition`](function.md#functiondefinition) -The function props for this specific route. +The function definition used to create the function for this route. ### authorizationType? -_Type_: `string`, _defaults to_ `NONE` +_Type_ : `string`, _defaults to_ `NONE` The authorization type for the specific route. Curently, supports `NONE` or `AWS_IAM`. @@ -193,7 +223,7 @@ new Api(this, "Api", { routes: { "GET /notes": { authorizationType: "AWS_IAM", - functionProps: { + function: { srcPath: "src/", handler: "list.main", environment: { tableName: table.tableName }, @@ -218,7 +248,7 @@ new Api(this, "Api", { }); ``` -Note that, you can set the `defaultFunctionProps` while using the `functionProps` per route. The `functionProps` will just override the `defaultFunctionProps`. +Note that, you can set the `defaultFunctionProps` while using the `function` per route. The `function` will just override the `defaultFunctionProps`. ```js new Api(this, "Api", { @@ -227,12 +257,66 @@ new Api(this, "Api", { }, routes: { "GET /notes": { - functionProps: { - srcPath: "services/functions/", + function: { handler: "list.main", + srcPath: "services/functions/", }, }, "POST /notes": "create.main", }, }); ``` + +So in the above example, the `GET /notes` function doesn't use the `srcPath` that is set in the `defaultFunctionProps`. It'll instead use the one that is defined in the function definition (`services/functions/`). + +### Getting the function for a route + +```js {11} +const api = new Api(this, "Api", { + routes: { + "GET /notes": "src/list.main", + "POST /notes": "src/create.main", + "GET /notes/{id}": "src/get.main", + "PUT /notes/{id}": "src/update.main", + "DELETE /notes/{id}": "src/delete.main", + }, +}); + +const listFunction = api.getFunction("GET /notes"); +``` + +### Giving the entire API some permissions + +Allow the entire API to access S3. + +```js {11} +const api = new Api(this, "Api", { + routes: { + "GET /notes": "src/list.main", + "POST /notes": "src/create.main", + "GET /notes/{id}": "src/get.main", + "PUT /notes/{id}": "src/update.main", + "DELETE /notes/{id}": "src/delete.main", + }, +}); + +api.attachPermissions(["s3"]); +``` + +### Giving a specific route some permissions + +Allow one of the routes to access S3. + +```js {11} +const api = new Api(this, "Api", { + routes: { + "GET /notes": "src/list.main", + "POST /notes": "src/create.main", + "GET /notes/{id}": "src/get.main", + "PUT /notes/{id}": "src/update.main", + "DELETE /notes/{id}": "src/delete.main", + }, +}); + +api.attachPermissionsToRoute("GET /notes", ["s3"]); +``` diff --git a/www/docs/constructs/app.md b/www/docs/constructs/app.md index 285779664f..e53d996c90 100644 --- a/www/docs/constructs/app.md +++ b/www/docs/constructs/app.md @@ -1,5 +1,5 @@ --- -id: app +id: App title: "App" description: "Docs for the sst.App construct in the @serverless-stack/resources package" --- @@ -25,19 +25,19 @@ The following properties are made available in addition to the properties of [`c ### name -_Type_: `string` +_Type_ : `string` The name of the app. This comes from the `name` in your `sst.json`. ### stage -_Type_: `string` +_Type_ : `string` The stage the app is being deployed to. If this is not specified as the `--stage` option in the CLI, it'll default to the `stage` in your `sst.json`. ### region -_Type_: `string` +_Type_ : `string` The region the app is being deployed to. If this is not specified as the `--region` option in the CLI, it'll default to the `region` in your `sst.json`. diff --git a/www/docs/constructs/cron.md b/www/docs/constructs/cron.md new file mode 100644 index 0000000000..68975e3e17 --- /dev/null +++ b/www/docs/constructs/cron.md @@ -0,0 +1,168 @@ +--- +id: Cron +title: "Cron" +description: "Docs for the sst.Cron construct in the @serverless-stack/resources package. This construct creates a CDK event rule." +--- + +The `Cron` construct is a higher level CDK construct that makes it easy to to create a cron job. You can create a cron job by hanlder function and specifying the schedule it needs to run on. Internally this construct uses a [EventBridge Rule](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-events.Rule.html). + +## Initializer + +```ts +new Cron(scope: Construct, id: string, props: CronProps) +``` + +_Parameters_ + +- scope [`Construct`](https://docs.aws.amazon.com/cdk/api/latest/docs/constructs.Construct.html) +- id `string` +- props [`CronProps`](#cronprops) + +## Properties + +An instance of `Cron` contains the following properties. + +### eventsRule + +_Type_ : [`cdk.aws-events.Rule`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-events.Rule.html) + +The internally created CDK EventBridge `Rule` instance. + +### jobFunction + +_Type_ : [`Function`](function.md) + +The internally created `Function` instance that'll be run on schedule. + +## Methods + +An instance of `Queue` contains the following methods. + +### attachPermissions + +```ts +attachPermissions(permissions: FunctionPermissions) +``` + +_Parameters_ + +- **permissions** [`FunctionPermissions`](function.md#functionpermissions) + +Attaches the given list of [permissions](function.md#functionpermissions) to the `jobFunction`. This allows the function to access other AWS resources. + +Internally calls [`Function.attachPermissions`](function.md#attachpermissions). + +## CronProps + +### job + +_Type_ : [`FunctionDefinition`](function.md#functiondefinition) + +The function definition used to create the function for the cronjob. + +### schedule? + +_Type_ : string | cdk.Duration | cdk.aws-events.CronOptions + +The schedule for the cron job. Can be specified as a string. + +The string format takes a [rate expression](https://docs.aws.amazon.com/lambda/latest/dg/services-cloudwatchevents-expressions.html). + +```js +"rate(_Value Unit_)"; + +// For example, every 5 minutes +"rate(5 minutes)"; + +``` + +Or as a [cron expression](https://en.wikipedia.org/wiki/Cron#CRON_expression). + +```js +"cron(Minutes Hours Day-of-month Month Day-of-week Year)"; + +// For example, 10:15 AM (UTC) every day +"cron(15 10 * * ? *)"; + +``` + +You can also use the [`cdk.Duration`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_core.Duration.html) as an alternative to defining the rate expression. + +```js {4} +// Repeat every 5 minutes + +//As cdk.Duration +cdk.Duration.minutes(5); + +//Or as a rate expression +("rate(5 minutes)"); +``` + +Similarly, you can specify the cron expression using [`cdk.aws-events.CronOptions`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-events.CronOptions.html). + +```js {4} +// 10:15 AM (UTC) every day + +// As cdk.aws-events.CronOptions +{ minute: "15", hour: "10" } + +// Or as a cron expression +"cron(15 10 * * ? *)" +``` + +### eventsRule? + +_Type_ : [`cdk.aws-events.Rule`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-events.Rule.html), _defaults to_ `undefined` + +Or optionally pass in a CDK EventBridge `Rule` instance. This allows you to override the default settings this construct uses internally to create the events rule. + +## Examples + +### Using the rate expression + +```js +new Cron(this, "Cron", { + schedule: "rate(1 minute)", + job: "src/lambda.main", +}); +``` + +### Using the cron expression + +```js +new Cron(this, "Cron", { + schedule: "cron(15 10 * * ? *)", + job: "src/lambda.main", +}); +``` + +### Using Duration + +```js +new Cron(this, "Cron", { + schedule: cdk.Duration.days(1), + job: "src/lambda.main", +}); +``` + +### Using CronOptions + +```js +new Cron(this, "Cron", { + schedule: { minute: "0", hour: "4" }, + job: "src/lambda.main", +}); +``` + +### Giving the cronjob function some permissions + +Allow the function to access S3. + +```js {6} +const cron = new Cron(this, "Cron", { + schedule: "rate(1 minute)", + job: "src/lambda.main", +}); + +cron.attachPermissions(["s3"]); +``` diff --git a/www/docs/constructs/function.md b/www/docs/constructs/function.md index 4e89797682..8d3fd0704f 100644 --- a/www/docs/constructs/function.md +++ b/www/docs/constructs/function.md @@ -1,5 +1,5 @@ --- -id: function +id: Function title: "Function" description: "Docs for the sst.Function construct in the @serverless-stack/resources package" --- @@ -20,19 +20,35 @@ _Parameters_ - scope [`Construct`](https://docs.aws.amazon.com/cdk/api/latest/docs/constructs.Construct.html) - id `string` -- props [`FunctionProps`](#funcionprops) +- props [`FunctionProps`](#functionprops) ## Properties Refer to the properties made available by [`cdk.lambda.Function`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.Function.html#properties). +## Methods + +An instance of `Function` contains the following methods. + +### attachPermissions + +```ts +attachPermissions(permissions: FunctionPermissions) +``` + +_Parameters_ + +- **permissions** [`FunctionPermissions`](#functionpermissions) + +Attaches the given list of [permissions](#functionpermissions) to the function. + ## FunctionProps Takes the following construct props in addition to the [`cdk.lambda.FunctionOptions`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.FunctionOptions.html). ### handler -_Type_: `string` +_Type_ : `string` Path to the entry point and handler function. Uses the format, `/path/to/file.function`. Where the first part is the path to the file, followed by the name of the function that's exported in that file. @@ -44,35 +60,75 @@ If the [`srcPath`](#srcpath) is set, then the path to the `handler` is relative ### bundle? -_Type_: `boolean`, _defaults to_ `true` +_Type_ : `boolean`, _defaults to_ `true` Bundles your Lambda functions with [esbuild](https://esbuild.github.io). Turn this off if you have npm packages that cannot be bundled. ### srcPath? -_Type_: `string`, _defaults to the project root_ +_Type_ : `string`, _defaults to the project root_ The source directory where the handler file is located. If the `bundle` option is turned off, SST zips up the entire `srcPath` directory and uses it as the Lambda function package. This doesn't need to be set if `bundle` is turned on. +### memorySize? + +_Type_ : `number`, _defaults to 1024_ + +The amount of memory in MB allocated to this function. + +### timeout? + +_Type_ : `number`, _defaults to 10_ + +The function execution timeout in seconds. + ### runtime? -_Type_: [`cdk.lambda.Runtime`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.Runtime.html), _defaults to_ `cdk.lambda.Runtime.NODEJS_12_X` +_Type_ : [`cdk.lambda.Runtime`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.Runtime.html), _defaults to_ `cdk.lambda.Runtime.NODEJS_12_X` The runtime environment. Only runtimes of the Node.js family are supported. ### tracing? -_Type_: [`cdk.lambda.Tracing`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.Tracing.html), _defaults to_ `cdk.lambda.Tracing.ACTIVE` +_Type_ : [`cdk.lambda.Tracing`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.Tracing.html), _defaults to_ `cdk.lambda.Tracing.ACTIVE` Turns on [AWS X-RAY for the Lambda function](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-tracing.html), to enable tracing. +## FunctionDefinition + +_Type_ : `string | Function | FunctionProps` + +All the high-level SST constructs that create a function internally accepts this as a type. So you can define a function by passing in the [handler](#handler) as a string: + +```js +src / create.main; +``` + +Or the [`FunctionProps`](#functionprops): + +```js +{ + bundle: false, + srcPath: "src/", + handler: "sns/index.main", +} +``` + +Or an instance of the Function itself. + +```js +new Function(this, "Create", { + handler: "src/create.main", +}); +``` + ## Examples ### Creating a Function ```js new Function(this, "MySnsLambda", { - handler: "src/sns/index.handler", + handler: "src/sns/index.main", }); ``` @@ -82,7 +138,7 @@ new Function(this, "MySnsLambda", { new Function(this, "MySnsLambda", { bundle: false, srcPath: "src/", - handler: "sns/index.handler", + handler: "sns/index.main", }); ``` diff --git a/www/docs/constructs/queue.md b/www/docs/constructs/queue.md new file mode 100644 index 0000000000..e27cbd720f --- /dev/null +++ b/www/docs/constructs/queue.md @@ -0,0 +1,119 @@ +--- +id: Queue +title: "Queue" +description: "Docs for the sst.Queue construct in the @serverless-stack/resources package. This construct creates an SQS queue." +--- + +The `Queue` construct is a higher level CDK construct that makes it easy to to create a [SQS Queues](https://aws.amazon.com/sqs/). You can create a queue by specifying a consumer function. And then publish to the queue from any part of your serverless app. + +This construct makes it easier to define a queue and a consumer. It also internally connects the consumer and queue together. + +## Initializer + +```ts +new Queue(scope: Construct, id: string, props: QueueProps) +``` + +_Parameters_ + +- scope [`Construct`](https://docs.aws.amazon.com/cdk/api/latest/docs/constructs.Construct.html) +- id `string` +- props [`QueueProps`](#queueprops) + +## Properties + +An instance of `Queue` contains the following properties. + +### sqsQueue + +_Type_ : [`cdk.aws-sqs.Queue`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-sqs.Queue.html) + +The internally created CDK `Queue` instance. + +### consumerFunction + +_Type_ : [`Function`](function.md) + +The internally created consumer `Function` instance. + +## Methods + +An instance of `Queue` contains the following methods. + +### attachPermissions + +```ts +attachPermissions(permissions: FunctionPermissions) +``` + +_Parameters_ + +- **permissions** [`FunctionPermissions`](function.md#functionpermissions) + +Attaches the given list of [permissions](function.md#functionpermissions) to the `consumerFunction`. This allows the consumer to access other AWS resources. + +Internally calls [`Function.attachPermissions`](function.md#attachpermissions). + +## QueueProps + +### consumer + +_Type_ : [`FunctionDefinition`](function.md#functiondefinition) + +The function definition used to create the consumer function for the queue. + +### sqsQueue? + +_Type_ : [`cdk.aws-sqs.Queue`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-sqs.Queue.html), _defaults to_ `undefined` + +Or optionally pass in a CDK `Queue` instance. This allows you to override the default settings this construct uses internally to create the queue. + +## Examples + +### Using the minimal config + +```js +new Queue(this, "Queue", { + consumer: "src/queueConsumer.main", +}); +``` + +### Specifying the function props + +Using the [`FunctionProps`](function.md#functionprops). + +```js +new Queue(this, "Queue", { + consumer: { + srcPath: "src/" + handler: "queues/lambda.main", + } +}); +``` + +### Manually creating the queue + +Override the internally created CDK `Queue` instance. + +```js +new Queue(this, "Queue", { + consumer: "src/queueConsumer.main", + sqsQueue: + new cdk.aws() - + sqs.Queue(this, "MySqsQueue", { + queueName: "my-queue", + }), +}); +``` + +### Giving the consumer some permissions + +Allow the consumer function to access S3. + +```js {5} +const queue = new Queue(this, "Queue", { + consumer: "src/queueConsumer.main", +}); + +queue.attachPermissions(["s3"]); +``` diff --git a/www/docs/constructs/stack.md b/www/docs/constructs/stack.md index f26d888f4d..707f8bdf5f 100644 --- a/www/docs/constructs/stack.md +++ b/www/docs/constructs/stack.md @@ -1,5 +1,5 @@ --- -id: stack +id: Stack title: "Stack" description: "Docs for the sst.Stack construct in the @serverless-stack/resources package" --- diff --git a/www/docs/constructs/table.md b/www/docs/constructs/table.md new file mode 100644 index 0000000000..796cc6f0cd --- /dev/null +++ b/www/docs/constructs/table.md @@ -0,0 +1,99 @@ +--- +id: Table +title: "Table" +description: "Docs for the sst.Table construct in the @serverless-stack/resources package. This construct creates a DynamoDB table." +--- + +The `Table` construct is a higher level CDK construct that makes it easy to to create a [DynamoDB](https://aws.amazon.com/dynamodb/) table. It uses the following defaults to make it easier to use: + +1. Defaults to using the [On-Demand capacity](https://aws.amazon.com/dynamodb/pricing/on-demand/) to make it perfectly serverless. +2. Enable [Point-in-Time Recovery](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/PointInTimeRecovery.html) to make sure that you don't lose your data. +3. Provides a nicer interface for defining indexes. + +## Initializer + +```ts +new Table(scope: Construct, id: string, props: TableProps) +``` + +_Parameters_ + +- scope [`Construct`](https://docs.aws.amazon.com/cdk/api/latest/docs/constructs.Construct.html) +- id `string` +- props [`TableProps`](#tableprops) + +## Properties + +An instance of `Table` contains the following properties. + +### dynamodbTable + +_Type_ : [`cdk.aws-dynamodb.Table`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-dynamodb.Table.html) + +The internally created CDK `Table` instance. + +## TableProps + +### fields + +_Type_ : `{ [key: string]: cdk.dynamodb.AttributeType }` + +An associative array with the list of atributes (fields) of the table. Where `key` is the name of field and the value is one of [`cdk.dynamodb.AttributeType`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-dynamodb.AttributeType.html). + +### primaryIndex + +_Type_ : `TableIndexProps` + +Define the primary index for the table using the [`TableIndexProps`](#tableindexprops) type. + +### secondaryIndexes? + +_Type_ : `{ [key: string]: TableIndexProps }`, _defaults to_ `{}` + +An associative array of a list of secondary indexes, where the `key` is the name of the secondary index and the value is using the [`TableIndexProps`](#tableindexprops) type. + +## TableIndexProps + +Used to define an index. + +### partitionKey + +_Type_: `string` + +The field that's to be used as a partition key for the index. + +### sortKey? + +_Type_: `string`, _defaults to_ `undefined` + +The field that's to be used as the sort key for the index. + +## Examples + +### Specifying just the primary index + +```js +new Table(this, "Notes", { + fields: { + userId: dynamodb.AttributeType.STRING, + noteId: dynamodb.AttributeType.STRING, + }, + primaryIndex: { partitionKey: "noteId", sortKey: "userId" }, +}); +``` + +### Adding secondary indexes + +```js +new Table(this, "Notes", { + fields: { + userId: dynamodb.AttributeType.STRING, + noteId: dynamodb.AttributeType.STRING, + time: dynamodb.AttributeType.NUMBER, + }, + primaryIndex: { partitionKey: "noteId", sortKey: "userId" }, + secondaryIndexes: { + userTimeIndex: { partitionKey: "userId", sortKey: "time" }, + }, +}); +``` diff --git a/www/docs/constructs/topic.md b/www/docs/constructs/topic.md new file mode 100644 index 0000000000..30b005037f --- /dev/null +++ b/www/docs/constructs/topic.md @@ -0,0 +1,134 @@ +--- +id: Topic +title: "Topic" +description: "Docs for the sst.Topic construct in the @serverless-stack/resources package. This construct creates an SNS Topic." +--- + +The `Topic` construct is a higher level CDK construct that makes it easy to create a serverless pub/sub service. You can create a topic that has a list of subscribers. And you can publish messages to it from any part of your serverless app. + +This construct makes it easier to define a topic and its subscribers. It also internally connects the subscribers and topic together. + +## Initializer + +```ts +new Topic(scope: Construct, id: string, props: TopicProps) +``` + +_Parameters_ + +- scope [`Construct`](https://docs.aws.amazon.com/cdk/api/latest/docs/constructs.Construct.html) +- id `string` +- props [`TopicProps`](#topicprops) + +## Properties + +An instance of `Topic` contains the following properties. + +### snsTopic + +_Type_ : [`cdk.aws-sns.Topic`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-sns.Topic.html) + +The internally created CDK `Topic` instance. + +### subscriberFunctions + +_Type_ : Function[] + +A list of the internally created [`Function`](function.md) instances for the subscribers. + +## Methods + +An instance of `Queue` contains the following methods. + +### attachPermissions + +```ts +attachPermissions(permissions: FunctionPermissions) +``` + +_Parameters_ + +- **permissions** [`FunctionPermissions`](function.md#functionpermissions) + +Attaches the given list of [permissions](function.md#functionpermissions) to all the `subscriberFunctions`. This allows the subscribers to access other AWS resources. + +Internally calls [`Function.attachPermissions`](function.md#attachpermissions). + +### attachPermissionsToSubscriber + +```ts +attachPermissions(index: number, permissions: FunctionPermissions) +``` + +_Parameters_ + +- **index** `number` + +- **permissions** [`FunctionPermissions`](function.md#functionpermissions) + +Attaches the given list of [permissions](function.md#functionpermissions) to a specific function in the list of `subscriberFunctions`. Where `index` (starting at 0) is used to identity the subscriber. This allows that subscriber to access other AWS resources. + +Internally calls [`Function.attachPermissions`](function.md#attachpermissions). + +## TopicProps + +### subscribers + +_Type_ : `FunctionDefinition[]` + +A list of [`FunctionDefinition`](function.md#functiondefinition) objects that'll be used to create the subscriber functions for the topic. + +### snsTopic? + +_Type_ : [`cdk.aws-sns.Topic`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-sns.Topic.html), _defaults to_ `undefined` + +Or optionally pass in a CDK `Topic` instance. This allows you to override the default settings this construct uses internally to create the topci. + +## Examples + +### Using the minimal config + +```js +new Topic(this, "Topic", { + subscribers: ["src/subscriber1.main", "src/subscriber2.main"], +}); +``` + +### Manually creating the topic + +Override the internally created CDK `Topic` instance. + +```js +new Topic(this, "Topic", { + subscribers: ["src/subscriber1.main", "src/subscriber2.main"], + snsTopic: + new cdk.aws() - + sns.Topic(stack, "MySnsTopic", { + topicName: "my-topic", + }), +}); +``` + +### Giving the subscribers some permissions + +Allow the subscriber functions to access S3. + +```js {8} +const topic = new Topic(this, "Topic", { + subscribers: ["src/subscriber1.main", "src/subscriber2.main"], +}); + +topic.attachPermissions(["s3"]); +``` + +### Giving a specific subscriber some permissions + +Allow the first subscriber function to access S3. + +```js {8} +const topic = new Topic(this, "Topic", { + subscribers: ["src/subscriber1.main", "src/subscriber2.main"], +}); + +topic.attachPermissionsToSubscriber(0, ["s3"]); +``` diff --git a/www/docs/packages/resources.md b/www/docs/packages/resources.md index 292f5e5820..d900a91d5b 100644 --- a/www/docs/packages/resources.md +++ b/www/docs/packages/resources.md @@ -4,7 +4,7 @@ title: "@serverless-stack/resources" description: "Docs for the @serverless-stack/resources package" --- -The `@serverless-stack/resources` package provides the CDK constructs necessary to build an SST app. +The `@serverless-stack/resources` package provides a set of additional CDK constructs necessary to build an SST app. ## Installation diff --git a/www/sidebars.js b/www/sidebars.js index cfb809a7ff..814fd31ff3 100644 --- a/www/sidebars.js +++ b/www/sidebars.js @@ -19,10 +19,14 @@ module.exports = { }, { "Added Constructs": [ - "constructs/api", - "constructs/app", - "constructs/function", - "constructs/stack", + "constructs/App", + "constructs/Api", + "constructs/Cron", + "constructs/Table", + "constructs/Topic", + "constructs/Stack", + "constructs/Queue", + "constructs/Function", ], }, ], From 9810940cc9a04ad1492c4317d567df731db3dddb Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 30 Jan 2021 23:48:51 -0500 Subject: [PATCH 338/481] Fix lint errors --- packages/resources/src/Api.ts | 66 +++++---- packages/resources/src/App.ts | 9 +- packages/resources/src/Cron.ts | 40 +++--- packages/resources/src/Function.ts | 167 ++++++++++++++--------- packages/resources/src/Queue.ts | 20 +-- packages/resources/src/Table.ts | 23 ++-- packages/resources/src/Topic.ts | 29 ++-- packages/resources/test/Api.test.ts | 132 +++++++++--------- packages/resources/test/Cron.test.ts | 86 ++++++------ packages/resources/test/Function.test.ts | 124 ++++++++++------- packages/resources/test/Queue.test.ts | 69 ++++------ packages/resources/test/Table.test.ts | 73 +++++----- packages/resources/test/Topic.test.ts | 89 ++++++------ 13 files changed, 505 insertions(+), 422 deletions(-) diff --git a/packages/resources/src/Api.ts b/packages/resources/src/Api.ts index 328d59470f..584d146b22 100644 --- a/packages/resources/src/Api.ts +++ b/packages/resources/src/Api.ts @@ -4,7 +4,12 @@ import * as apig from "@aws-cdk/aws-apigatewayv2"; import * as apigIntegrations from "@aws-cdk/aws-apigatewayv2-integrations"; import { App } from "./App"; -import { Function as Func, FunctionProps, FunctionDefinition, FunctionPermissions } from "./Function"; +import { + Function as Func, + FunctionProps, + FunctionDefinition, + FunctionPermissions, +} from "./Function"; const allowedMethods = [ apig.HttpMethod.GET, @@ -105,7 +110,7 @@ export class Api extends cdk.Construct { // Create Api //////////////////// - if ( ! httpApi) { + if (!httpApi) { // Configure CORS let corsPreflight; if (cors === undefined || cors === true) { @@ -120,8 +125,7 @@ export class Api extends cdk.Construct { apiName: root.logicalPrefixedName(id), corsPreflight, }); - } - else { + } else { this.httpApi = httpApi; } @@ -131,7 +135,7 @@ export class Api extends cdk.Construct { // note: Access log configuration is not supported by L2 constructs as of CDK v1.85.0. We // need to define it at L1 construct level. - if ( ! httpApi && (accessLog === undefined || accessLog === true)) { + if (!httpApi && (accessLog === undefined || accessLog === true)) { // create log group this.accessLogGroup = new logs.LogGroup(this, "LogGroup"); @@ -187,17 +191,19 @@ export class Api extends cdk.Construct { routeKeys.forEach((routeKey: string) => { // Normalize routeProps - const routeProps = ( - this.isInstanceOfApiRouteProps(routes[routeKey]) - ? routes[routeKey] - : { function: (routes[routeKey] as FunctionDefinition) } - ) as ApiRouteProps; + const routeProps = (this.isInstanceOfApiRouteProps( + routes[routeKey] as ApiRouteProps + ) + ? routes[routeKey] + : { + function: routes[routeKey] as FunctionDefinition, + }) as ApiRouteProps; // Normalize routeKey routeKey = this.normalizeRouteKey(routeKey); // Get path and method - const routeKeyParts = routeKey.split(' '); + const routeKeyParts = routeKey.split(" "); if (routeKeyParts.length !== 2) { throw new Error(`Invalid route ${routeKey}`); } @@ -223,25 +229,29 @@ export class Api extends cdk.Construct { // Create Function let functionDefinition; - if (typeof routeProps.function === 'string') { + if (typeof routeProps.function === "string") { functionDefinition = { ...(defaultFunctionProps || {}), handler: routeProps.function, }; - } - else if (routeProps.function instanceof Func) { + } else if (routeProps.function instanceof Func) { if (defaultFunctionProps) { - throw new Error(`Cannot define defaultFunctionProps when a Function is passed in to the routes`); + throw new Error( + `Cannot define defaultFunctionProps when a Function is passed in to the routes` + ); } functionDefinition = routeProps.function; - } - else { + } else { functionDefinition = { ...(defaultFunctionProps || {}), ...(routeProps.function as FunctionProps), } as FunctionProps; } - const lambda = Func.fromDefinition(this, `Lambda_${methodStr}_${path}`, functionDefinition); + const lambda = Func.fromDefinition( + this, + `Lambda_${methodStr}_${path}`, + functionDefinition + ); // Create route const route = new apig.HttpRoute(this, `Route_${methodStr}_${path}`, { @@ -264,27 +274,31 @@ export class Api extends cdk.Construct { }); } - isInstanceOfApiRouteProps(object: any): boolean { - return (object as ApiRouteProps).function !== undefined - || (object as ApiRouteProps).authorizationType !== undefined; + isInstanceOfApiRouteProps(object: ApiRouteProps): boolean { + return ( + object.function !== undefined || object.authorizationType !== undefined + ); } normalizeRouteKey(routeKey: string): string { - return routeKey.split(/\s+/).join(' '); + return routeKey.split(/\s+/).join(" "); } getFunction(routeKey: string): Func { return this.functions[this.normalizeRouteKey(routeKey)]; } - attachPermissions(permissions: FunctionPermissions) { - Object.values(this.functions).forEach(func => + attachPermissions(permissions: FunctionPermissions): void { + Object.values(this.functions).forEach((func) => func.attachPermissions(permissions) ); } - attachPermissionsToRoute(routeKey: string, permissions: FunctionPermissions) { + attachPermissionsToRoute( + routeKey: string, + permissions: FunctionPermissions + ): void { const func = this.getFunction(routeKey); - func.attachPermissions(permissions) + func.attachPermissions(permissions); } } diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index e15f1a36ae..3c6a5a9988 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -178,7 +178,7 @@ export class App extends cdk.App { // replaced by stubs and have not been transpiled. // 2. do not need to run while running resources tests because .eslint file // does not exist inside .build folder. - if (!this.local && ! this.isJestTest()) { + if (!this.local && !this.isJestTest()) { this.processInputFiles(); } @@ -191,7 +191,10 @@ export class App extends cdk.App { } isJestTest(): boolean { - return process.env.NODE_ENV === 'test' && process.env.JEST_WORKER_ID !== undefined; + return ( + process.env.NODE_ENV === "test" && + process.env.JEST_WORKER_ID !== undefined + ); } registerLambdaHandler(handler: FunctionHandlerProps): void { @@ -234,7 +237,7 @@ export class App extends cdk.App { } lint(srcPath: string, inputFiles: Array): void { - console.log('=== ', process.env); + console.log("=== ", process.env); inputFiles = inputFiles.filter( (file: string) => file.indexOf("node_modules") === -1 && diff --git a/packages/resources/src/Cron.ts b/packages/resources/src/Cron.ts index e30d2ed5f3..27cc890c6a 100644 --- a/packages/resources/src/Cron.ts +++ b/packages/resources/src/Cron.ts @@ -1,8 +1,11 @@ import * as cdk from "@aws-cdk/core"; import * as events from "@aws-cdk/aws-events"; import * as eventsTargets from "@aws-cdk/aws-events-targets"; -import { App } from "./App"; -import { Function as Func, FunctionDefinition, FunctionPermissions } from "./Function"; +import { + Function as Func, + FunctionDefinition, + FunctionPermissions, +} from "./Function"; export interface CronProps { readonly job: FunctionDefinition; @@ -17,7 +20,6 @@ export class Cron extends cdk.Construct { constructor(scope: cdk.Construct, id: string, props: CronProps) { super(scope, id); - const root = scope.node.root as App; const { // Topic props schedule, @@ -35,29 +37,28 @@ export class Cron extends cdk.Construct { // Create Rule /////////////////////////// - if ( ! eventsRule) { - if ( ! schedule) { + if (!eventsRule) { + if (!schedule) { throw new Error(`No schedule defined for the "${id}" Cron`); } // Configure Schedule let propSchedule: events.Schedule; - if (typeof schedule === 'string' - && (schedule.startsWith('rate(') || schedule.startsWith('cron('))) { + if ( + typeof schedule === "string" && + (schedule.startsWith("rate(") || schedule.startsWith("cron(")) + ) { propSchedule = events.Schedule.expression(schedule); - } - else if (schedule instanceof cdk.Duration) { + } else if (schedule instanceof cdk.Duration) { propSchedule = events.Schedule.rate(schedule); - } - else { + } else { propSchedule = events.Schedule.cron(schedule as events.CronOptions); } this.eventsRule = new events.Rule(this, "Rule", { - schedule: propSchedule + schedule: propSchedule, }); - } - else { + } else { this.eventsRule = eventsRule; } @@ -65,15 +66,16 @@ export class Cron extends cdk.Construct { // Create Targets /////////////////////////// - if ( ! job) { + if (!job) { throw new Error(`No job defined for the "${id}" Cron`); } this.jobFunction = Func.fromDefinition(this, "Job", job); - this.eventsRule.addTarget(new eventsTargets.LambdaFunction(this.jobFunction)); + this.eventsRule.addTarget( + new eventsTargets.LambdaFunction(this.jobFunction) + ); } - attachPermissions(permissions: FunctionPermissions) { - this.jobFunction.attachPermissions(permissions) + attachPermissions(permissions: FunctionPermissions): void { + this.jobFunction.attachPermissions(permissions); } } - diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index 968cef48c2..35504c116f 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -1,3 +1,7 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment*/ +/* eslint-disable @typescript-eslint/ban-types*/ +// Note: disabling ban-type rule so we don't get an error referencing the class Function + import path from "path"; import * as cdk from "@aws-cdk/core"; import * as iam from "@aws-cdk/aws-iam"; @@ -12,7 +16,7 @@ import { builder } from "./util/builder"; export type HandlerProps = FunctionHandlerProps; export type FunctionDefinition = string | Function | FunctionProps; -export interface FunctionProps extends Omit { +export interface FunctionProps extends Omit { /** * Path to the entry point and handler function. Of the format: * `/path/to/file.function`. @@ -73,7 +77,9 @@ export interface FunctionHandlerProps { readonly handler: string; } -export type FunctionPermissions = string | (string | cdk.Construct | [ cdk.Construct, string ])[]; +export type FunctionPermissions = + | string + | (string | cdk.Construct | [cdk.Construct, string])[]; export class Function extends lambda.Function { constructor(scope: cdk.Construct, id: string, props: FunctionProps) { @@ -154,7 +160,7 @@ export class Function extends lambda.Function { root.registerLambdaHandler({ srcPath, handler } as FunctionHandlerProps); } - attachPermissions(permissions: FunctionPermissions) { + attachPermissions(permissions: FunctionPermissions): void { // Four patterns // // attachPermissions('*'); @@ -169,79 +175,112 @@ export class Function extends lambda.Function { if (typeof permissions === "string") { if (permissions === "*") { this.addToRolePolicyByActionAndResource(permissions, "*"); - } - else { + } else { throw new Error(`The specified permissions is not a supported.`); } - } - else { - permissions.forEach((permission: string | cdk.Construct | [ cdk.Construct, string ]) => { - // Case: 's3' permissions => 's3:*' - if (typeof permission === 'string') { - this.addToRolePolicyByActionAndResource(`${permission}:*`, "*"); - } + } else { + permissions.forEach( + (permission: string | cdk.Construct | [cdk.Construct, string]) => { + // Case: 's3' permissions => 's3:*' + if (typeof permission === "string") { + this.addToRolePolicyByActionAndResource(`${permission}:*`, "*"); + } - // Case: construct => 's3:*' - else if (permission instanceof Table) { - this.addToRolePolicyByActionAndResource("dynamodb:*", permission.dynamodbTable.tableArn); - } - else if (permission instanceof Topic) { - this.addToRolePolicyByActionAndResource("sns:*", permission.snsTopic.topicArn); - } - else if (permission instanceof Queue) { - this.addToRolePolicyByActionAndResource("sqs:*", permission.sqsQueue.queueArn); - } - else if (permission instanceof cdk.Construct) { - switch(permission.node?.defaultChild?.constructor.name) { - case 'CfnTable': - this.addToRolePolicyByActionAndResource("dynamodb:*", (permission as any).tableArn); - break; - case 'CfnTopic': - this.addToRolePolicyByActionAndResource("sns:*", (permission as any).topicArn); - break; - case 'CfnQueue': - this.addToRolePolicyByActionAndResource("sqs:*", (permission as any).queueArn); - break; - case 'CfnBucket': - this.addToRolePolicyByActionAndResource("s3:*", (permission as any).bucketArn); - break; - default: - throw new Error(`The specified permissions is not a supported construct type.`); + // Case: construct => 's3:*' + else if (permission instanceof Table) { + this.addToRolePolicyByActionAndResource( + "dynamodb:*", + permission.dynamodbTable.tableArn + ); + } else if (permission instanceof Topic) { + this.addToRolePolicyByActionAndResource( + "sns:*", + permission.snsTopic.topicArn + ); + } else if (permission instanceof Queue) { + this.addToRolePolicyByActionAndResource( + "sqs:*", + permission.sqsQueue.queueArn + ); + } else if (permission instanceof cdk.Construct) { + switch (permission.node?.defaultChild?.constructor.name) { + case "CfnTable": + this.addToRolePolicyByActionAndResource( + "dynamodb:*", + // @ts-expect-error We do not want to import the cdk modules, just cast to any + permission.tableArn + ); + break; + case "CfnTopic": + this.addToRolePolicyByActionAndResource( + "sns:*", + // @ts-expect-error We do not want to import the cdk modules, just cast to any + permission.topicArn + ); + break; + case "CfnQueue": + this.addToRolePolicyByActionAndResource( + "sqs:*", + // @ts-expect-error We do not want to import the cdk modules, just cast to any + permission.queueArn + ); + break; + case "CfnBucket": + this.addToRolePolicyByActionAndResource( + "s3:*", + // @ts-expect-error We do not want to import the cdk modules, just cast to any + permission.bucketArn + ); + break; + default: + throw new Error( + `The specified permissions is not a supported construct type.` + ); + } + } + // Case: grant method + else if ( + permission.length === 2 && + permission[0] instanceof cdk.Construct && + typeof permission[1] === "string" + ) { + const construct = permission[0] as cdk.Construct; + const methodName = permission[1] as keyof cdk.Construct; + (construct[methodName] as { (construct: cdk.Construct): void })( + this + ); + } else { + throw new Error(`The specified permissions is not supported.`); } } - // Case: grant method - else if (permission.length === 2 - && (permission[0] instanceof cdk.Construct) - && (typeof permission[1] === "string") - && permission[0][permission[1]]) { - permission[0][permission[1]](this); - } - else { - throw new Error(`The specified permissions is not supported.`); - } - }); + ); } } - addToRolePolicyByActionAndResource(action: string, resource: string) { - this.addToRolePolicy(new iam.PolicyStatement({ - effect: iam.Effect.ALLOW, - actions: [ action ], - resources: [ resource ], - })); + addToRolePolicyByActionAndResource(action: string, resource: string): void { + this.addToRolePolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: [action], + resources: [resource], + }) + ); } - static fromDefinition(scope: cdk.Construct, id: string, definition: FunctionDefinition): Function { - if (typeof definition === 'string') { + static fromDefinition( + scope: cdk.Construct, + id: string, + definition: FunctionDefinition + ): Function { + if (typeof definition === "string") { return new Function(scope, id, { handler: definition }); - } - else if (definition instanceof Function) { + } else if (definition instanceof Function) { return definition; - } - else if (definition instanceof lambda.Function) { - throw new Error(`Please use sst.Function instead of lambda.Function for the "${id}" Function.`); - } - else if ((definition as FunctionProps).handler !== undefined) { + } else if (definition instanceof lambda.Function) { + throw new Error( + `Please use sst.Function instead of lambda.Function for the "${id}" Function.` + ); + } else if ((definition as FunctionProps).handler !== undefined) { return new Function(scope, id, definition); } throw new Error(`Invalid function definition for the "${id}" Function`); diff --git a/packages/resources/src/Queue.ts b/packages/resources/src/Queue.ts index 134dcd29cc..a6c11ede1f 100644 --- a/packages/resources/src/Queue.ts +++ b/packages/resources/src/Queue.ts @@ -2,7 +2,11 @@ import * as cdk from "@aws-cdk/core"; import * as sqs from "@aws-cdk/aws-sqs"; import * as lambdaEventSources from "@aws-cdk/aws-lambda-event-sources"; import { App } from "./App"; -import { Function as Func, FunctionDefinition, FunctionPermissions } from "./Function"; +import { + Function as Func, + FunctionDefinition, + FunctionPermissions, +} from "./Function"; export interface QueueProps { readonly consumer: FunctionDefinition; @@ -27,12 +31,11 @@ export class Queue extends cdk.Construct { //////////////////// // Create Queue //////////////////// - if ( ! sqsQueue) { + if (!sqsQueue) { this.sqsQueue = new sqs.Queue(this, "Queue", { queueName: root.logicalPrefixedName(id), }); - } - else { + } else { this.sqsQueue = sqsQueue; } @@ -40,15 +43,16 @@ export class Queue extends cdk.Construct { // Create Consumer /////////////////////////// - if ( ! consumer) { + if (!consumer) { throw new Error(`No consumer defined for the "${id}" Queue`); } this.consumerFunction = Func.fromDefinition(this, `Consumer`, consumer); - this.consumerFunction.addEventSource(new lambdaEventSources.SqsEventSource(this.sqsQueue)); + this.consumerFunction.addEventSource( + new lambdaEventSources.SqsEventSource(this.sqsQueue) + ); } - attachPermissions(permissions: FunctionPermissions) { + attachPermissions(permissions: FunctionPermissions): void { this.consumerFunction.attachPermissions(permissions); } } - diff --git a/packages/resources/src/Table.ts b/packages/resources/src/Table.ts index 6ce4e5dc54..0ce5862801 100644 --- a/packages/resources/src/Table.ts +++ b/packages/resources/src/Table.ts @@ -3,7 +3,7 @@ import * as dynamodb from "@aws-cdk/aws-dynamodb"; import { App } from "./App"; export interface TableProps { - readonly fields: { [key: string]: dynamodb.AttributeType }, + readonly fields: { [key: string]: dynamodb.AttributeType }; readonly primaryIndex: TableIndexProps; readonly secondaryIndexes?: { [key: string]: TableIndexProps }; } @@ -20,18 +20,14 @@ export class Table extends cdk.Construct { super(scope, id); const root = scope.node.root as App; - const { - fields, - primaryIndex, - secondaryIndexes, - } = props; + const { fields, primaryIndex, secondaryIndexes } = props; const buildAttribute = (name: string): dynamodb.Attribute => { return { name, type: fields[name], }; - } + }; //////////////////// // Create Table @@ -45,15 +41,18 @@ export class Table extends cdk.Construct { // Validate primaryIndex if (primaryIndex === undefined) { throw new Error(`No primary index defined for the "${id}" Table`); - } - else if ( ! primaryIndex.partitionKey) { - throw new Error(`No partition key defined in primary index for the "${id}" Table`); + } else if (!primaryIndex.partitionKey) { + throw new Error( + `No partition key defined in primary index for the "${id}" Table` + ); } this.dynamodbTable = new dynamodb.Table(this, "Table", { tableName: root.logicalPrefixedName(id), partitionKey: buildAttribute(primaryIndex.partitionKey), - sortKey: primaryIndex.sortKey ? buildAttribute(primaryIndex.sortKey) : undefined, + sortKey: primaryIndex.sortKey + ? buildAttribute(primaryIndex.sortKey) + : undefined, pointInTimeRecovery: true, billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, }); @@ -63,7 +62,7 @@ export class Table extends cdk.Construct { ////////////////////////////// if (secondaryIndexes !== undefined) { - Object.keys(secondaryIndexes).forEach(indexName => { + Object.keys(secondaryIndexes).forEach((indexName) => { if (secondaryIndexes !== undefined) { const { partitionKey, sortKey } = secondaryIndexes[indexName]; this.dynamodbTable.addGlobalSecondaryIndex({ diff --git a/packages/resources/src/Topic.ts b/packages/resources/src/Topic.ts index c0d930a1e9..33bfccd693 100644 --- a/packages/resources/src/Topic.ts +++ b/packages/resources/src/Topic.ts @@ -2,7 +2,11 @@ import * as cdk from "@aws-cdk/core"; import * as sns from "@aws-cdk/aws-sns"; import * as snsSubscriptions from "@aws-cdk/aws-sns-subscriptions"; import { App } from "./App"; -import { Function as Func, FunctionDefinition, FunctionPermissions } from "./Function"; +import { + Function as Func, + FunctionDefinition, + FunctionPermissions, +} from "./Function"; export interface TopicProps { readonly subscribers: FunctionDefinition[]; @@ -28,12 +32,11 @@ export class Topic extends cdk.Construct { // Create Topic //////////////////// - if ( ! snsTopic) { + if (!snsTopic) { this.snsTopic = new sns.Topic(this, "Topic", { topicName: root.logicalPrefixedName(id), }); - } - else { + } else { this.snsTopic = snsTopic; } @@ -41,26 +44,30 @@ export class Topic extends cdk.Construct { // Create Subscribers /////////////////////////// - if ( ! subscribers || subscribers.length === 0) { + if (!subscribers || subscribers.length === 0) { throw new Error(`No subscribers defined for the "${id}" Topic`); } this.subscriberFunctions = []; subscribers.forEach((subscriber, i) => { const func = Func.fromDefinition(this, `Subscriber_${i}`, subscriber); - this.snsTopic.addSubscription(new snsSubscriptions.LambdaSubscription(func)); + this.snsTopic.addSubscription( + new snsSubscriptions.LambdaSubscription(func) + ); this.subscriberFunctions.push(func); }); } - attachPermissions(permissions: FunctionPermissions) { - this.subscriberFunctions.forEach(subscriber => + attachPermissions(permissions: FunctionPermissions): void { + this.subscriberFunctions.forEach((subscriber) => subscriber.attachPermissions(permissions) ); } - attachPermissionsToSubscriber(index: number, permissions: FunctionPermissions) { - this.subscriberFunctions[index].attachPermissions(permissions) + attachPermissionsToSubscriber( + index: number, + permissions: FunctionPermissions + ): void { + this.subscriberFunctions[index].attachPermissions(permissions); } } - diff --git a/packages/resources/test/Api.test.ts b/packages/resources/test/Api.test.ts index fc69bc0787..25429bce82 100644 --- a/packages/resources/test/Api.test.ts +++ b/packages/resources/test/Api.test.ts @@ -1,38 +1,43 @@ -import '@aws-cdk/assert/jest'; -import { ABSENT } from '@aws-cdk/assert'; +import "@aws-cdk/assert/jest"; +import { ABSENT } from "@aws-cdk/assert"; import * as lambda from "@aws-cdk/aws-lambda"; import * as apig from "@aws-cdk/aws-apigatewayv2"; -import { App, Stack, Api, Function } from "../src"; +import { App, Stack, Api, ApiProps, Function } from "../src"; const lambdaDefaultPolicy = { - Action: [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords" - ], + Action: ["xray:PutTraceSegments", "xray:PutTelemetryRecords"], Effect: "Allow", - Resource: "*" + Resource: "*", }; test("base", async () => { const stack = new Stack(new App(), "stack"); - const { accessLogGroup } = new Api(stack, "Api", { + new Api(stack, "Api", { routes: { "GET /": "test/lambda.handler", }, }); - expect(stack).toHaveResource('AWS::ApiGatewayV2::Api', { + expect(stack).toHaveResource("AWS::ApiGatewayV2::Api", { Name: "dev-my-app-Api", CorsConfiguration: { AllowHeaders: ["*"], - AllowMethods: ["GET", "PUT", "POST", "HEAD", "PATCH", "DELETE", "OPTIONS"], + AllowMethods: [ + "GET", + "PUT", + "POST", + "HEAD", + "PATCH", + "DELETE", + "OPTIONS", + ], AllowOrigins: ["*"], }, }); - expect(stack).toHaveResource('AWS::ApiGatewayV2::Stage', { + expect(stack).toHaveResource("AWS::ApiGatewayV2::Stage", { AccessLogSettings: { - DestinationArn: { "Fn::GetAtt": [ "ApiLogGroup1717FE17", "Arn" ] }, + DestinationArn: { "Fn::GetAtt": ["ApiLogGroup1717FE17", "Arn"] }, Format: - '{\"requestTime\":\"$context.requestTime\",\"requestId\":\"$context.requestId\",\"httpMethod\":\"$context.httpMethod\",\"path\":\"$context.path\",\"routeKey\":\"$context.routeKey\",\"status\":\"$context.status\",\"responseLatency\":\"$context.responseLatency\",\"integrationRequestId\":\"$context.integration.requestId\",\"integrationStatus\":\"$context.integration.status\",\"integrationLatency\":\"$context.integration.latency\",\"integrationServiceStatus\":\"$context.integration.integrationStatus\",\"ip\":\"$context.identity.sourceIp\",\"userAgent\":\"$context.identity.userAgent\",\"cognitoIdentityId\":\"$context.identity.cognitoIdentityId\"}', + '{"requestTime":"$context.requestTime","requestId":"$context.requestId","httpMethod":"$context.httpMethod","path":"$context.path","routeKey":"$context.routeKey","status":"$context.status","responseLatency":"$context.responseLatency","integrationRequestId":"$context.integration.requestId","integrationStatus":"$context.integration.status","integrationLatency":"$context.integration.latency","integrationServiceStatus":"$context.integration.integrationStatus","ip":"$context.identity.sourceIp","userAgent":"$context.identity.userAgent","cognitoIdentityId":"$context.identity.cognitoIdentityId"}', }, }); }); @@ -54,16 +59,24 @@ test("cors-redefined", async () => { test("cors-true", async () => { const app = new App(); const stack = new Stack(app, "stack"); - const { httpApi } = new Api(stack, "Api", { + new Api(stack, "Api", { cors: true, routes: { "GET /": "test/lambda.handler", }, }); - expect(stack).toHaveResource('AWS::ApiGatewayV2::Api', { + expect(stack).toHaveResource("AWS::ApiGatewayV2::Api", { CorsConfiguration: { AllowHeaders: ["*"], - AllowMethods: ["GET", "PUT", "POST", "HEAD", "PATCH", "DELETE", "OPTIONS"], + AllowMethods: [ + "GET", + "PUT", + "POST", + "HEAD", + "PATCH", + "DELETE", + "OPTIONS", + ], AllowOrigins: ["*"], }, }); @@ -72,13 +85,13 @@ test("cors-true", async () => { test("cors-false", async () => { const app = new App(); const stack = new Stack(app, "stack"); - const { httpApi } = new Api(stack, "Api", { + new Api(stack, "Api", { cors: false, routes: { "GET /": "test/lambda.handler", }, }); - expect(stack).toHaveResource('AWS::ApiGatewayV2::Api', { + expect(stack).toHaveResource("AWS::ApiGatewayV2::Api", { CorsConfiguration: ABSENT, }); }); @@ -100,17 +113,17 @@ test("access-log-redefined", async () => { test("access-log-true", async () => { const app = new App(); const stack = new Stack(app, "stack"); - const { httpApi, accessLogGroup } = new Api(stack, "Api", { + new Api(stack, "Api", { accessLog: true, routes: { "GET /": "test/lambda.handler", }, }); - expect(stack).toHaveResource('AWS::ApiGatewayV2::Stage', { + expect(stack).toHaveResource("AWS::ApiGatewayV2::Stage", { AccessLogSettings: { - DestinationArn: { "Fn::GetAtt": [ "ApiLogGroup1717FE17", "Arn" ] }, + DestinationArn: { "Fn::GetAtt": ["ApiLogGroup1717FE17", "Arn"] }, Format: - '{\"requestTime\":\"$context.requestTime\",\"requestId\":\"$context.requestId\",\"httpMethod\":\"$context.httpMethod\",\"path\":\"$context.path\",\"routeKey\":\"$context.routeKey\",\"status\":\"$context.status\",\"responseLatency\":\"$context.responseLatency\",\"integrationRequestId\":\"$context.integration.requestId\",\"integrationStatus\":\"$context.integration.status\",\"integrationLatency\":\"$context.integration.latency\",\"integrationServiceStatus\":\"$context.integration.integrationStatus\",\"ip\":\"$context.identity.sourceIp\",\"userAgent\":\"$context.identity.userAgent\",\"cognitoIdentityId\":\"$context.identity.cognitoIdentityId\"}', + '{"requestTime":"$context.requestTime","requestId":"$context.requestId","httpMethod":"$context.httpMethod","path":"$context.path","routeKey":"$context.routeKey","status":"$context.status","responseLatency":"$context.responseLatency","integrationRequestId":"$context.integration.requestId","integrationStatus":"$context.integration.status","integrationLatency":"$context.integration.latency","integrationServiceStatus":"$context.integration.integrationStatus","ip":"$context.identity.sourceIp","userAgent":"$context.identity.userAgent","cognitoIdentityId":"$context.identity.cognitoIdentityId"}', }, }); }); @@ -118,13 +131,13 @@ test("access-log-true", async () => { test("access-log-false", async () => { const app = new App(); const stack = new Stack(app, "stack"); - const { httpApi, accessLogGroup } = new Api(stack, "Api", { + new Api(stack, "Api", { accessLog: false, routes: { "GET /": "test/lambda.handler", }, }); - expect(stack).toHaveResource('AWS::ApiGatewayV2::Stage', { + expect(stack).toHaveResource("AWS::ApiGatewayV2::Stage", { AccessLogSettings: ABSENT, }); }); @@ -153,7 +166,7 @@ test("default-authorization-type-iam", async () => { }, defaultAuthorizationType: "AWS_IAM", }); - expect(stack).toHaveResource('AWS::ApiGatewayV2::Route', { + expect(stack).toHaveResource("AWS::ApiGatewayV2::Route", { AuthorizationType: "AWS_IAM", }); }); @@ -167,7 +180,7 @@ test("default-authorization-type-none", async () => { }, defaultAuthorizationType: "NONE", }); - expect(stack).toHaveResource('AWS::ApiGatewayV2::Route', { + expect(stack).toHaveResource("AWS::ApiGatewayV2::Route", { AuthorizationType: "NONE", }); }); @@ -180,11 +193,11 @@ test("default-authorization-type-default", async () => { "GET /": "test/lambda.handler", }, }); - expect(stack).toHaveResource('AWS::ApiGatewayV2::Route', { + expect(stack).toHaveResource("AWS::ApiGatewayV2::Route", { AuthorizationType: "NONE", }); }); - + test("default-function-props", async () => { const app = new App(); const stack = new Stack(app, "stack"); @@ -196,7 +209,7 @@ test("default-function-props", async () => { runtime: lambda.Runtime.NODEJS_8_10, }, }); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toHaveResource("AWS::Lambda::Function", { Runtime: "nodejs8.10", }); }); @@ -205,8 +218,7 @@ test("routes-undefined", async () => { const app = new App(); const stack = new Stack(app, "stack"); expect(() => { - // @ts-ignore to by pass required 'routes' check - new Api(stack, "Api", {}); + new Api(stack, "Api", {} as ApiProps); }).toThrow(/Missing "routes" in sst.Api/); }); @@ -289,7 +301,7 @@ test("route-authorization-type-override-by-default", async () => { }, }, }); - expect(stack).toHaveResource('AWS::ApiGatewayV2::Route', { + expect(stack).toHaveResource("AWS::ApiGatewayV2::Route", { AuthorizationType: "NONE", }); }); @@ -302,7 +314,7 @@ test("route-value-string", async () => { "GET /": "test/lambda.handler", }, }); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); }); @@ -318,9 +330,9 @@ test("route-value-string-with-defaultFunctionProps", async () => { timeout: 3, }, }); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", - Timeout: 3 + Timeout: 3, }); }); @@ -333,8 +345,8 @@ test("route-value-Function", async () => { "GET /": f, }, }); - expect(stack).toCountResources('AWS::Lambda::Function', 1); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toCountResources("AWS::Lambda::Function", 1); + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); }); @@ -379,7 +391,7 @@ test("route-value-FunctionProps", async () => { }, }, }); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); }); @@ -397,7 +409,7 @@ test("route-value-FunctionProps-with-defaultFunctionProps", async () => { timeout: 3, }, }); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", Timeout: 3, }); @@ -417,7 +429,7 @@ test("route-value-FunctionProps-with-defaultFunctionProps-override", async () => timeout: 3, }, }); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", Timeout: 5, }); @@ -433,7 +445,7 @@ test("route-value-ApiRouteProps-function-string", async () => { }, }, }); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); }); @@ -451,7 +463,7 @@ test("route-value-ApiRouteProps-function-string-with-defaultFunctionProps", asyn timeout: 3, }, }); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", Timeout: 3, }); @@ -466,8 +478,8 @@ test("route-value-ApiRouteProps-function-Function", async () => { "GET /": { function: f }, }, }); - expect(stack).toCountResources('AWS::Lambda::Function', 1); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toCountResources("AWS::Lambda::Function", 1); + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); }); @@ -500,7 +512,7 @@ test("route-value-ApiRouteProps-function-FunctionProps", async () => { }, }, }); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); }); @@ -520,7 +532,7 @@ test("route-value-ApiRouteProps-function-FunctionProps-with-defaultFunctionProps timeout: 3, }, }); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", Timeout: 3, }); @@ -542,7 +554,7 @@ test("route-value-ApiRouteProps-function-FunctionProps-with-defaultFunctionProps timeout: 3, }, }); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", Timeout: 5, }); @@ -590,24 +602,24 @@ test("attachPermissions", async () => { "GET /2": "test/lambda.handler", }, }); - api.attachPermissions([ 's3' ]); - expect(stack).toHaveResource('AWS::IAM::Policy', { + api.attachPermissions(["s3"]); + expect(stack).toHaveResource("AWS::IAM::Policy", { PolicyDocument: { Statement: [ lambdaDefaultPolicy, { Action: "s3:*", Effect: "Allow", Resource: "*" }, ], - Version: "2012-10-17" + Version: "2012-10-17", }, PolicyName: "ApiLambdaGETServiceRoleDefaultPolicy013A8DEA", }); - expect(stack).toHaveResource('AWS::IAM::Policy', { + expect(stack).toHaveResource("AWS::IAM::Policy", { PolicyDocument: { Statement: [ lambdaDefaultPolicy, { Action: "s3:*", Effect: "Allow", Resource: "*" }, ], - Version: "2012-10-17" + Version: "2012-10-17", }, PolicyName: "ApiLambdaGET2ServiceRoleDefaultPolicy934FD89B", }); @@ -621,23 +633,21 @@ test("attachPermissionsToRoute", async () => { "GET /2": "test/lambda.handler", }, }); - api.attachPermissionsToRoute('GET /', [ 's3' ]); - expect(stack).toHaveResource('AWS::IAM::Policy', { + api.attachPermissionsToRoute("GET /", ["s3"]); + expect(stack).toHaveResource("AWS::IAM::Policy", { PolicyDocument: { Statement: [ lambdaDefaultPolicy, { Action: "s3:*", Effect: "Allow", Resource: "*" }, ], - Version: "2012-10-17" + Version: "2012-10-17", }, PolicyName: "ApiLambdaGETServiceRoleDefaultPolicy013A8DEA", }); - expect(stack).toHaveResource('AWS::IAM::Policy', { + expect(stack).toHaveResource("AWS::IAM::Policy", { PolicyDocument: { - Statement: [ - lambdaDefaultPolicy, - ], - Version: "2012-10-17" + Statement: [lambdaDefaultPolicy], + Version: "2012-10-17", }, PolicyName: "ApiLambdaGET2ServiceRoleDefaultPolicy934FD89B", }); diff --git a/packages/resources/test/Cron.test.ts b/packages/resources/test/Cron.test.ts index 72c152c5d2..473d6945a2 100644 --- a/packages/resources/test/Cron.test.ts +++ b/packages/resources/test/Cron.test.ts @@ -1,24 +1,21 @@ -import '@aws-cdk/assert/jest'; +import "@aws-cdk/assert/jest"; import * as cdk from "@aws-cdk/core"; import * as events from "@aws-cdk/aws-events"; -import { App, Stack, Cron, Function } from "../src"; +import { App, Stack, Cron, CronProps, Function } from "../src"; const lambdaDefaultPolicy = { - Action: [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords" - ], + Action: ["xray:PutTraceSegments", "xray:PutTelemetryRecords"], Effect: "Allow", - Resource: "*" + Resource: "*", }; test("schedule-string", async () => { const stack = new Stack(new App(), "stack"); new Cron(stack, "Cron", { - schedule: 'rate(1 minute)', - job: "test/lambda.handler" + schedule: "rate(1 minute)", + job: "test/lambda.handler", }); - expect(stack).toHaveResource('AWS::Events::Rule', { + expect(stack).toHaveResource("AWS::Events::Rule", { ScheduleExpression: "rate(1 minute)", }); }); @@ -27,9 +24,9 @@ test("schedule-rate", async () => { const stack = new Stack(new App(), "stack"); new Cron(stack, "Cron", { schedule: cdk.Duration.days(1), - job: "test/lambda.handler" + job: "test/lambda.handler", }); - expect(stack).toHaveResource('AWS::Events::Rule', { + expect(stack).toHaveResource("AWS::Events::Rule", { ScheduleExpression: "rate(1 day)", }); }); @@ -37,15 +34,15 @@ test("schedule-rate", async () => { test("schedule-cron", async () => { const stack = new Stack(new App(), "stack"); new Cron(stack, "Cron", { - schedule: { minute: '0', hour: '4' }, - job: "test/lambda.handler" + schedule: { minute: "0", hour: "4" }, + job: "test/lambda.handler", }); - expect(stack).toCountResources('AWS::Lambda::Function', 1); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toCountResources("AWS::Lambda::Function", 1); + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); - expect(stack).toCountResources('AWS::Events::Rule', 1); - expect(stack).toHaveResource('AWS::Events::Rule', { + expect(stack).toCountResources("AWS::Events::Rule", 1); + expect(stack).toHaveResource("AWS::Events::Rule", { ScheduleExpression: "cron(0 4 * * ? *)", }); }); @@ -54,7 +51,7 @@ test("schedule-undefined", async () => { const stack = new Stack(new App(), "stack"); expect(() => { new Cron(stack, "Cron", { - job: "test/lambda.handler" + job: "test/lambda.handler", }); }).toThrow(/No schedule defined/); }); @@ -62,11 +59,11 @@ test("schedule-undefined", async () => { test("job-string", async () => { const stack = new Stack(new App(), "stack"); new Cron(stack, "Cron", { - schedule: 'rate(1 minute)', - job: "test/lambda.handler" + schedule: "rate(1 minute)", + job: "test/lambda.handler", }); - expect(stack).toCountResources('AWS::Lambda::Function', 1); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toCountResources("AWS::Lambda::Function", 1); + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); }); @@ -75,11 +72,11 @@ test("job-Function", async () => { const stack = new Stack(new App(), "stack"); const f = new Function(stack, "Function", { handler: "test/lambda.handler" }); new Cron(stack, "Cron", { - schedule: 'rate(1 minute)', - job: f + schedule: "rate(1 minute)", + job: f, }); - expect(stack).toCountResources('AWS::Lambda::Function', 1); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toCountResources("AWS::Lambda::Function", 1); + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); }); @@ -87,11 +84,11 @@ test("job-Function", async () => { test("job-FunctionProps", async () => { const stack = new Stack(new App(), "stack"); new Cron(stack, "Cron", { - schedule: 'rate(1 minute)', - job: { handler: "test/lambda.handler" } + schedule: "rate(1 minute)", + job: { handler: "test/lambda.handler" }, }); - expect(stack).toCountResources('AWS::Lambda::Function', 1); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toCountResources("AWS::Lambda::Function", 1); + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); }); @@ -99,28 +96,27 @@ test("job-FunctionProps", async () => { test("job-undefined", async () => { const stack = new Stack(new App(), "stack"); expect(() => { - // @ts-ignore new Cron(stack, "Cron", { - schedule: 'rate(1 minute)', - }); + schedule: "rate(1 minute)", + } as CronProps); }).toThrow(/No job defined/); }); test("eventsRule", async () => { const stack = new Stack(new App(), "stack"); const rule = new events.Rule(stack, "Rule", { - schedule: events.Schedule.expression('rate(1 minute)'), + schedule: events.Schedule.expression("rate(1 minute)"), }); new Cron(stack, "Cron", { job: "test/lambda.handler", eventsRule: rule, }); - expect(stack).toCountResources('AWS::Lambda::Function', 1); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toCountResources("AWS::Lambda::Function", 1); + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); - expect(stack).toCountResources('AWS::Events::Rule', 1); - expect(stack).toHaveResource('AWS::Events::Rule', { + expect(stack).toCountResources("AWS::Events::Rule", 1); + expect(stack).toHaveResource("AWS::Events::Rule", { ScheduleExpression: "rate(1 minute)", }); }); @@ -128,11 +124,11 @@ test("eventsRule", async () => { test("eventsRule-redefined", async () => { const stack = new Stack(new App(), "stack"); const rule = new events.Rule(stack, "Rule", { - schedule: events.Schedule.expression('rate(1 minute)'), + schedule: events.Schedule.expression("rate(1 minute)"), }); expect(() => { new Cron(stack, "Cron", { - schedule: 'rate(1 minute)', + schedule: "rate(1 minute)", job: "test/lambda.handler", eventsRule: rule, }); @@ -142,17 +138,17 @@ test("eventsRule-redefined", async () => { test("attachPermissions", async () => { const stack = new Stack(new App(), "stack"); const cron = new Cron(stack, "Cron", { - schedule: 'rate(1 minute)', + schedule: "rate(1 minute)", job: "test/lambda.handler", }); - cron.attachPermissions([ "s3" ]); - expect(stack).toHaveResource('AWS::IAM::Policy', { + cron.attachPermissions(["s3"]); + expect(stack).toHaveResource("AWS::IAM::Policy", { PolicyDocument: { Statement: [ lambdaDefaultPolicy, { Action: "s3:*", Effect: "Allow", Resource: "*" }, ], - Version: "2012-10-17" + Version: "2012-10-17", }, PolicyName: "CronJobServiceRoleDefaultPolicy283E5BD2", }); diff --git a/packages/resources/test/Function.test.ts b/packages/resources/test/Function.test.ts index 2877a9a1fe..71784c6fd2 100644 --- a/packages/resources/test/Function.test.ts +++ b/packages/resources/test/Function.test.ts @@ -1,16 +1,23 @@ -import '@aws-cdk/assert/jest'; +/* eslint-disable @typescript-eslint/ban-types*/ + +import "@aws-cdk/assert/jest"; +import { ABSENT } from "@aws-cdk/assert"; import * as apig from "@aws-cdk/aws-apigatewayv2"; import * as sns from "@aws-cdk/aws-sns"; import * as lambda from "@aws-cdk/aws-lambda"; -import { App, Stack, Function, HandlerProps, FunctionHandlerProps } from "../src"; +import { + App, + Stack, + Function, + FunctionProps, + HandlerProps, + FunctionHandlerProps, +} from "../src"; const lambdaDefaultPolicy = { - Action: [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords" - ], + Action: ["xray:PutTraceSegments", "xray:PutTelemetryRecords"], Effect: "Allow", - Resource: "*" + Resource: "*", }; test("non-namespaced-props", async () => { @@ -25,10 +32,10 @@ test("namespaced-props", async () => { test("base", async () => { const stack = new Stack(new App(), "stack"); - const f = new Function(stack, "Function", { + new Function(stack, "Function", { handler: "test/lambda.handler", }); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", Timeout: 10, MemorySize: 1024, @@ -38,12 +45,12 @@ test("base", async () => { test("base-override", async () => { const stack = new Stack(new App(), "stack"); - const f = new Function(stack, "Function", { + new Function(stack, "Function", { handler: "test/lambda.handler", timeout: 20, memorySize: 512, }); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", Timeout: 20, MemorySize: 512, @@ -69,11 +76,13 @@ test("runtime-invalid", async () => { test("xray-disabled", async () => { const stack = new Stack(new App(), "stack"); - const f = new Function(stack, "Function", { + new Function(stack, "Function", { handler: "test/lambda.handler", tracing: lambda.Tracing.DISABLED, }); - expect((f.node?.defaultChild as any).tracingConfig).toBeUndefined(); + expect(stack).toHaveResource("AWS::Lambda::Function", { + TracingConfig: ABSENT, + }); }); test("attachPermission-string-all", async () => { @@ -82,13 +91,13 @@ test("attachPermission-string-all", async () => { handler: "test/lambda.handler", }); f.attachPermissions("*"); - expect(stack).toHaveResource('AWS::IAM::Policy', { + expect(stack).toHaveResource("AWS::IAM::Policy", { PolicyDocument: { Statement: [ lambdaDefaultPolicy, { Action: "*", Effect: "Allow", Resource: "*" }, ], - Version: "2012-10-17" + Version: "2012-10-17", }, }); }); @@ -109,10 +118,10 @@ test("attachPermission-array-empty", async () => { handler: "test/lambda.handler", }); f.attachPermissions([]); - expect(stack).toHaveResource('AWS::IAM::Policy', { + expect(stack).toHaveResource("AWS::IAM::Policy", { PolicyDocument: { - Statement: [ lambdaDefaultPolicy ], - Version: "2012-10-17" + Statement: [lambdaDefaultPolicy], + Version: "2012-10-17", }, }); }); @@ -122,15 +131,15 @@ test("attachPermission-array-string", async () => { const f = new Function(stack, "Function", { handler: "test/lambda.handler", }); - f.attachPermissions([ "s3", "dynamodb" ]); - expect(stack).toHaveResource('AWS::IAM::Policy', { + f.attachPermissions(["s3", "dynamodb"]); + expect(stack).toHaveResource("AWS::IAM::Policy", { PolicyDocument: { Statement: [ lambdaDefaultPolicy, { Action: "s3:*", Effect: "Allow", Resource: "*" }, { Action: "dynamodb:*", Effect: "Allow", Resource: "*" }, ], - Version: "2012-10-17" + Version: "2012-10-17", }, }); }); @@ -141,14 +150,18 @@ test("attachPermission-array-cfn-construct", async () => { const f = new Function(stack, "Function", { handler: "test/lambda.handler", }); - f.attachPermissions([ topic ]); - expect(stack).toHaveResource('AWS::IAM::Policy', { + f.attachPermissions([topic]); + expect(stack).toHaveResource("AWS::IAM::Policy", { PolicyDocument: { Statement: [ lambdaDefaultPolicy, - { Action: "sns:*", Effect: "Allow", Resource: { "Ref": "TopicBFC7AF6E" } }, + { + Action: "sns:*", + Effect: "Allow", + Resource: { Ref: "TopicBFC7AF6E" }, + }, ], - Version: "2012-10-17" + Version: "2012-10-17", }, }); }); @@ -160,7 +173,7 @@ test("attachPermission-array-cfn-construct-not-supported", async () => { handler: "test/lambda.handler", }); expect(() => { - f.attachPermissions([ api ]); + f.attachPermissions([api]); }).toThrow(/The specified permissions is not a supported construct type/); }); @@ -170,22 +183,26 @@ test("attachPermission-array-cfn-grant", async () => { const f = new Function(stack, "Function", { handler: "test/lambda.handler", }); - f.attachPermissions([ [ topic, 'grantPublish' ] ]); - expect(stack).toHaveResource('AWS::IAM::Policy', { + f.attachPermissions([[topic, "grantPublish"]]); + expect(stack).toHaveResource("AWS::IAM::Policy", { PolicyDocument: { Statement: [ lambdaDefaultPolicy, - { Action: "sns:Publish", Effect: "Allow", Resource: { Ref: "TopicBFC7AF6E" } }, + { + Action: "sns:Publish", + Effect: "Allow", + Resource: { Ref: "TopicBFC7AF6E" }, + }, ], - Version: "2012-10-17" + Version: "2012-10-17", }, }); }); test("fromDefinition-string", async () => { const stack = new Stack(new App(), "stack"); - const f = Function.fromDefinition(stack, "Function", "test/lambda.handler"); - expect(stack).toHaveResource('AWS::Lambda::Function', { + Function.fromDefinition(stack, "Function", "test/lambda.handler"); + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", Timeout: 10, }); @@ -193,21 +210,25 @@ test("fromDefinition-string", async () => { test("fromDefinition-props", async () => { const stack = new Stack(new App(), "stack"); - const f = Function.fromDefinition(stack, "Function", { + Function.fromDefinition(stack, "Function", { handler: "test/lambda.handler", }); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); }); test("fromDefinition-sstFunction", async () => { const stack = new Stack(new App(), "stack"); - const f = Function.fromDefinition(stack, "Function", new Function(stack, "Function", { - handler: "test/lambda.handler", - timeout: 20, - })); - expect(stack).toHaveResource('AWS::Lambda::Function', { + Function.fromDefinition( + stack, + "Function", + new Function(stack, "Function", { + handler: "test/lambda.handler", + timeout: 20, + }) + ); + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", Timeout: 20, }); @@ -216,20 +237,23 @@ test("fromDefinition-sstFunction", async () => { test("fromDefinition-lambdaFunction", async () => { const stack = new Stack(new App(), "stack"); expect(() => { - // @ts-ignore - Function.fromDefinition(stack, "Function", new lambda.Function(stack, "Function", { - runtime: lambda.Runtime.NODEJS_10_X, - handler: "lambda.handler", - code: lambda.Code.fromAsset('test'), - })); - }).toThrow(/Please use sst.Function instead of lambda.Function for the \"Function\" Function./); + Function.fromDefinition( + stack, + "Function", + new lambda.Function(stack, "Function", { + runtime: lambda.Runtime.NODEJS_10_X, + handler: "lambda.handler", + code: lambda.Code.fromAsset("test"), + }) as Function + ); + }).toThrow( + /Please use sst.Function instead of lambda.Function for the "Function" Function./ + ); }); test("fromDefinition-garbage", async () => { const stack = new Stack(new App(), "stack"); expect(() => { - // @ts-ignore - Function.fromDefinition(stack, "Function", { }); - }).toThrow(/Invalid function definition for the \"Function\" Function/); + Function.fromDefinition(stack, "Function", {} as FunctionProps); + }).toThrow(/Invalid function definition for the "Function" Function/); }); - diff --git a/packages/resources/test/Queue.test.ts b/packages/resources/test/Queue.test.ts index 89f4a104e5..256b290fde 100644 --- a/packages/resources/test/Queue.test.ts +++ b/packages/resources/test/Queue.test.ts @@ -1,43 +1,37 @@ -import '@aws-cdk/assert/jest'; +import "@aws-cdk/assert/jest"; import * as sqs from "@aws-cdk/aws-sqs"; -import { App, Stack, Queue, Function } from "../src"; +import { App, Stack, Queue, QueueProps, Function } from "../src"; const lambdaDefaultPolicy = { - Action: [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords" - ], + Action: ["xray:PutTraceSegments", "xray:PutTelemetryRecords"], Effect: "Allow", - Resource: "*" + Resource: "*", }; const queueDefaultPolicy = { - "Action": [ + Action: [ "sqs:ReceiveMessage", "sqs:ChangeMessageVisibility", "sqs:GetQueueUrl", "sqs:DeleteMessage", - "sqs:GetQueueAttributes" + "sqs:GetQueueAttributes", ], - "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "Queue381943A6", - "Arn" - ] - } + Effect: "Allow", + Resource: { + "Fn::GetAtt": ["Queue381943A6", "Arn"], + }, }; test("consumer-string", async () => { const stack = new Stack(new App(), "stack"); new Queue(stack, "Queue", { - consumer: "test/lambda.handler" + consumer: "test/lambda.handler", }); - expect(stack).toCountResources('AWS::Lambda::Function', 1); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toCountResources("AWS::Lambda::Function", 1); + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); - expect(stack).toCountResources('AWS::SQS::Queue', 1); - expect(stack).toHaveResource('AWS::SQS::Queue', { + expect(stack).toCountResources("AWS::SQS::Queue", 1); + expect(stack).toHaveResource("AWS::SQS::Queue", { QueueName: "dev-my-app-Queue", }); }); @@ -46,12 +40,12 @@ test("consumer-Function", async () => { const stack = new Stack(new App(), "stack"); const f = new Function(stack, "Function", { handler: "test/lambda.handler" }); new Queue(stack, "Queue", { - consumer: f + consumer: f, }); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); - expect(stack).toHaveResource('AWS::SQS::Queue', { + expect(stack).toHaveResource("AWS::SQS::Queue", { QueueName: "dev-my-app-Queue", }); }); @@ -59,12 +53,12 @@ test("consumer-Function", async () => { test("consumer-FunctionProps", async () => { const stack = new Stack(new App(), "stack"); new Queue(stack, "Queue", { - consumer: { handler: "test/lambda.handler" } + consumer: { handler: "test/lambda.handler" }, }); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); - expect(stack).toHaveResource('AWS::SQS::Queue', { + expect(stack).toHaveResource("AWS::SQS::Queue", { QueueName: "dev-my-app-Queue", }); }); @@ -72,27 +66,25 @@ test("consumer-FunctionProps", async () => { test("consumer-undefined", async () => { const stack = new Stack(new App(), "stack"); expect(() => { - // @ts-ignore - new Queue(stack, "Queue", { - }); + new Queue(stack, "Queue", {} as QueueProps); }).toThrow(/No consumer defined/); }); test("sqsQueue", async () => { const stack = new Stack(new App(), "stack"); const queue = new sqs.Queue(stack, "Q", { - queueName: 'my-queue', + queueName: "my-queue", }); new Queue(stack, "Queue", { consumer: "test/lambda.handler", sqsQueue: queue, }); - expect(stack).toCountResources('AWS::Lambda::Function', 1); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toCountResources("AWS::Lambda::Function", 1); + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); - expect(stack).toCountResources('AWS::SQS::Queue', 1); - expect(stack).toHaveResource('AWS::SQS::Queue', { + expect(stack).toCountResources("AWS::SQS::Queue", 1); + expect(stack).toHaveResource("AWS::SQS::Queue", { QueueName: "my-queue", }); }); @@ -102,17 +94,16 @@ test("attachPermissions", async () => { const queue = new Queue(stack, "Queue", { consumer: "test/lambda.handler", }); - queue.attachPermissions([ "s3" ]); - expect(stack).toHaveResource('AWS::IAM::Policy', { + queue.attachPermissions(["s3"]); + expect(stack).toHaveResource("AWS::IAM::Policy", { PolicyDocument: { Statement: [ lambdaDefaultPolicy, queueDefaultPolicy, { Action: "s3:*", Effect: "Allow", Resource: "*" }, ], - Version: "2012-10-17" + Version: "2012-10-17", }, PolicyName: "QueueConsumerServiceRoleDefaultPolicy8A09B9BC", }); }); - diff --git a/packages/resources/test/Table.test.ts b/packages/resources/test/Table.test.ts index 5a934a9413..96fddcdfec 100644 --- a/packages/resources/test/Table.test.ts +++ b/packages/resources/test/Table.test.ts @@ -1,23 +1,25 @@ -import '@aws-cdk/assert/jest'; +/* eslint-disable @typescript-eslint/ban-ts-comment*/ + +import "@aws-cdk/assert/jest"; import * as dynamodb from "@aws-cdk/aws-dynamodb"; -import { App, Stack, Table } from "../src"; +import { App, Stack, Table, TableProps, TableIndexProps } from "../src"; test("base", async () => { const stack = new Stack(new App(), "stack"); new Table(stack, "Table", { fields: { - "noteId": dynamodb.AttributeType.STRING, - "userId": dynamodb.AttributeType.STRING, + noteId: dynamodb.AttributeType.STRING, + userId: dynamodb.AttributeType.STRING, }, primaryIndex: { partitionKey: "noteId", sortKey: "userId" }, }); - expect(stack).toHaveResource('AWS::DynamoDB::Table', { + expect(stack).toHaveResource("AWS::DynamoDB::Table", { TableName: "dev-my-app-Table", BillingMode: dynamodb.BillingMode.PAY_PER_REQUEST, PointInTimeRecoverySpecification: { PointInTimeRecoveryEnabled: true }, KeySchema: [ - { AttributeName: 'noteId', KeyType: 'HASH' }, - { AttributeName: 'userId', KeyType: 'RANGE' } + { AttributeName: "noteId", KeyType: "HASH" }, + { AttributeName: "userId", KeyType: "RANGE" }, ], }); }); @@ -26,43 +28,45 @@ test("secondary-indexes", async () => { const stack = new Stack(new App(), "stack"); new Table(stack, "Table", { fields: { - "noteId": dynamodb.AttributeType.STRING, - "userId": dynamodb.AttributeType.STRING, - "time": dynamodb.AttributeType.NUMBER, + noteId: dynamodb.AttributeType.STRING, + userId: dynamodb.AttributeType.STRING, + time: dynamodb.AttributeType.NUMBER, }, primaryIndex: { partitionKey: "noteId", sortKey: "userId" }, secondaryIndexes: { - "userTimeIndex": { partitionKey: "userId", sortKey: "time" }, + userTimeIndex: { partitionKey: "userId", sortKey: "time" }, }, }); - expect(stack).toHaveResource('AWS::DynamoDB::Table', { + expect(stack).toHaveResource("AWS::DynamoDB::Table", { KeySchema: [ - { AttributeName: 'noteId', KeyType: 'HASH' }, - { AttributeName: 'userId', KeyType: 'RANGE' }, + { AttributeName: "noteId", KeyType: "HASH" }, + { AttributeName: "userId", KeyType: "RANGE" }, ], - GlobalSecondaryIndexes: [{ - IndexName: 'userTimeIndex', - KeySchema: [ - { AttributeName: 'userId', KeyType: 'HASH' }, - { AttributeName: 'time', KeyType: 'RANGE' }, - ], - Projection: { - ProjectionType: 'ALL', + GlobalSecondaryIndexes: [ + { + IndexName: "userTimeIndex", + KeySchema: [ + { AttributeName: "userId", KeyType: "HASH" }, + { AttributeName: "time", KeyType: "RANGE" }, + ], + Projection: { + ProjectionType: "ALL", + }, }, - }], + ], }); }); test("fields-undefined", async () => { const stack = new Stack(new App(), "stack"); expect(() => { - // @ts-ignore + // @ts-ignore Allow specify TableProps without fields new Table(stack, "Table", { primaryIndex: { partitionKey: "noteId", sortKey: "userId" }, secondaryIndexes: { - "userTimeIndex": { partitionKey: "userId", sortKey: "time" }, + userTimeIndex: { partitionKey: "userId", sortKey: "time" }, }, - }); + } as TableProps); }).toThrow(/No fields defined/); }); @@ -79,13 +83,13 @@ test("fields-empty", async () => { test("primaryIndex-undefined", async () => { const stack = new Stack(new App(), "stack"); expect(() => { - // @ts-ignore + // @ts-ignore Allow specify TableProps without primaryIndex new Table(stack, "Table", { fields: { - "noteId": dynamodb.AttributeType.STRING, - "userId": dynamodb.AttributeType.STRING, + noteId: dynamodb.AttributeType.STRING, + userId: dynamodb.AttributeType.STRING, }, - }); + } as TableProps); }).toThrow(/No primary index defined/); }); @@ -94,13 +98,10 @@ test("primaryIndex-missing-partitionKey", async () => { expect(() => { new Table(stack, "Table", { fields: { - "noteId": dynamodb.AttributeType.STRING, - "userId": dynamodb.AttributeType.STRING, + noteId: dynamodb.AttributeType.STRING, + userId: dynamodb.AttributeType.STRING, }, - // @ts-ignore - primaryIndex: {}, - + primaryIndex: {} as TableIndexProps, }); }).toThrow(/No partition key defined/); }); - diff --git a/packages/resources/test/Topic.test.ts b/packages/resources/test/Topic.test.ts index 67c47475a6..301c05e538 100644 --- a/packages/resources/test/Topic.test.ts +++ b/packages/resources/test/Topic.test.ts @@ -1,27 +1,24 @@ -import '@aws-cdk/assert/jest'; +import "@aws-cdk/assert/jest"; import * as sns from "@aws-cdk/aws-sns"; -import { App, Stack, Topic, Function } from "../src"; +import { App, Stack, Topic, TopicProps, Function } from "../src"; const lambdaDefaultPolicy = { - Action: [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords" - ], + Action: ["xray:PutTraceSegments", "xray:PutTelemetryRecords"], Effect: "Allow", - Resource: "*" + Resource: "*", }; test("subscribers-string", async () => { const stack = new Stack(new App(), "stack"); new Topic(stack, "Topic", { - subscribers: [ "test/lambda.handler" ] + subscribers: ["test/lambda.handler"], }); - expect(stack).toCountResources('AWS::Lambda::Function', 1); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toCountResources("AWS::Lambda::Function", 1); + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); - expect(stack).toCountResources('AWS::SNS::Topic', 1); - expect(stack).toHaveResource('AWS::SNS::Topic', { + expect(stack).toCountResources("AWS::SNS::Topic", 1); + expect(stack).toHaveResource("AWS::SNS::Topic", { TopicName: "dev-my-app-Topic", }); }); @@ -29,14 +26,14 @@ test("subscribers-string", async () => { test("subscribers-string-multiple", async () => { const stack = new Stack(new App(), "stack"); new Topic(stack, "Topic", { - subscribers: [ "test/lambda.handler", "test/lambda.handler" ] + subscribers: ["test/lambda.handler", "test/lambda.handler"], }); - expect(stack).toCountResources('AWS::Lambda::Function', 2); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toCountResources("AWS::Lambda::Function", 2); + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); - expect(stack).toCountResources('AWS::SNS::Topic', 1); - expect(stack).toHaveResource('AWS::SNS::Topic', { + expect(stack).toCountResources("AWS::SNS::Topic", 1); + expect(stack).toHaveResource("AWS::SNS::Topic", { TopicName: "dev-my-app-Topic", }); }); @@ -45,12 +42,12 @@ test("subscribers-Function", async () => { const stack = new Stack(new App(), "stack"); const f = new Function(stack, "Function", { handler: "test/lambda.handler" }); new Topic(stack, "Topic", { - subscribers: [ f ] + subscribers: [f], }); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); - expect(stack).toHaveResource('AWS::SNS::Topic', { + expect(stack).toHaveResource("AWS::SNS::Topic", { TopicName: "dev-my-app-Topic", }); }); @@ -58,12 +55,12 @@ test("subscribers-Function", async () => { test("subscribers-FunctionProps", async () => { const stack = new Stack(new App(), "stack"); new Topic(stack, "Topic", { - subscribers: [ { handler: "test/lambda.handler" } ] + subscribers: [{ handler: "test/lambda.handler" }], }); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); - expect(stack).toHaveResource('AWS::SNS::Topic', { + expect(stack).toHaveResource("AWS::SNS::Topic", { TopicName: "dev-my-app-Topic", }); }); @@ -71,9 +68,7 @@ test("subscribers-FunctionProps", async () => { test("subscribers-undefined", async () => { const stack = new Stack(new App(), "stack"); expect(() => { - // @ts-ignore - new Topic(stack, "Topic", { - }); + new Topic(stack, "Topic", {} as TopicProps); }).toThrow(/No subscribers defined/); }); @@ -81,7 +76,7 @@ test("subscribers-empty", async () => { const stack = new Stack(new App(), "stack"); expect(() => { new Topic(stack, "Topic", { - subscribers: [] + subscribers: [], }); }).toThrow(/No subscribers defined/); }); @@ -89,18 +84,18 @@ test("subscribers-empty", async () => { test("snsTopic", async () => { const stack = new Stack(new App(), "stack"); const topic = new sns.Topic(stack, "T", { - topicName: 'my-topic', + topicName: "my-topic", }); new Topic(stack, "Topic", { - subscribers: [ "test/lambda.handler" ], + subscribers: ["test/lambda.handler"], snsTopic: topic, }); - expect(stack).toCountResources('AWS::Lambda::Function', 1); - expect(stack).toHaveResource('AWS::Lambda::Function', { + expect(stack).toCountResources("AWS::Lambda::Function", 1); + expect(stack).toHaveResource("AWS::Lambda::Function", { Handler: "test/lambda.handler", }); - expect(stack).toCountResources('AWS::SNS::Topic', 1); - expect(stack).toHaveResource('AWS::SNS::Topic', { + expect(stack).toCountResources("AWS::SNS::Topic", 1); + expect(stack).toHaveResource("AWS::SNS::Topic", { TopicName: "my-topic", }); }); @@ -108,26 +103,26 @@ test("snsTopic", async () => { test("attachPermissions", async () => { const stack = new Stack(new App(), "stack"); const topic = new Topic(stack, "Topic", { - subscribers: [ "test/lambda.handler", "test/lambda.handler" ] + subscribers: ["test/lambda.handler", "test/lambda.handler"], }); - topic.attachPermissions([ "s3" ]); - expect(stack).toHaveResource('AWS::IAM::Policy', { + topic.attachPermissions(["s3"]); + expect(stack).toHaveResource("AWS::IAM::Policy", { PolicyDocument: { Statement: [ lambdaDefaultPolicy, { Action: "s3:*", Effect: "Allow", Resource: "*" }, ], - Version: "2012-10-17" + Version: "2012-10-17", }, PolicyName: "TopicSubscriber0ServiceRoleDefaultPolicyB81AA9BE", }); - expect(stack).toHaveResource('AWS::IAM::Policy', { + expect(stack).toHaveResource("AWS::IAM::Policy", { PolicyDocument: { Statement: [ lambdaDefaultPolicy, { Action: "s3:*", Effect: "Allow", Resource: "*" }, ], - Version: "2012-10-17" + Version: "2012-10-17", }, PolicyName: "TopicSubscriber1ServiceRoleDefaultPolicyA0E825CD", }); @@ -136,25 +131,23 @@ test("attachPermissions", async () => { test("attachPermissionsToSubscriber", async () => { const stack = new Stack(new App(), "stack"); const topic = new Topic(stack, "Topic", { - subscribers: [ "test/lambda.handler", "test/lambda.handler" ] + subscribers: ["test/lambda.handler", "test/lambda.handler"], }); - topic.attachPermissionsToSubscriber(0, [ "s3" ]); - expect(stack).toHaveResource('AWS::IAM::Policy', { + topic.attachPermissionsToSubscriber(0, ["s3"]); + expect(stack).toHaveResource("AWS::IAM::Policy", { PolicyDocument: { Statement: [ lambdaDefaultPolicy, { Action: "s3:*", Effect: "Allow", Resource: "*" }, ], - Version: "2012-10-17" + Version: "2012-10-17", }, PolicyName: "TopicSubscriber0ServiceRoleDefaultPolicyB81AA9BE", }); - expect(stack).toHaveResource('AWS::IAM::Policy', { + expect(stack).toHaveResource("AWS::IAM::Policy", { PolicyDocument: { - Statement: [ - lambdaDefaultPolicy, - ], - Version: "2012-10-17" + Statement: [lambdaDefaultPolicy], + Version: "2012-10-17", }, PolicyName: "TopicSubscriber1ServiceRoleDefaultPolicyA0E825CD", }); From 0bfa711da94f5f88e01570841772f459aee37a97 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 1 Feb 2021 05:23:51 -0500 Subject: [PATCH 339/481] Fixing zip-issue --- packages/cli/scripts/start.js | 13 ++- .../build-bundle-no-srcpath.test.js | 100 +++++++++++++++++ .../test/build-bundle-no-srcpath/lambda.js | 3 + .../test/build-bundle-no-srcpath/lib/index.js | 20 ++++ .../test/build-bundle-no-srcpath/package.json | 24 +++++ .../build-bundle-no-srcpath/service/lambda.js | 3 + .../service/src/lambda.js | 3 + .../build-bundle-no-srcpath/src/lambda.js | 3 + .../cli/test/build-bundle-no-srcpath/sst.json | 5 + .../build-bundle-srcpath.test.js | 89 +++++++++++++++ .../cli/test/build-bundle-srcpath/lambda.js | 3 + .../test/build-bundle-srcpath/lib/index.js | 22 ++++ .../test/build-bundle-srcpath/package.json | 24 +++++ .../build-bundle-srcpath/service/lambda.js | 3 + .../service/src/lambda.js | 3 + .../test/build-bundle-srcpath/src/lambda.js | 3 + .../cli/test/build-bundle-srcpath/sst.json | 5 + .../build-no-bundle-no-srcpath.test.js | 20 ++++ .../test/build-no-bundle-no-srcpath/lambda.js | 3 + .../build-no-bundle-no-srcpath/lib/index.js | 20 ++++ .../build-no-bundle-no-srcpath/package.json | 24 +++++ .../service/lambda.js | 3 + .../service/src/lambda.js | 3 + .../build-no-bundle-no-srcpath/src/lambda.js | 3 + .../test/build-no-bundle-no-srcpath/sst.json | 5 + .../build-no-bundle-srcpath.test.js | 99 +++++++++++++++++ .../test/build-no-bundle-srcpath/lambda.js | 3 + .../test/build-no-bundle-srcpath/lib/index.js | 22 ++++ .../test/build-no-bundle-srcpath/package.json | 24 +++++ .../build-no-bundle-srcpath/service/lambda.js | 3 + .../service/src/lambda.js | 3 + .../build-no-bundle-srcpath/src/lambda.js | 3 + .../cli/test/build-no-bundle-srcpath/sst.json | 5 + packages/resources/src/App.ts | 7 +- packages/resources/src/Function.ts | 5 + packages/resources/src/util/builder.ts | 101 +++++++++++++----- 36 files changed, 650 insertions(+), 32 deletions(-) create mode 100644 packages/cli/test/build-bundle-no-srcpath/build-bundle-no-srcpath.test.js create mode 100644 packages/cli/test/build-bundle-no-srcpath/lambda.js create mode 100644 packages/cli/test/build-bundle-no-srcpath/lib/index.js create mode 100644 packages/cli/test/build-bundle-no-srcpath/package.json create mode 100644 packages/cli/test/build-bundle-no-srcpath/service/lambda.js create mode 100644 packages/cli/test/build-bundle-no-srcpath/service/src/lambda.js create mode 100644 packages/cli/test/build-bundle-no-srcpath/src/lambda.js create mode 100644 packages/cli/test/build-bundle-no-srcpath/sst.json create mode 100644 packages/cli/test/build-bundle-srcpath/build-bundle-srcpath.test.js create mode 100644 packages/cli/test/build-bundle-srcpath/lambda.js create mode 100644 packages/cli/test/build-bundle-srcpath/lib/index.js create mode 100644 packages/cli/test/build-bundle-srcpath/package.json create mode 100644 packages/cli/test/build-bundle-srcpath/service/lambda.js create mode 100644 packages/cli/test/build-bundle-srcpath/service/src/lambda.js create mode 100644 packages/cli/test/build-bundle-srcpath/src/lambda.js create mode 100644 packages/cli/test/build-bundle-srcpath/sst.json create mode 100644 packages/cli/test/build-no-bundle-no-srcpath/build-no-bundle-no-srcpath.test.js create mode 100644 packages/cli/test/build-no-bundle-no-srcpath/lambda.js create mode 100644 packages/cli/test/build-no-bundle-no-srcpath/lib/index.js create mode 100644 packages/cli/test/build-no-bundle-no-srcpath/package.json create mode 100644 packages/cli/test/build-no-bundle-no-srcpath/service/lambda.js create mode 100644 packages/cli/test/build-no-bundle-no-srcpath/service/src/lambda.js create mode 100644 packages/cli/test/build-no-bundle-no-srcpath/src/lambda.js create mode 100644 packages/cli/test/build-no-bundle-no-srcpath/sst.json create mode 100644 packages/cli/test/build-no-bundle-srcpath/build-no-bundle-srcpath.test.js create mode 100644 packages/cli/test/build-no-bundle-srcpath/lambda.js create mode 100644 packages/cli/test/build-no-bundle-srcpath/lib/index.js create mode 100644 packages/cli/test/build-no-bundle-srcpath/package.json create mode 100644 packages/cli/test/build-no-bundle-srcpath/service/lambda.js create mode 100644 packages/cli/test/build-no-bundle-srcpath/service/src/lambda.js create mode 100644 packages/cli/test/build-no-bundle-srcpath/src/lambda.js create mode 100644 packages/cli/test/build-no-bundle-srcpath/sst.json diff --git a/packages/cli/scripts/start.js b/packages/cli/scripts/start.js index 2741a3aedb..849cdfdb78 100644 --- a/packages/cli/scripts/start.js +++ b/packages/cli/scripts/start.js @@ -522,8 +522,19 @@ async function onTypeCheckDone(srcPath) { } async function transpile(srcPath, handler) { + // Sample input: + // srcPath 'service' + // handler 'src/lambda.handler' + // + // Sample output path: + // metafile 'services/user-service/.build/.esbuild.service-src-lambda-hander.json' + // outSrcPath 'services/user-service/.build/src' + // fullPath 'services/user-service/src/lambda.js' + // + // Transpiled .js and .js.map are output in .build folder with original handler structure path + const metafile = getEsbuildMetafilePath(srcPath, handler); - const outSrcPath = path.join(srcPath, paths.appBuildDir); + const outSrcPath = path.join(srcPath, paths.appBuildDir, path.dirname(handler)); const fullPath = await getHandlerFilePath(srcPath, handler); const tsconfigPath = path.join(paths.appPath, srcPath, "tsconfig.json"); diff --git a/packages/cli/test/build-bundle-no-srcpath/build-bundle-no-srcpath.test.js b/packages/cli/test/build-bundle-no-srcpath/build-bundle-no-srcpath.test.js new file mode 100644 index 0000000000..19c31e6dd8 --- /dev/null +++ b/packages/cli/test/build-bundle-no-srcpath/build-bundle-no-srcpath.test.js @@ -0,0 +1,100 @@ +const fs = require("fs"); +const path = require("path"); +const zipLocal = require("zip-local"); +const { runBuildCommand, clearBuildOutput } = require("../helpers"); +const paths = require("../../scripts/util/paths"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("build-bundle-no-srcpath", async () => { + await runBuildCommand(__dirname); + + // Test eslint created build + const buildPath = path.join(__dirname, paths.appBuildDir); + const buildFiles = fs.readdirSync(buildPath); + // Sample files + // [ + // '.esbuild.lambda-handler.json', + // '.esbuild.src-lambda-handler.json', + // 'cdk.out', + // 'eslint.js', + // 'lambda-handler-1612170130511', + // 'lambda-handler-1612170130511.zip', + // 'lib', + // 'run.js', + // 'src-lambda-handler-1612170130622', + // 'src-lambda-handler-1612170130622.zip', + // 'sst-debug.log', + // 'sst-merged.json' + // ] + + // Verify build output + let handlerHash; + let srcHandlerHash; + buildFiles.forEach(file => { + if (file.match(/^lambda-handler-[\d]+$/)) { + handlerHash = file; + } + else if (file.match(/^src-lambda-handler-[\d]+$/)) { + srcHandlerHash = file; + } + }); + expect(handlerHash).toBeDefined(); + expect(srcHandlerHash).toBeDefined(); + + // Verify build output files + const handlerHashFiles = fs.readdirSync(path.join(buildPath, handlerHash)); + expect(handlerHashFiles).toHaveLength(2); + expect(handlerHashFiles).toEqual( + expect.arrayContaining([ 'lambda.js', 'lambda.js.map' ]) + ); + + const srcHandlerHashFiles = fs.readdirSync(path.join(buildPath, srcHandlerHash)); + expect(srcHandlerHashFiles).toHaveLength(2); + expect(srcHandlerHashFiles).toEqual( + expect.arrayContaining([ 'lambda.js', 'lambda.js.map' ]) + ); + + // Verify zip files generated + expect(buildFiles).toEqual( + expect.arrayContaining([ + expect.stringMatching(`${handlerHash}.zip`), + expect.stringMatching(`${srcHandlerHash}.zip`), + ]) + ); + + // Verify zip files content + const handlerZipDir = path.join(buildPath, `${handlerHash}-unzipped`); + fs.mkdirSync(handlerZipDir); + zipLocal.sync.unzip(path.join(buildPath, `${handlerHash}.zip`)).save(handlerZipDir); + const handlerZipFiles = fs.readdirSync(handlerZipDir); + expect(handlerZipFiles).toHaveLength(2); + expect(handlerZipFiles).toEqual( + expect.arrayContaining([ 'lambda.js', 'lambda.js.map' ]) + ); + + const srcHandlerZipDir = path.join(buildPath, `${srcHandlerHash}-unzipped`); + fs.mkdirSync(srcHandlerZipDir); + zipLocal.sync.unzip(path.join(buildPath, `${srcHandlerHash}.zip`)).save(srcHandlerZipDir); + const srcHandlerZipFiles = fs.readdirSync(srcHandlerZipDir); + expect(srcHandlerZipFiles).toHaveLength(2); + expect(srcHandlerZipFiles).toEqual( + expect.arrayContaining([ 'lambda.js', 'lambda.js.map' ]) + ); + + // Verify CF Lambda resource handler + const cf = fs.readFileSync(path.join(buildPath, 'cdk.out', 'prod-build-bundle-no-srcpath-sample.template.json')); + const cfnResources = JSON.parse(cf).Resources; + const cfnLambdas = Object.values(cfnResources).filter(r => r.Type === 'AWS::Lambda::Function'); + expect(cfnLambdas[0].Properties.Handler).toEqual('lambda.handler'); + expect(cfnLambdas[1].Properties.Handler).toEqual('lambda.handler'); +}); diff --git a/packages/cli/test/build-bundle-no-srcpath/lambda.js b/packages/cli/test/build-bundle-no-srcpath/lambda.js new file mode 100644 index 0000000000..37e3cf1d05 --- /dev/null +++ b/packages/cli/test/build-bundle-no-srcpath/lambda.js @@ -0,0 +1,3 @@ +export async function handler() { + return "lambda.js"; +} diff --git a/packages/cli/test/build-bundle-no-srcpath/lib/index.js b/packages/cli/test/build-bundle-no-srcpath/lib/index.js new file mode 100644 index 0000000000..a943eb9134 --- /dev/null +++ b/packages/cli/test/build-bundle-no-srcpath/lib/index.js @@ -0,0 +1,20 @@ +import * as sst from "@serverless-stack/resources"; + +class MySampleStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + new sst.Function(this, "MyLambda1", { + bundle: true, + handler: "lambda.handler", + }); + new sst.Function(this, "MyLambda2", { + bundle: true, + handler: "src/lambda.handler", + }); + } +} + +export default function main(app) { + new MySampleStack(app, "sample"); +} diff --git a/packages/cli/test/build-bundle-no-srcpath/package.json b/packages/cli/test/build-bundle-no-srcpath/package.json new file mode 100644 index 0000000000..f9db54baef --- /dev/null +++ b/packages/cli/test/build-bundle-no-srcpath/package.json @@ -0,0 +1,24 @@ +{ + "name": "@serverless-stack/cli-test-build-bundle-no-srcpath", + "private": true, + "description": "tests", + "version": "0.7.2", + "scripts": { + "start": "sst start", + "build": "sst build", + "deploy": "sst deploy", + "remove": "sst remove", + "cdk": "sst cdk" + }, + "dependencies": { + "@aws-cdk/aws-apigatewayv2": "1.79.0", + "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", + "@aws-cdk/aws-lambda": "1.79.0", + "@aws-cdk/core": "1.79.0", + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2", + "mirrarray": "^2.0.0", + "zip-local": "^0.3.4" + }, + "license": "ISC" +} diff --git a/packages/cli/test/build-bundle-no-srcpath/service/lambda.js b/packages/cli/test/build-bundle-no-srcpath/service/lambda.js new file mode 100644 index 0000000000..09f09fc1aa --- /dev/null +++ b/packages/cli/test/build-bundle-no-srcpath/service/lambda.js @@ -0,0 +1,3 @@ +export async function handler() { + return "service/lambda.js"; +} diff --git a/packages/cli/test/build-bundle-no-srcpath/service/src/lambda.js b/packages/cli/test/build-bundle-no-srcpath/service/src/lambda.js new file mode 100644 index 0000000000..ba0f73385d --- /dev/null +++ b/packages/cli/test/build-bundle-no-srcpath/service/src/lambda.js @@ -0,0 +1,3 @@ +export async function handler() { + return "service/src/lambda.js"; +} diff --git a/packages/cli/test/build-bundle-no-srcpath/src/lambda.js b/packages/cli/test/build-bundle-no-srcpath/src/lambda.js new file mode 100644 index 0000000000..af5b588a7e --- /dev/null +++ b/packages/cli/test/build-bundle-no-srcpath/src/lambda.js @@ -0,0 +1,3 @@ +export async function handler() { + return "src/lambda.js"; +} diff --git a/packages/cli/test/build-bundle-no-srcpath/sst.json b/packages/cli/test/build-bundle-no-srcpath/sst.json new file mode 100644 index 0000000000..7eb57a5512 --- /dev/null +++ b/packages/cli/test/build-bundle-no-srcpath/sst.json @@ -0,0 +1,5 @@ +{ + "name": "build-bundle-no-srcpath", + "stage": "prod", + "region": "us-east-1" +} diff --git a/packages/cli/test/build-bundle-srcpath/build-bundle-srcpath.test.js b/packages/cli/test/build-bundle-srcpath/build-bundle-srcpath.test.js new file mode 100644 index 0000000000..2414835efa --- /dev/null +++ b/packages/cli/test/build-bundle-srcpath/build-bundle-srcpath.test.js @@ -0,0 +1,89 @@ +const fs = require("fs"); +const path = require("path"); +const zipLocal = require("zip-local"); +const { runBuildCommand, clearBuildOutput } = require("../helpers"); +const paths = require("../../scripts/util/paths"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); + await clearBuildOutput(path.join(__dirname, 'service')); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); + await clearBuildOutput(path.join(__dirname, 'service')); +}); + +/** + * Test that the synth command ran successfully + */ +test("build-bundle-srcpath", async () => { + await runBuildCommand(__dirname); + + // Test eslint created build + const appBuildPath = path.join(__dirname, paths.appBuildDir); + const appBuildFiles = fs.readdirSync(appBuildPath); + const srcPathBuildPath = path.join(__dirname, 'service', paths.appBuildDir); + const srcPathBuildFiles = fs.readdirSync(srcPathBuildPath); + + // Verify build output + let handlerHash; + let srcHandlerHash; + srcPathBuildFiles.forEach(file => { + if (file.match(/^service-lambda-handler-[\d]+$/)) { + handlerHash = file; + } + else if (file.match(/^service-src-lambda-handler-[\d]+$/)) { + srcHandlerHash = file; + } + }); + expect(handlerHash).toBeDefined(); + expect(srcHandlerHash).toBeDefined(); + + // Verify build output files + const handlerHashFiles = fs.readdirSync(path.join(srcPathBuildPath, handlerHash)); + expect(handlerHashFiles).toHaveLength(2); + expect(handlerHashFiles).toEqual( + expect.arrayContaining([ 'lambda.js', 'lambda.js.map' ]) + ); + + const srcHandlerHashFiles = fs.readdirSync(path.join(srcPathBuildPath, srcHandlerHash)); + expect(srcHandlerHashFiles).toHaveLength(2); + expect(srcHandlerHashFiles).toEqual( + expect.arrayContaining([ 'lambda.js', 'lambda.js.map' ]) + ); + + // Verify zip files generated + expect(appBuildFiles).toEqual( + expect.arrayContaining([ + expect.stringMatching(`${handlerHash}.zip`), + expect.stringMatching(`${srcHandlerHash}.zip`), + ]) + ); + + // Verify zip files content + const handlerZipDir = path.join(appBuildPath, `${handlerHash}-unzipped`); + fs.mkdirSync(handlerZipDir); + zipLocal.sync.unzip(path.join(appBuildPath, `${handlerHash}.zip`)).save(handlerZipDir); + const handlerZipFiles = fs.readdirSync(handlerZipDir); + expect(handlerZipFiles).toHaveLength(2); + expect(handlerZipFiles).toEqual( + expect.arrayContaining([ 'lambda.js', 'lambda.js.map' ]) + ); + + const srcHandlerZipDir = path.join(appBuildPath, `${srcHandlerHash}-unzipped`); + fs.mkdirSync(srcHandlerZipDir); + zipLocal.sync.unzip(path.join(appBuildPath, `${srcHandlerHash}.zip`)).save(srcHandlerZipDir); + const srcHandlerZipFiles = fs.readdirSync(srcHandlerZipDir); + expect(srcHandlerZipFiles).toHaveLength(2); + expect(srcHandlerZipFiles).toEqual( + expect.arrayContaining([ 'lambda.js', 'lambda.js.map' ]) + ); + + // Verify CF Lambda resource handler + const cf = fs.readFileSync(path.join(appBuildPath, 'cdk.out', 'prod-build-bundle-srcpath-sample.template.json')); + const cfnResources = JSON.parse(cf).Resources; + const cfnLambdas = Object.values(cfnResources).filter(r => r.Type === 'AWS::Lambda::Function'); + expect(cfnLambdas[0].Properties.Handler).toEqual(`lambda.handler`); + expect(cfnLambdas[1].Properties.Handler).toEqual(`lambda.handler`); +}); diff --git a/packages/cli/test/build-bundle-srcpath/lambda.js b/packages/cli/test/build-bundle-srcpath/lambda.js new file mode 100644 index 0000000000..37e3cf1d05 --- /dev/null +++ b/packages/cli/test/build-bundle-srcpath/lambda.js @@ -0,0 +1,3 @@ +export async function handler() { + return "lambda.js"; +} diff --git a/packages/cli/test/build-bundle-srcpath/lib/index.js b/packages/cli/test/build-bundle-srcpath/lib/index.js new file mode 100644 index 0000000000..4c90e99c5e --- /dev/null +++ b/packages/cli/test/build-bundle-srcpath/lib/index.js @@ -0,0 +1,22 @@ +import * as sst from "@serverless-stack/resources"; + +class MySampleStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + new sst.Function(this, "MyLambda1", { + bundle: true, + srcPath: "service", + handler: "lambda.handler", + }); + new sst.Function(this, "MyLambda2", { + bundle: true, + srcPath: "service", + handler: "src/lambda.handler", + }); + } +} + +export default function main(app) { + new MySampleStack(app, "sample"); +} diff --git a/packages/cli/test/build-bundle-srcpath/package.json b/packages/cli/test/build-bundle-srcpath/package.json new file mode 100644 index 0000000000..d306604c78 --- /dev/null +++ b/packages/cli/test/build-bundle-srcpath/package.json @@ -0,0 +1,24 @@ +{ + "name": "@serverless-stack/cli-test-build-bundle-srcpath", + "private": true, + "description": "tests", + "version": "0.7.2", + "scripts": { + "start": "sst start", + "build": "sst build", + "deploy": "sst deploy", + "remove": "sst remove", + "cdk": "sst cdk" + }, + "dependencies": { + "@aws-cdk/aws-apigatewayv2": "1.79.0", + "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", + "@aws-cdk/aws-lambda": "1.79.0", + "@aws-cdk/core": "1.79.0", + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2", + "mirrarray": "^2.0.0", + "zip-local": "^0.3.4" + }, + "license": "ISC" +} diff --git a/packages/cli/test/build-bundle-srcpath/service/lambda.js b/packages/cli/test/build-bundle-srcpath/service/lambda.js new file mode 100644 index 0000000000..09f09fc1aa --- /dev/null +++ b/packages/cli/test/build-bundle-srcpath/service/lambda.js @@ -0,0 +1,3 @@ +export async function handler() { + return "service/lambda.js"; +} diff --git a/packages/cli/test/build-bundle-srcpath/service/src/lambda.js b/packages/cli/test/build-bundle-srcpath/service/src/lambda.js new file mode 100644 index 0000000000..ba0f73385d --- /dev/null +++ b/packages/cli/test/build-bundle-srcpath/service/src/lambda.js @@ -0,0 +1,3 @@ +export async function handler() { + return "service/src/lambda.js"; +} diff --git a/packages/cli/test/build-bundle-srcpath/src/lambda.js b/packages/cli/test/build-bundle-srcpath/src/lambda.js new file mode 100644 index 0000000000..af5b588a7e --- /dev/null +++ b/packages/cli/test/build-bundle-srcpath/src/lambda.js @@ -0,0 +1,3 @@ +export async function handler() { + return "src/lambda.js"; +} diff --git a/packages/cli/test/build-bundle-srcpath/sst.json b/packages/cli/test/build-bundle-srcpath/sst.json new file mode 100644 index 0000000000..bdef475b4d --- /dev/null +++ b/packages/cli/test/build-bundle-srcpath/sst.json @@ -0,0 +1,5 @@ +{ + "name": "build-bundle-srcpath", + "stage": "prod", + "region": "us-east-1" +} diff --git a/packages/cli/test/build-no-bundle-no-srcpath/build-no-bundle-no-srcpath.test.js b/packages/cli/test/build-no-bundle-no-srcpath/build-no-bundle-no-srcpath.test.js new file mode 100644 index 0000000000..f634e04245 --- /dev/null +++ b/packages/cli/test/build-no-bundle-no-srcpath/build-no-bundle-no-srcpath.test.js @@ -0,0 +1,20 @@ +const { runBuildCommand, clearBuildOutput } = require("../helpers"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); +}); + +/** + * Test that the synth command ran successfully + */ +test("build-no-bundle-no-srcpath", async () => { + const result = await runBuildCommand(__dirname); + + expect(result).toMatch( + /Bundle value is not supported/ + ); +}); diff --git a/packages/cli/test/build-no-bundle-no-srcpath/lambda.js b/packages/cli/test/build-no-bundle-no-srcpath/lambda.js new file mode 100644 index 0000000000..37e3cf1d05 --- /dev/null +++ b/packages/cli/test/build-no-bundle-no-srcpath/lambda.js @@ -0,0 +1,3 @@ +export async function handler() { + return "lambda.js"; +} diff --git a/packages/cli/test/build-no-bundle-no-srcpath/lib/index.js b/packages/cli/test/build-no-bundle-no-srcpath/lib/index.js new file mode 100644 index 0000000000..8da70738bf --- /dev/null +++ b/packages/cli/test/build-no-bundle-no-srcpath/lib/index.js @@ -0,0 +1,20 @@ +import * as sst from "@serverless-stack/resources"; + +class MySampleStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + new sst.Function(this, "MyLambda1", { + bundle: false, + handler: "lambda.handler", + }); + new sst.Function(this, "MyLambda2", { + bundle: false, + handler: "src/lambda.handler", + }); + } +} + +export default function main(app) { + new MySampleStack(app, "sample"); +} diff --git a/packages/cli/test/build-no-bundle-no-srcpath/package.json b/packages/cli/test/build-no-bundle-no-srcpath/package.json new file mode 100644 index 0000000000..748dfe46ab --- /dev/null +++ b/packages/cli/test/build-no-bundle-no-srcpath/package.json @@ -0,0 +1,24 @@ +{ + "name": "@serverless-stack/cli-test-build-no-bundle-no-srcpath", + "private": true, + "description": "tests", + "version": "0.7.2", + "scripts": { + "start": "sst start", + "build": "sst build", + "deploy": "sst deploy", + "remove": "sst remove", + "cdk": "sst cdk" + }, + "dependencies": { + "@aws-cdk/aws-apigatewayv2": "1.79.0", + "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", + "@aws-cdk/aws-lambda": "1.79.0", + "@aws-cdk/core": "1.79.0", + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2", + "mirrarray": "^2.0.0", + "zip-local": "^0.3.4" + }, + "license": "ISC" +} diff --git a/packages/cli/test/build-no-bundle-no-srcpath/service/lambda.js b/packages/cli/test/build-no-bundle-no-srcpath/service/lambda.js new file mode 100644 index 0000000000..09f09fc1aa --- /dev/null +++ b/packages/cli/test/build-no-bundle-no-srcpath/service/lambda.js @@ -0,0 +1,3 @@ +export async function handler() { + return "service/lambda.js"; +} diff --git a/packages/cli/test/build-no-bundle-no-srcpath/service/src/lambda.js b/packages/cli/test/build-no-bundle-no-srcpath/service/src/lambda.js new file mode 100644 index 0000000000..ba0f73385d --- /dev/null +++ b/packages/cli/test/build-no-bundle-no-srcpath/service/src/lambda.js @@ -0,0 +1,3 @@ +export async function handler() { + return "service/src/lambda.js"; +} diff --git a/packages/cli/test/build-no-bundle-no-srcpath/src/lambda.js b/packages/cli/test/build-no-bundle-no-srcpath/src/lambda.js new file mode 100644 index 0000000000..af5b588a7e --- /dev/null +++ b/packages/cli/test/build-no-bundle-no-srcpath/src/lambda.js @@ -0,0 +1,3 @@ +export async function handler() { + return "src/lambda.js"; +} diff --git a/packages/cli/test/build-no-bundle-no-srcpath/sst.json b/packages/cli/test/build-no-bundle-no-srcpath/sst.json new file mode 100644 index 0000000000..51a93ba0ef --- /dev/null +++ b/packages/cli/test/build-no-bundle-no-srcpath/sst.json @@ -0,0 +1,5 @@ +{ + "name": "build-no-bundle-no-srcpath", + "stage": "prod", + "region": "us-east-1" +} diff --git a/packages/cli/test/build-no-bundle-srcpath/build-no-bundle-srcpath.test.js b/packages/cli/test/build-no-bundle-srcpath/build-no-bundle-srcpath.test.js new file mode 100644 index 0000000000..857f36d073 --- /dev/null +++ b/packages/cli/test/build-no-bundle-srcpath/build-no-bundle-srcpath.test.js @@ -0,0 +1,99 @@ +const fs = require("fs"); +const path = require("path"); +const zipLocal = require("zip-local"); +const { runBuildCommand, clearBuildOutput } = require("../helpers"); +const paths = require("../../scripts/util/paths"); + +beforeEach(async () => { + await clearBuildOutput(__dirname); + await clearBuildOutput(path.join(__dirname, 'service')); +}); + +afterAll(async () => { + await clearBuildOutput(__dirname); + await clearBuildOutput(path.join(__dirname, 'service')); +}); + +/** + * Test that the synth command ran successfully + */ +test("build-no-bundle-srcpath", async () => { + await runBuildCommand(__dirname); + + // Test eslint created build + const appBuildPath = path.join(__dirname, paths.appBuildDir); + const appBuildFiles = fs.readdirSync(appBuildPath); + const srcPathBuildPath = path.join(__dirname, 'service', paths.appBuildDir); + const srcPathBuildFiles = fs.readdirSync(srcPathBuildPath); + + // Verify build output + let handlerHash; + let srcHandlerHash; + srcPathBuildFiles.forEach(file => { + if (file.match(/^service-lambda-handler-[\d]+$/)) { + handlerHash = file; + } + else if (file.match(/^service-src-lambda-handler-[\d]+$/)) { + srcHandlerHash = file; + } + }); + expect(handlerHash).toBeDefined(); + expect(srcHandlerHash).toBeDefined(); + + // Verify build output files + const handlerHashFiles = fs.readdirSync(path.join(srcPathBuildPath, handlerHash)); + expect(handlerHashFiles).toHaveLength(2); + expect(handlerHashFiles).toEqual( + expect.arrayContaining([ 'lambda.js', 'lambda.js.map' ]) + ); + + const srcHandlerHashFiles = fs.readdirSync(path.join(srcPathBuildPath, srcHandlerHash)); + expect(srcHandlerHashFiles).toHaveLength(2); + expect(srcHandlerHashFiles).toEqual( + expect.arrayContaining([ 'lambda.js', 'lambda.js.map' ]) + ); + + // Verify zip files generated + expect(appBuildFiles).toEqual( + expect.arrayContaining([ + expect.stringMatching(`${handlerHash}.zip`), + expect.stringMatching(`${srcHandlerHash}.zip`), + ]) + ); + + // Verify zip files content + const handlerZipDir = path.join(appBuildPath, `${handlerHash}-unzipped`); + fs.mkdirSync(handlerZipDir); + zipLocal.sync.unzip(path.join(appBuildPath, `${handlerHash}.zip`)).save(handlerZipDir); + const handlerZipFiles = fs.readdirSync(handlerZipDir); + expect(handlerZipFiles).toHaveLength(3); + expect(handlerZipFiles).toEqual( + expect.arrayContaining([ 'lambda.js', 'src', '.build' ]) + ); + const handlerZipDotBuildFiles = fs.readdirSync(path.join(handlerZipDir, '.build', handlerHash)); + expect(handlerZipDotBuildFiles).toHaveLength(2); + expect(handlerZipDotBuildFiles).toEqual( + expect.arrayContaining([ 'lambda.js', 'lambda.js.map' ]) + ); + + const srcHandlerZipDir = path.join(appBuildPath, `${srcHandlerHash}-unzipped`); + fs.mkdirSync(srcHandlerZipDir); + zipLocal.sync.unzip(path.join(appBuildPath, `${srcHandlerHash}.zip`)).save(srcHandlerZipDir); + const srcHandlerZipFiles = fs.readdirSync(srcHandlerZipDir); + expect(srcHandlerZipFiles).toHaveLength(3); + expect(srcHandlerZipFiles).toEqual( + expect.arrayContaining([ 'lambda.js', 'src', '.build']) + ); + const srcHandlerZipDotBuildFiles = fs.readdirSync(path.join(srcHandlerZipDir, '.build', srcHandlerHash)); + expect(srcHandlerZipDotBuildFiles).toHaveLength(2); + expect(srcHandlerZipDotBuildFiles).toEqual( + expect.arrayContaining([ 'lambda.js', 'lambda.js.map' ]) + ); + + // Verify CF Lambda resource handler + const cf = fs.readFileSync(path.join(appBuildPath, 'cdk.out', 'prod-build-no-bundle-srcpath-sample.template.json')); + const cfnResources = JSON.parse(cf).Resources; + const cfnLambdas = Object.values(cfnResources).filter(r => r.Type === 'AWS::Lambda::Function'); + expect(cfnLambdas[0].Properties.Handler).toEqual(`.build/${handlerHash}/lambda.handler`); + expect(cfnLambdas[1].Properties.Handler).toEqual(`.build/${srcHandlerHash}/lambda.handler`); +}); diff --git a/packages/cli/test/build-no-bundle-srcpath/lambda.js b/packages/cli/test/build-no-bundle-srcpath/lambda.js new file mode 100644 index 0000000000..37e3cf1d05 --- /dev/null +++ b/packages/cli/test/build-no-bundle-srcpath/lambda.js @@ -0,0 +1,3 @@ +export async function handler() { + return "lambda.js"; +} diff --git a/packages/cli/test/build-no-bundle-srcpath/lib/index.js b/packages/cli/test/build-no-bundle-srcpath/lib/index.js new file mode 100644 index 0000000000..d9798f231e --- /dev/null +++ b/packages/cli/test/build-no-bundle-srcpath/lib/index.js @@ -0,0 +1,22 @@ +import * as sst from "@serverless-stack/resources"; + +class MySampleStack extends sst.Stack { + constructor(scope, id, props) { + super(scope, id, props); + + new sst.Function(this, "MyLambda1", { + bundle: false, + srcPath: "service", + handler: "lambda.handler", + }); + new sst.Function(this, "MyLambda2", { + bundle: false, + srcPath: "service", + handler: "src/lambda.handler", + }); + } +} + +export default function main(app) { + new MySampleStack(app, "sample"); +} diff --git a/packages/cli/test/build-no-bundle-srcpath/package.json b/packages/cli/test/build-no-bundle-srcpath/package.json new file mode 100644 index 0000000000..a68c02079e --- /dev/null +++ b/packages/cli/test/build-no-bundle-srcpath/package.json @@ -0,0 +1,24 @@ +{ + "name": "@serverless-stack/cli-test-build-no-bundle-srcpath", + "private": true, + "description": "tests", + "version": "0.7.2", + "scripts": { + "start": "sst start", + "build": "sst build", + "deploy": "sst deploy", + "remove": "sst remove", + "cdk": "sst cdk" + }, + "dependencies": { + "@aws-cdk/aws-apigatewayv2": "1.79.0", + "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", + "@aws-cdk/aws-lambda": "1.79.0", + "@aws-cdk/core": "1.79.0", + "@serverless-stack/cli": "^0.7.2", + "@serverless-stack/resources": "^0.7.2", + "mirrarray": "^2.0.0", + "zip-local": "^0.3.4" + }, + "license": "ISC" +} diff --git a/packages/cli/test/build-no-bundle-srcpath/service/lambda.js b/packages/cli/test/build-no-bundle-srcpath/service/lambda.js new file mode 100644 index 0000000000..09f09fc1aa --- /dev/null +++ b/packages/cli/test/build-no-bundle-srcpath/service/lambda.js @@ -0,0 +1,3 @@ +export async function handler() { + return "service/lambda.js"; +} diff --git a/packages/cli/test/build-no-bundle-srcpath/service/src/lambda.js b/packages/cli/test/build-no-bundle-srcpath/service/src/lambda.js new file mode 100644 index 0000000000..ba0f73385d --- /dev/null +++ b/packages/cli/test/build-no-bundle-srcpath/service/src/lambda.js @@ -0,0 +1,3 @@ +export async function handler() { + return "service/src/lambda.js"; +} diff --git a/packages/cli/test/build-no-bundle-srcpath/src/lambda.js b/packages/cli/test/build-no-bundle-srcpath/src/lambda.js new file mode 100644 index 0000000000..af5b588a7e --- /dev/null +++ b/packages/cli/test/build-no-bundle-srcpath/src/lambda.js @@ -0,0 +1,3 @@ +export async function handler() { + return "src/lambda.js"; +} diff --git a/packages/cli/test/build-no-bundle-srcpath/sst.json b/packages/cli/test/build-no-bundle-srcpath/sst.json new file mode 100644 index 0000000000..be3030edfa --- /dev/null +++ b/packages/cli/test/build-no-bundle-srcpath/sst.json @@ -0,0 +1,5 @@ +{ + "name": "build-no-bundle-srcpath", + "stage": "prod", + "region": "us-east-1" +} diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index cddc0924c2..bab59cac9d 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -197,8 +197,11 @@ export class App extends cdk.App { [key: string]: { [key: string]: boolean }; } = {}; this.lambdaHandlers.forEach(({ srcPath, handler }) => { - const buildPath = path.join(srcPath, this.buildDir); - const metafile = path.join(buildPath, getEsbuildMetafileName(handler)); + const metafile = path.join( + srcPath, + this.buildDir, + getEsbuildMetafileName(handler) + ); const files = this.getInputFilesFromEsbuildMetafile(metafile); files.forEach((file) => { inputFilesBySrcPath[srcPath] = inputFilesBySrcPath[srcPath] || {}; diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index 06762d29c7..d4d555070d 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -71,6 +71,11 @@ export class Function extends lambda.Function { if (!handler) { throw new Error(`No handler defined for the "${id}" Lambda function`); } + if (!bundle && srcPath === ".") { + throw new Error( + `Bundle value is not supported for the "${id}" Lambda function. Bundle has to be enabled when srcPath is the root.` + ); + } // Validate NodeJS runtime if ( diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index 4ebe2440ad..b8819f71bd 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -22,7 +22,6 @@ function addExtensionToHandler(handler: string, extension: string): string { export function getEsbuildMetafileName(handler: string): string { const key = handler.replace(/[/.]/g, "-"); - return `.esbuild.${key}.json`; } @@ -61,17 +60,10 @@ export function builder(builderProps: BuilderProps): BuilderOutput { chalk.grey(`Building Lambda function ${getHandlerCopy(srcPath, handler)}`) ); - const appPath = process.cwd(); - - const external = getAllExternalsForHandler(srcPath, bundle); - // Check has tsconfig const tsconfig = path.join(srcPath, "tsconfig.json"); const hasTsconfig = fs.existsSync(tsconfig); - const buildPath = path.join(srcPath, buildDir); - const metafile = path.join(buildPath, getEsbuildMetafileName(handler)); - // Check entry path exists let entryPath = path.join(srcPath, addExtensionToHandler(handler, ".ts")); if (!fs.existsSync(entryPath)) { @@ -82,6 +74,76 @@ export function builder(builderProps: BuilderProps): BuilderOutput { throw new Error(`Cannot find a handler file at ${entryPath}".`); } + // Four cases: + // 1. BUNDLE + srcPath ROOT + // src : path/to/file.method + // buildPath : .build/hash-$ts + // zipPath : .build/hash-$ts + // outZip : .build/hash-$ts.zip + // outHandler: file.method + // + // 2. BUNDLE + srcPath NON-ROOT + // src : srcPath/path/to/file.method + // buildPath : srcPath/.build/hash-$ts + // zipPath : srcPath/.build/hash-$ts + // outZip : .build/hash-$ts.zip + // outHandler: file.method + // + // 3. non-BUNDLE + srcPath ROOT + // src : path/to/file.method + // buildPath : .build/handlerDir + // zipPath : . + // + // Note: This case is NOT SUPPORTED because we need to zip the app root for each + // handler. So after a Lambda's zip is generated, the next Lambda's zip will + // contain the previous Lambda's zip inside .build, and the previous Lambda's + // zip inside cdk.out. + // + // One solution would be to cherry pick what to zip. For example, zip should + // only include the esbuid's output (ie. .js and .js.map files) from the + // .build folder. + // + // Also need to clear all .build folders generated from Lambda functions that + // has srcPath. + // + // 4. non-BUNDLE + srcPath NON-ROOT + // src : srcPath/path/to/file.method + // buildPath : srcPath/.build/hash-$ts + // zipPath : srcPath + // outZip : .build/hash-$ts.zip + // outHandler: .build/hash-$ts/file.method + // + // Note: place outZip at the app root's .build because entire srcPath is zipped up. + // If outZip is srcPath's .build, a Lambda's zip would include zip files from + // all the previous Lambdas. + + const appPath = process.cwd(); + const handlerHash = `${path + .join(srcPath, handler) + .replace(/[/.]/g, "-")}-${Date.now()}`; + const buildPath = path.join(srcPath, buildDir, handlerHash); + const metafile = path.join( + srcPath, + buildDir, + getEsbuildMetafileName(handler) + ); + const external = getAllExternalsForHandler(srcPath, bundle); + + transpile(entryPath); + + let outZip, outHandler; + if (bundle) { + outZip = path.join(appPath, buildDir, `${handlerHash}.zip`); + outHandler = path.basename(handler); + zip(buildPath, outZip); + } else { + outZip = path.join(appPath, buildDir, `${handlerHash}.zip`); + outHandler = `${buildDir}/${handlerHash}/${path.basename(handler)}`; + zip(srcPath, outZip); + } + + return { outZip, outHandler }; + function transpile(entryPath: string) { esbuild.buildSync({ external, @@ -97,33 +159,14 @@ export function builder(builderProps: BuilderProps): BuilderOutput { }); } - function zip(dir: string) { - const zipFile = path.join( - appPath, - buildDir, - `${handler.replace(/[./]/g, "-")}.zip` - ); - + function zip(dir: string, zipFile: string) { try { zipLocal.sync.zip(dir).compress().save(zipFile); } catch (e) { console.log(e); - throw new Error("There was a problem generating Lambda package."); + throw new Error(`Bundle cannot be "false" when srcPath is set to the.`); } return zipFile; } - - transpile(entryPath); - - let outZip, outHandler; - if (bundle) { - outZip = zip(path.join(srcPath, buildDir)); - outHandler = handler; - } else { - outZip = zip(srcPath); - outHandler = `${buildDir}/${handler}`; - } - - return { outZip, outHandler }; } From f9866a32c7a9f8d63d1f9830d9503b233913503b Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 1 Feb 2021 05:31:09 -0500 Subject: [PATCH 340/481] Updating copy --- packages/resources/src/util/builder.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/resources/src/util/builder.ts b/packages/resources/src/util/builder.ts index b8819f71bd..3ae0bb8956 100644 --- a/packages/resources/src/util/builder.ts +++ b/packages/resources/src/util/builder.ts @@ -164,7 +164,7 @@ export function builder(builderProps: BuilderProps): BuilderOutput { zipLocal.sync.zip(dir).compress().save(zipFile); } catch (e) { console.log(e); - throw new Error(`Bundle cannot be "false" when srcPath is set to the.`); + throw new Error("There was a problem generating Lambda package."); } return zipFile; From 84aacc3f7a401b2c60d1daa0acbf1e7207f8421a Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 1 Feb 2021 05:40:00 -0500 Subject: [PATCH 341/481] Fixing tests --- packages/cli/test/start-base/start-base.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/test/start-base/start-base.test.js b/packages/cli/test/start-base/start-base.test.js index 7cba26e83d..7b4618942d 100644 --- a/packages/cli/test/start-base/start-base.test.js +++ b/packages/cli/test/start-base/start-base.test.js @@ -30,7 +30,7 @@ test("start-base", async () => { outEntryPoint: { entry: "sns.js", handler: "handler", - srcPath: "src/sns/.build", + srcPath: "src/sns/.build/sub-folder", }, }, "src/api/api.main": { From b660d1eeaa6c193fb50263777bb3efface968407 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 1 Feb 2021 17:01:16 -0500 Subject: [PATCH 342/481] Updating docs and copy --- packages/resources/src/Function.ts | 2 +- www/docs/constructs/function.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/resources/src/Function.ts b/packages/resources/src/Function.ts index d4d555070d..af0823bd7d 100644 --- a/packages/resources/src/Function.ts +++ b/packages/resources/src/Function.ts @@ -73,7 +73,7 @@ export class Function extends lambda.Function { } if (!bundle && srcPath === ".") { throw new Error( - `Bundle value is not supported for the "${id}" Lambda function. Bundle has to be enabled when srcPath is the root.` + `Bundle cannot be disabled for the "${id}" function since the srcPath is set to the project root. Read more here — https://github.com/serverless-stack/serverless-stack/issues/78` ); } diff --git a/www/docs/constructs/function.md b/www/docs/constructs/function.md index 4e89797682..942624bfcd 100644 --- a/www/docs/constructs/function.md +++ b/www/docs/constructs/function.md @@ -46,7 +46,7 @@ If the [`srcPath`](#srcpath) is set, then the path to the `handler` is relative _Type_: `boolean`, _defaults to_ `true` -Bundles your Lambda functions with [esbuild](https://esbuild.github.io). Turn this off if you have npm packages that cannot be bundled. +Bundles your Lambda functions with [esbuild](https://esbuild.github.io). Turn this off if you have npm packages that cannot be bundled. Currently bundle cannot be disabled if the `srcPath` is set to the project root. [Read more about this here](https://github.com/serverless-stack/serverless-stack/issues/78). ### srcPath? From de2c5ac73c56bac65951112ece3bbefd9d3965b7 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 1 Feb 2021 17:09:02 -0500 Subject: [PATCH 343/481] Fixing test copy --- .../build-no-bundle-no-srcpath.test.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/cli/test/build-no-bundle-no-srcpath/build-no-bundle-no-srcpath.test.js b/packages/cli/test/build-no-bundle-no-srcpath/build-no-bundle-no-srcpath.test.js index f634e04245..5ac54131fe 100644 --- a/packages/cli/test/build-no-bundle-no-srcpath/build-no-bundle-no-srcpath.test.js +++ b/packages/cli/test/build-no-bundle-no-srcpath/build-no-bundle-no-srcpath.test.js @@ -14,7 +14,5 @@ afterAll(async () => { test("build-no-bundle-no-srcpath", async () => { const result = await runBuildCommand(__dirname); - expect(result).toMatch( - /Bundle value is not supported/ - ); + expect(result).toMatch(/Bundle cannot be disabled/); }); From f7170aea389281411bab0be3011f3cfe75725670 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 1 Feb 2021 17:40:28 -0500 Subject: [PATCH 344/481] Adding canary release command --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7b3e576222..eaaa0ffb60 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "prettier": "prettier --write **/*.{js,ts,json,md}", "changelog": "lerna-changelog", "release": "lerna publish --force-publish", - "release-alpha": "lerna publish --force-publish --dist-tag alpha", + "release-canary": "lerna publish --canary --exact --preid next --dist-tag=next --force-publish=*", "clean": "lerna run clean", "depcheck": "for I in packages/*/; do cd $I; npx depcheck; cd -; done", "postinstall": "lerna run prepare --scope='{@serverless-stack/resources,@serverless-stack/cli,create-serverless-stack}'", From 84de0ff6c39285bf17c6edd4ae575a7b28caf19b Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 1 Feb 2021 18:02:24 -0500 Subject: [PATCH 345/481] v0.7.3 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/cli/test/add-cdk/package.json | 4 ++-- packages/cli/test/base-ts/package.json | 6 +++--- packages/cli/test/base/package.json | 6 +++--- packages/cli/test/build-bundle-no-srcpath/package.json | 6 +++--- packages/cli/test/build-bundle-srcpath/package.json | 6 +++--- packages/cli/test/build-no-bundle-no-srcpath/package.json | 6 +++--- packages/cli/test/build-no-bundle-srcpath/package.json | 6 +++--- packages/cli/test/cdk-command/package.json | 6 +++--- packages/cli/test/config-invalid/package.json | 6 +++--- packages/cli/test/config-no-name/package.json | 6 +++--- packages/cli/test/config-not-found/package.json | 6 +++--- packages/cli/test/config/package.json | 6 +++--- packages/cli/test/context/package.json | 6 +++--- packages/cli/test/eslint-ignore-rule/package.json | 6 +++--- packages/cli/test/eslint-ignore/package.json | 6 +++--- packages/cli/test/eslint-ts/package.json | 6 +++--- packages/cli/test/eslint/package.json | 6 +++--- packages/cli/test/handler-function-not-found/package.json | 6 +++--- packages/cli/test/handler-not-found/package.json | 6 +++--- packages/cli/test/jest-ts/package.json | 6 +++--- packages/cli/test/jest/package.json | 6 +++--- packages/cli/test/lambda-override-eslintrc/package.json | 6 +++--- packages/cli/test/lambda-override-tsconfig/package.json | 6 +++--- packages/cli/test/mismatched-cdk-versions/package.json | 6 +++--- packages/cli/test/stack-no-prefix/package.json | 6 +++--- packages/cli/test/stack-set-env/package.json | 6 +++--- packages/cli/test/start-base/package.json | 6 +++--- packages/cli/test/start-guide/package.json | 6 +++--- packages/cli/test/start-no-src-path/package.json | 6 +++--- packages/cli/test/template-app-ts/package.json | 6 +++--- packages/cli/test/template-app/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 36 files changed, 99 insertions(+), 99 deletions(-) diff --git a/lerna.json b/lerna.json index 5ea7f2060f..f73292fb86 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.7.2" + "version": "0.7.3" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 582dc90b4d..a66d164666 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.7.2", + "version": "0.7.3", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -47,8 +47,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^0.7.2", - "@serverless-stack/resources": "^0.7.2", + "@serverless-stack/core": "^0.7.3", + "@serverless-stack/resources": "^0.7.3", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index 55948062a3..48c76921b4 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -2,12 +2,12 @@ "name": "@serverless-stack/cli-test-add-cdk", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "add-cdk": "sst add-cdk" }, "dependencies": { - "@serverless-stack/cli": "^0.7.2" + "@serverless-stack/cli": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index f9b83a7387..497b3939bb 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base-ts", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "start": "sst start", "build": "sst build", @@ -13,8 +13,8 @@ "dependencies": { "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index c7c6122d77..55b1e599ff 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "start": "sst start", "build": "sst build", @@ -17,8 +17,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/build-bundle-no-srcpath/package.json b/packages/cli/test/build-bundle-no-srcpath/package.json index f9db54baef..1aec9d1a1d 100644 --- a/packages/cli/test/build-bundle-no-srcpath/package.json +++ b/packages/cli/test/build-bundle-no-srcpath/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-build-bundle-no-srcpath", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "start": "sst start", "build": "sst build", @@ -15,8 +15,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2", + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3", "mirrarray": "^2.0.0", "zip-local": "^0.3.4" }, diff --git a/packages/cli/test/build-bundle-srcpath/package.json b/packages/cli/test/build-bundle-srcpath/package.json index d306604c78..878b5a434b 100644 --- a/packages/cli/test/build-bundle-srcpath/package.json +++ b/packages/cli/test/build-bundle-srcpath/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-build-bundle-srcpath", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "start": "sst start", "build": "sst build", @@ -15,8 +15,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2", + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3", "mirrarray": "^2.0.0", "zip-local": "^0.3.4" }, diff --git a/packages/cli/test/build-no-bundle-no-srcpath/package.json b/packages/cli/test/build-no-bundle-no-srcpath/package.json index 748dfe46ab..acff3f6a6b 100644 --- a/packages/cli/test/build-no-bundle-no-srcpath/package.json +++ b/packages/cli/test/build-no-bundle-no-srcpath/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-build-no-bundle-no-srcpath", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "start": "sst start", "build": "sst build", @@ -15,8 +15,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2", + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3", "mirrarray": "^2.0.0", "zip-local": "^0.3.4" }, diff --git a/packages/cli/test/build-no-bundle-srcpath/package.json b/packages/cli/test/build-no-bundle-srcpath/package.json index a68c02079e..216dafe90a 100644 --- a/packages/cli/test/build-no-bundle-srcpath/package.json +++ b/packages/cli/test/build-no-bundle-srcpath/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-build-no-bundle-srcpath", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "start": "sst start", "build": "sst build", @@ -15,8 +15,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2", + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3", "mirrarray": "^2.0.0", "zip-local": "^0.3.4" }, diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index 57cac9d858..b0ab6457a6 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-cdk-command", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "cdk": "sst cdk" }, "dependencies": { - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index 78612f2c47..dcd468782d 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-invalid", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index 3e632ce060..0fd85a8ed1 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-no-name", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index e793073dc5..b07cd6f67f 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-not-found", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index dd9959986c..315bf7f2de 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-test", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index a37b4dd769..d0304e98c4 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-context", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index ef505fb4bc..bfff5e1358 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ignore-rule", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index cffa317726..2ad063fbd7 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ignore", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index ebd7aa8c21..7e1b01be50 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ts", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index f1cca0df40..81afa3db1d 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index ad0de688aa..ba0d89f492 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-handler-function-not-found", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index 8f507a4ef6..be63e356ca 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-handler-not-found", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index 2d9a3ec0cf..6deaf18fe5 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest-ts", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "build": "sst build", "test": "sst test" @@ -18,8 +18,8 @@ "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/aws-sqs": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index 4b51392d67..bef934d5b5 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "test": "sst test" }, @@ -14,8 +14,8 @@ "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/lambda-override-eslintrc/package.json b/packages/cli/test/lambda-override-eslintrc/package.json index e48435a86c..6d693a331f 100644 --- a/packages/cli/test/lambda-override-eslintrc/package.json +++ b/packages/cli/test/lambda-override-eslintrc/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-eslintrc", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "build": "sst build", "start": "sst start" @@ -11,8 +11,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json index caa9f67f49..aea8d03ac1 100644 --- a/packages/cli/test/lambda-override-tsconfig/package.json +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-tsconfig", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "build": "sst build", "start": "sst start" @@ -11,8 +11,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index ba214eab9f..e3bfe87449 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-mismatched-cdk-versions", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "build": "sst build" }, @@ -12,8 +12,8 @@ "@aws-cdk/aws-iam": "1.57.0", "@aws-cdk/aws-s3": "^1.57.0", "@aws-cdk/core": "1.56.0", - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index fee5f62496..3e8d0baa86 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-stack-no-prefix", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index 2073a2638b..675c0e205d 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-stack-set-env", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index 8a961826c1..569495f1c7 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-base", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "start": "sst start", "build": "sst build", @@ -14,8 +14,8 @@ "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/start-guide/package.json b/packages/cli/test/start-guide/package.json index 59b78776c3..76195a602b 100644 --- a/packages/cli/test/start-guide/package.json +++ b/packages/cli/test/start-guide/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-guide", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "add-package": "sst add-package", "start": "sst start", @@ -19,8 +19,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "license": "ISC" } diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index d5fd7e271e..dbcfd08fa8 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-no-src-path", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "start": "sst start", "build": "sst build", @@ -15,8 +15,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2", + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3", "mirrarray": "^2.0.0" }, "license": "ISC" diff --git a/packages/cli/test/template-app-ts/package.json b/packages/cli/test/template-app-ts/package.json index 23a2a6242d..9ee6b08328 100644 --- a/packages/cli/test/template-app-ts/package.json +++ b/packages/cli/test/template-app-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/template-app-ts", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "start": "sst start", "build": "sst build", @@ -19,8 +19,8 @@ "license": "ISC", "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "devDependencies": { "@aws-cdk/assert": "1.79.0", diff --git a/packages/cli/test/template-app/package.json b/packages/cli/test/template-app/package.json index 4f53d1e38c..83a5f39a1a 100644 --- a/packages/cli/test/template-app/package.json +++ b/packages/cli/test/template-app/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/template-app", "private": true, "description": "tests", - "version": "0.7.2", + "version": "0.7.3", "scripts": { "start": "sst start", "build": "sst build", @@ -19,8 +19,8 @@ "license": "ISC", "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.2", - "@serverless-stack/resources": "^0.7.2" + "@serverless-stack/cli": "^0.7.3", + "@serverless-stack/resources": "^0.7.3" }, "devDependencies": { "@aws-cdk/assert": "1.79.0" diff --git a/packages/core/package.json b/packages/core/package.json index 21c22c4aae..94db8eddc9 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.7.2", + "version": "0.7.3", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index 639e13e424..b55454e4f4 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.7.2", + "version": "0.7.3", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 55e3f3d02f..ab4f804f38 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.7.2", + "version": "0.7.3", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From 449165189401a9f433f3e57c819d84f195067309 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 1 Feb 2021 20:56:59 -0500 Subject: [PATCH 346/481] Adding docs on attachPermissions --- www/docs/constructs/function.md | 107 +++++++++++++++++++++++++++++++- 1 file changed, 106 insertions(+), 1 deletion(-) diff --git a/www/docs/constructs/function.md b/www/docs/constructs/function.md index 89a26d8245..45382fac42 100644 --- a/www/docs/constructs/function.md +++ b/www/docs/constructs/function.md @@ -4,6 +4,8 @@ title: "Function" description: "Docs for the sst.Function construct in the @serverless-stack/resources package" --- +import config from "../../config"; + A replacement for the [`cdk.lambda.NodejsFunction`](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-nodejs-readme.html) that allows you to [develop your Lambda functions locally](live-lambda-development.md). Supports ES and TypeScript out-of-the-box. By default, `AWS_NODEJS_CONNECTION_REUSE_ENABLED` is turned on. Meaning that the Lambda function will automatically reuse TCP connections when working with the AWS SDK. [Read more about this here](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/node-reusing-connections.html). @@ -40,7 +42,70 @@ _Parameters_ - **permissions** [`FunctionPermissions`](#functionpermissions) -Attaches the given list of [permissions](#functionpermissions) to the function. +Attaches the given list of [permissions](#functionpermissions) to the function. This method makes it easy to control the level of permissions you want the function to have access to. It can range from complete access to all AWS resources, all the way to a specific permission for a resource. + +Let's look at this in detail. Below are the many ways to attach permissions. Starting with the most permissive to the least permissive. + +First, let's create a function. + +```js +const fun = new Function(this, "Function", { handler: "src/lambda.main" }); +``` + +1. Giving full permissions + + ```js + fun.attachPermissions("*"); + ``` + + This allows the function admin access to all resources. + +2. Access to a list of services + + ```js + fun.attachPermissions(["s3", "dynamodb"]); + ``` + + Specify a list of AWS resource types that this function has complete access to. Takes a list of strings. + +3. Access to a list of constructs + + ```js + const sns = new cdk.aws() - sns.Topic(this, "Topic"); + const table = new sst.Table(this, "Table"); + + fun.attachPermissions([sns, table]); + ``` + + Specify which resource constructs you want to give complete access to. Currently supports: + + - [Topic](topic.md) + - [Table](table.md) + - [Queue](queue.md) + - [cdk.aws-sns.Topic](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-sns.Topic.html) + - [cdk.aws-s3.Bucket](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-s3.Bucket.html) + - [cdk.aws-sqs.Queue](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-sqs.Queue.html) + - [cdk.aws-dynamodb.Table](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-dynamodb.Table.html) + + To add to this list, please open a new issue. + +4. Access to a list of specific permissions in a construct + + ```js + const sns = new cdk.aws() - sns.Topic(this, "Topic"); + const table = new cdk.aws() - dynamodb.Table(this, "Table"); + + fun.attachPermissions([ + [topic, "grantPublish"], + [table, "grantReadData"], + ]); + ``` + + Specify which permission in the construct you want to give access to. Specified as a tuple of construct and a grant permission function. + + CDK constructs have methods of the format _grantX_ that allow you to grant specific permissions. So in the example above, the grant functions are: [`Topic.grantPublish`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-sns.Topic.html#grantwbrpublishgrantee) and [`Table.grantReadData`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-dynamodb.Table.html#grantwbrreadwbrdatagrantee). The `attachPermissions` method, takes the construct and calls the grant permission function specified. + + Unlike option #3, this supports all the CDK constructs. ## FunctionProps @@ -122,6 +187,46 @@ new Function(this, "Create", { }); ``` +## FunctionPermissions + +_Type_ : `string | (string | cdk.Construct | [cdk.Construct, string])[]` + +Allows you to define the permissions that you want to attach to a function in a few different ways. + +Passing in `*` for admin access. + +```js +"*"; + +``` + +A list of AWS resource types. + +```js +["s3", "dynamodb"]; +``` + +A list of constructs. + +```js +// const sns = new cdk.aws-sns.Topic(this, "Topic"); +// const table = new sst.Table(this, "Table"); + +[sns, table]; +``` + +A list of CDK constructs with their specific grant permission functions. + +```js +// const sns = new cdk.aws-sns.Topic(this, "Topic"); +// const table = new sst.Table(this, "Table"); + +[ + [topic, "grantPublish"], + [table, "grantReadData"], +]; +``` + ## Examples ### Creating a Function From 8b6236a5c042b904a2b9595dd821bf33642c2594 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 1 Feb 2021 21:15:36 -0500 Subject: [PATCH 347/481] Fix tests --- .../.build/.esbuild.test-lambda-handler.json | 25 ------------------- packages/resources/.build/lambda.js | 16 ------------ packages/resources/.build/lambda.js.map | 7 ------ packages/resources/.gitignore | 2 +- packages/resources/test/Api.test.ts | 24 +++++++++--------- packages/resources/test/Cron.test.ts | 10 ++++---- packages/resources/test/Function.test.ts | 10 ++++---- packages/resources/test/Queue.test.ts | 8 +++--- packages/resources/test/Topic.test.ts | 10 ++++---- 9 files changed, 32 insertions(+), 80 deletions(-) delete mode 100644 packages/resources/.build/.esbuild.test-lambda-handler.json delete mode 100644 packages/resources/.build/lambda.js delete mode 100644 packages/resources/.build/lambda.js.map diff --git a/packages/resources/.build/.esbuild.test-lambda-handler.json b/packages/resources/.build/.esbuild.test-lambda-handler.json deleted file mode 100644 index a47abea546..0000000000 --- a/packages/resources/.build/.esbuild.test-lambda-handler.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "inputs": { - "test/lambda.js": { - "bytes": 60, - "imports": [] - } - }, - "outputs": { - ".build/lambda.js.map": { - "imports": [], - "inputs": {}, - "bytes": 223 - }, - ".build/lambda.js": { - "imports": [], - "exports": [], - "inputs": { - "test/lambda.js": { - "bytesInOutput": 102 - } - }, - "bytes": 428 - } - } -} diff --git a/packages/resources/.build/lambda.js b/packages/resources/.build/lambda.js deleted file mode 100644 index 5f859ba99d..0000000000 --- a/packages/resources/.build/lambda.js +++ /dev/null @@ -1,16 +0,0 @@ -var __defProp = Object.defineProperty; -var __markAsModule = (target) => __defProp(target, "__esModule", {value: true}); -var __export = (target, all) => { - __markAsModule(target); - for (var name in all) - __defProp(target, name, {get: all[name], enumerable: true}); -}; - -// test/lambda.js -__export(exports, { - handler: () => handler -}); -async function handler() { - return "Hello World"; -} -//# sourceMappingURL=lambda.js.map diff --git a/packages/resources/.build/lambda.js.map b/packages/resources/.build/lambda.js.map deleted file mode 100644 index 376b3826dc..0000000000 --- a/packages/resources/.build/lambda.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../test/lambda.js"], - "sourcesContent": ["export async function handler() {\n return \"Hello World\";\n}\n"], - "mappings": ";;;;;;;;;AAAA;AAAA;AAAA;AAAA;AACE,SAAO;AAAA;", - "names": [] -} diff --git a/packages/resources/.gitignore b/packages/resources/.gitignore index dba60801a6..b72cbfeeb2 100644 --- a/packages/resources/.gitignore +++ b/packages/resources/.gitignore @@ -1,2 +1,2 @@ # Build outputs in test -/.build/** +.build/** diff --git a/packages/resources/test/Api.test.ts b/packages/resources/test/Api.test.ts index 25429bce82..bf8df2fd0d 100644 --- a/packages/resources/test/Api.test.ts +++ b/packages/resources/test/Api.test.ts @@ -315,7 +315,7 @@ test("route-value-string", async () => { }, }); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); }); @@ -331,7 +331,7 @@ test("route-value-string-with-defaultFunctionProps", async () => { }, }); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", Timeout: 3, }); }); @@ -347,7 +347,7 @@ test("route-value-Function", async () => { }); expect(stack).toCountResources("AWS::Lambda::Function", 1); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); }); @@ -392,7 +392,7 @@ test("route-value-FunctionProps", async () => { }, }); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); }); @@ -410,7 +410,7 @@ test("route-value-FunctionProps-with-defaultFunctionProps", async () => { }, }); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", Timeout: 3, }); }); @@ -430,7 +430,7 @@ test("route-value-FunctionProps-with-defaultFunctionProps-override", async () => }, }); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", Timeout: 5, }); }); @@ -446,7 +446,7 @@ test("route-value-ApiRouteProps-function-string", async () => { }, }); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); }); @@ -464,7 +464,7 @@ test("route-value-ApiRouteProps-function-string-with-defaultFunctionProps", asyn }, }); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", Timeout: 3, }); }); @@ -480,7 +480,7 @@ test("route-value-ApiRouteProps-function-Function", async () => { }); expect(stack).toCountResources("AWS::Lambda::Function", 1); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); }); @@ -513,7 +513,7 @@ test("route-value-ApiRouteProps-function-FunctionProps", async () => { }, }); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); }); @@ -533,7 +533,7 @@ test("route-value-ApiRouteProps-function-FunctionProps-with-defaultFunctionProps }, }); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", Timeout: 3, }); }); @@ -555,7 +555,7 @@ test("route-value-ApiRouteProps-function-FunctionProps-with-defaultFunctionProps }, }); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", Timeout: 5, }); }); diff --git a/packages/resources/test/Cron.test.ts b/packages/resources/test/Cron.test.ts index 473d6945a2..106c1b14e4 100644 --- a/packages/resources/test/Cron.test.ts +++ b/packages/resources/test/Cron.test.ts @@ -39,7 +39,7 @@ test("schedule-cron", async () => { }); expect(stack).toCountResources("AWS::Lambda::Function", 1); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); expect(stack).toCountResources("AWS::Events::Rule", 1); expect(stack).toHaveResource("AWS::Events::Rule", { @@ -64,7 +64,7 @@ test("job-string", async () => { }); expect(stack).toCountResources("AWS::Lambda::Function", 1); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); }); @@ -77,7 +77,7 @@ test("job-Function", async () => { }); expect(stack).toCountResources("AWS::Lambda::Function", 1); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); }); @@ -89,7 +89,7 @@ test("job-FunctionProps", async () => { }); expect(stack).toCountResources("AWS::Lambda::Function", 1); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); }); @@ -113,7 +113,7 @@ test("eventsRule", async () => { }); expect(stack).toCountResources("AWS::Lambda::Function", 1); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); expect(stack).toCountResources("AWS::Events::Rule", 1); expect(stack).toHaveResource("AWS::Events::Rule", { diff --git a/packages/resources/test/Function.test.ts b/packages/resources/test/Function.test.ts index 71784c6fd2..ff8897e4ce 100644 --- a/packages/resources/test/Function.test.ts +++ b/packages/resources/test/Function.test.ts @@ -36,7 +36,7 @@ test("base", async () => { handler: "test/lambda.handler", }); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", Timeout: 10, MemorySize: 1024, TracingConfig: { Mode: "Active" }, @@ -51,7 +51,7 @@ test("base-override", async () => { memorySize: 512, }); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", Timeout: 20, MemorySize: 512, }); @@ -203,7 +203,7 @@ test("fromDefinition-string", async () => { const stack = new Stack(new App(), "stack"); Function.fromDefinition(stack, "Function", "test/lambda.handler"); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", Timeout: 10, }); }); @@ -214,7 +214,7 @@ test("fromDefinition-props", async () => { handler: "test/lambda.handler", }); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); }); @@ -229,7 +229,7 @@ test("fromDefinition-sstFunction", async () => { }) ); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", Timeout: 20, }); }); diff --git a/packages/resources/test/Queue.test.ts b/packages/resources/test/Queue.test.ts index 256b290fde..9352e5d96c 100644 --- a/packages/resources/test/Queue.test.ts +++ b/packages/resources/test/Queue.test.ts @@ -28,7 +28,7 @@ test("consumer-string", async () => { }); expect(stack).toCountResources("AWS::Lambda::Function", 1); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); expect(stack).toCountResources("AWS::SQS::Queue", 1); expect(stack).toHaveResource("AWS::SQS::Queue", { @@ -43,7 +43,7 @@ test("consumer-Function", async () => { consumer: f, }); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); expect(stack).toHaveResource("AWS::SQS::Queue", { QueueName: "dev-my-app-Queue", @@ -56,7 +56,7 @@ test("consumer-FunctionProps", async () => { consumer: { handler: "test/lambda.handler" }, }); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); expect(stack).toHaveResource("AWS::SQS::Queue", { QueueName: "dev-my-app-Queue", @@ -81,7 +81,7 @@ test("sqsQueue", async () => { }); expect(stack).toCountResources("AWS::Lambda::Function", 1); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); expect(stack).toCountResources("AWS::SQS::Queue", 1); expect(stack).toHaveResource("AWS::SQS::Queue", { diff --git a/packages/resources/test/Topic.test.ts b/packages/resources/test/Topic.test.ts index 301c05e538..579c6c92c2 100644 --- a/packages/resources/test/Topic.test.ts +++ b/packages/resources/test/Topic.test.ts @@ -15,7 +15,7 @@ test("subscribers-string", async () => { }); expect(stack).toCountResources("AWS::Lambda::Function", 1); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); expect(stack).toCountResources("AWS::SNS::Topic", 1); expect(stack).toHaveResource("AWS::SNS::Topic", { @@ -30,7 +30,7 @@ test("subscribers-string-multiple", async () => { }); expect(stack).toCountResources("AWS::Lambda::Function", 2); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); expect(stack).toCountResources("AWS::SNS::Topic", 1); expect(stack).toHaveResource("AWS::SNS::Topic", { @@ -45,7 +45,7 @@ test("subscribers-Function", async () => { subscribers: [f], }); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); expect(stack).toHaveResource("AWS::SNS::Topic", { TopicName: "dev-my-app-Topic", @@ -58,7 +58,7 @@ test("subscribers-FunctionProps", async () => { subscribers: [{ handler: "test/lambda.handler" }], }); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); expect(stack).toHaveResource("AWS::SNS::Topic", { TopicName: "dev-my-app-Topic", @@ -92,7 +92,7 @@ test("snsTopic", async () => { }); expect(stack).toCountResources("AWS::Lambda::Function", 1); expect(stack).toHaveResource("AWS::Lambda::Function", { - Handler: "test/lambda.handler", + Handler: "lambda.handler", }); expect(stack).toCountResources("AWS::SNS::Topic", 1); expect(stack).toHaveResource("AWS::SNS::Topic", { From 8c4a3ae72c7e858ba4839ae57a1ac5fdf6a20ab8 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 1 Feb 2021 21:42:05 -0500 Subject: [PATCH 348/481] Fix tests --- packages/cli/test/start-no-src-path/lib/index.js | 3 +-- packages/resources/src/App.ts | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/cli/test/start-no-src-path/lib/index.js b/packages/cli/test/start-no-src-path/lib/index.js index 11662c43f3..f56ce4c72e 100644 --- a/packages/cli/test/start-no-src-path/lib/index.js +++ b/packages/cli/test/start-no-src-path/lib/index.js @@ -1,4 +1,3 @@ -import * as cdk from "@aws-cdk/core"; import * as lambda from "@aws-cdk/aws-lambda"; import * as sst from "@serverless-stack/resources"; @@ -12,7 +11,7 @@ class MySampleStack extends sst.Stack { bundle: true, handler: "lambda.handler", runtime: lambda.Runtime.NODEJS_12_X, - timeout: cdk.Duration.seconds(10), + timeout: 10, }); } } diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index 730bb28e41..c01a01545c 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -240,7 +240,6 @@ export class App extends cdk.App { } lint(srcPath: string, inputFiles: Array): void { - console.log("=== ", process.env); inputFiles = inputFiles.filter( (file: string) => file.indexOf("node_modules") === -1 && From 92e8f09c3b8a6328e4d8d4a55e60c84eef48e5d5 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 1 Feb 2021 22:07:19 -0500 Subject: [PATCH 349/481] Editing docs --- www/docs/constructs/api.md | 14 +++++++------- www/docs/constructs/cron.md | 32 ++++++++++++++------------------ www/docs/constructs/function.md | 32 +++++++++++++++++--------------- www/docs/constructs/queue.md | 3 ++- www/docs/constructs/table.md | 10 +++++----- www/docs/constructs/topic.md | 11 ++++++----- 6 files changed, 51 insertions(+), 51 deletions(-) diff --git a/www/docs/constructs/api.md b/www/docs/constructs/api.md index 2906190659..15893010c4 100644 --- a/www/docs/constructs/api.md +++ b/www/docs/constructs/api.md @@ -92,7 +92,7 @@ Internally calls [`Function.attachPermissions`](function.md#attachpermissions). _Type_ : `{ [key: string]: FunctionDefinition | ApiRouteProps }` -The routes for this API. Takes an associative array, with the key being the route as a string and the value is either the [`FunctionDefinition`](function.md#functiondefinition). +The routes for this API. Takes an associative array, with the key being the route as a string and the value is either a [`FunctionDefinition`](function.md#functiondefinition). ```js { @@ -129,13 +129,13 @@ _Type_ : `boolean`, _defaults to_ `true` CloudWatch access logs for the API. -### httpApi?, +### httpApi? _Type_ : [`cdk.aws-apigatewayv2.HttpApi`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-apigatewayv2.HttpApi.html), _defaults to_ `undefined` Optionally, pass in an instance of the CDK `HttpApi`. This will override the default settings this construct uses to create the CDK `HttpApi` internally. -### defaultFunctionProps? +### functionProps? _Type_ : [`FunctionProps`](function.md#functionprops), _defaults to_ `{}` @@ -187,7 +187,7 @@ You can extend the minimal config, to set some function props and have them appl ```js new Api(this, "Api", { - defaultFunctionProps: { + functionProps: { srcPath: "src/", environment: { tableName: table.tableName }, initialPolicy: [ @@ -248,11 +248,11 @@ new Api(this, "Api", { }); ``` -Note that, you can set the `defaultFunctionProps` while using the `function` per route. The `function` will just override the `defaultFunctionProps`. +Note that, you can set the `functionProps` while using the `function` per route. The `function` will just override the `functionProps`. ```js new Api(this, "Api", { - defaultFunctionProps: { + functionProps: { srcPath: "src/", }, routes: { @@ -267,7 +267,7 @@ new Api(this, "Api", { }); ``` -So in the above example, the `GET /notes` function doesn't use the `srcPath` that is set in the `defaultFunctionProps`. It'll instead use the one that is defined in the function definition (`services/functions/`). +So in the above example, the `GET /notes` function doesn't use the `srcPath` that is set in the `functionProps`. It'll instead use the one that is defined in the function definition (`services/functions/`). ### Getting the function for a route diff --git a/www/docs/constructs/cron.md b/www/docs/constructs/cron.md index 68975e3e17..f6576deb88 100644 --- a/www/docs/constructs/cron.md +++ b/www/docs/constructs/cron.md @@ -4,7 +4,7 @@ title: "Cron" description: "Docs for the sst.Cron construct in the @serverless-stack/resources package. This construct creates a CDK event rule." --- -The `Cron` construct is a higher level CDK construct that makes it easy to to create a cron job. You can create a cron job by hanlder function and specifying the schedule it needs to run on. Internally this construct uses a [EventBridge Rule](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-events.Rule.html). +The `Cron` construct is a higher level CDK construct that makes it easy to create a cron job. You can create a cron job by handler function and specifying the schedule it needs to run on. Internally this construct uses a [EventBridge Rule](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-events.Rule.html). ## Initializer @@ -62,27 +62,25 @@ The function definition used to create the function for the cronjob. ### schedule? -_Type_ : string | cdk.Duration | cdk.aws-events.CronOptions +_Type_ : `string | cdk.Duration | cdk.aws-events.CronOptions` -The schedule for the cron job. Can be specified as a string. +The schedule for the cron job. Can be specified as a string. The string format takes a [rate expression](https://docs.aws.amazon.com/lambda/latest/dg/services-cloudwatchevents-expressions.html). -The string format takes a [rate expression](https://docs.aws.amazon.com/lambda/latest/dg/services-cloudwatchevents-expressions.html). - -```js -"rate(_Value Unit_)"; +``` +"rate(_Value Unit_)" // For example, every 5 minutes -"rate(5 minutes)"; +"rate(5 minutes)" ``` Or as a [cron expression](https://en.wikipedia.org/wiki/Cron#CRON_expression). -```js -"cron(Minutes Hours Day-of-month Month Day-of-week Year)"; +``` +"cron(Minutes Hours Day-of-month Month Day-of-week Year)" // For example, 10:15 AM (UTC) every day -"cron(15 10 * * ? *)"; +"cron(15 10 * * ? *)" ``` @@ -91,11 +89,10 @@ You can also use the [`cdk.Duration`](https://docs.aws.amazon.com/cdk/api/latest ```js {4} // Repeat every 5 minutes -//As cdk.Duration +// As cdk.Duration cdk.Duration.minutes(5); - -//Or as a rate expression -("rate(5 minutes)"); +// The equivalent rate expression +// ("rate(5 minutes)") ``` Similarly, you can specify the cron expression using [`cdk.aws-events.CronOptions`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-events.CronOptions.html). @@ -105,9 +102,8 @@ Similarly, you can specify the cron expression using [`cdk.aws-events.CronOption // As cdk.aws-events.CronOptions { minute: "15", hour: "10" } - -// Or as a cron expression -"cron(15 10 * * ? *)" +// The equivalent cron expression +// "cron(15 10 * * ? *)" ``` ### eventsRule? diff --git a/www/docs/constructs/function.md b/www/docs/constructs/function.md index 45382fac42..d7bdd5e185 100644 --- a/www/docs/constructs/function.md +++ b/www/docs/constructs/function.md @@ -6,11 +6,12 @@ description: "Docs for the sst.Function construct in the @serverless-stack/resou import config from "../../config"; -A replacement for the [`cdk.lambda.NodejsFunction`](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-nodejs-readme.html) that allows you to [develop your Lambda functions locally](live-lambda-development.md). Supports ES and TypeScript out-of-the-box. +A replacement for the [`cdk.lambda.NodejsFunction`](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-nodejs-readme.html) that allows you to [develop your Lambda functions locally](live-lambda-development.md). Supports ES and TypeScript out-of-the-box. It also applies a couple of defaults: -By default, `AWS_NODEJS_CONNECTION_REUSE_ENABLED` is turned on. Meaning that the Lambda function will automatically reuse TCP connections when working with the AWS SDK. [Read more about this here](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/node-reusing-connections.html). - -Also, [enables AWS X-Ray](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-tracing.html) by default so you can trace your serverless applications. +- Sets the default memory setting to 1024MB. +- Sets the default Lambda function timeout to 10 seconds. +- [Enables AWS X-Ray](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-tracing.html) by default so you can trace your serverless applications. +- `AWS_NODEJS_CONNECTION_REUSE_ENABLED` is turned on. Meaning that the Lambda function will automatically reuse TCP connections when working with the AWS SDK. [Read more about this here](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/node-reusing-connections.html). ## Initializer @@ -42,11 +43,11 @@ _Parameters_ - **permissions** [`FunctionPermissions`](#functionpermissions) -Attaches the given list of [permissions](#functionpermissions) to the function. This method makes it easy to control the level of permissions you want the function to have access to. It can range from complete access to all AWS resources, all the way to a specific permission for a resource. +Attaches the given list of [permissions](#functionpermissions) to the function. This method makes it easy to control the permissions you want the function to have access to. It can range from complete access to all AWS resources, all the way to a specific permission for a resource. -Let's look at this in detail. Below are the many ways to attach permissions. Starting with the most permissive to the least permissive. +Let's look at this in detail. Below are the many ways to attach permissions. Starting with the most permissive option. -First, let's create a function. +Start with a simple function. ```js const fun = new Function(this, "Function", { handler: "src/lambda.main" }); @@ -195,38 +196,39 @@ Allows you to define the permissions that you want to attach to a function in a Passing in `*` for admin access. -```js -"*"; - +``` +"*" ``` A list of AWS resource types. -```js +``` ["s3", "dynamodb"]; ``` A list of constructs. -```js +``` // const sns = new cdk.aws-sns.Topic(this, "Topic"); // const table = new sst.Table(this, "Table"); -[sns, table]; +[sns, table] ``` A list of CDK constructs with their specific grant permission functions. -```js +``` // const sns = new cdk.aws-sns.Topic(this, "Topic"); // const table = new sst.Table(this, "Table"); [ [topic, "grantPublish"], [table, "grantReadData"], -]; +] ``` +Read more on this above in the [`attachPermissions`](#attachpermissions) method. + ## Examples ### Creating a Function diff --git a/www/docs/constructs/queue.md b/www/docs/constructs/queue.md index e27cbd720f..c41cd4b50f 100644 --- a/www/docs/constructs/queue.md +++ b/www/docs/constructs/queue.md @@ -4,7 +4,7 @@ title: "Queue" description: "Docs for the sst.Queue construct in the @serverless-stack/resources package. This construct creates an SQS queue." --- -The `Queue` construct is a higher level CDK construct that makes it easy to to create a [SQS Queues](https://aws.amazon.com/sqs/). You can create a queue by specifying a consumer function. And then publish to the queue from any part of your serverless app. +The `Queue` construct is a higher level CDK construct that makes it easy to create a [SQS Queues](https://aws.amazon.com/sqs/). You can create a queue by specifying a consumer function. And then publish to the queue from any part of your serverless app. This construct makes it easier to define a queue and a consumer. It also internally connects the consumer and queue together. @@ -100,6 +100,7 @@ new Queue(this, "Queue", { consumer: "src/queueConsumer.main", sqsQueue: new cdk.aws() - + cdk.aws - sqs.Queue(this, "MySqsQueue", { queueName: "my-queue", }), diff --git a/www/docs/constructs/table.md b/www/docs/constructs/table.md index 796cc6f0cd..67de792306 100644 --- a/www/docs/constructs/table.md +++ b/www/docs/constructs/table.md @@ -4,11 +4,11 @@ title: "Table" description: "Docs for the sst.Table construct in the @serverless-stack/resources package. This construct creates a DynamoDB table." --- -The `Table` construct is a higher level CDK construct that makes it easy to to create a [DynamoDB](https://aws.amazon.com/dynamodb/) table. It uses the following defaults to make it easier to use: +The `Table` construct is a higher level CDK construct that makes it easy to create a [DynamoDB](https://aws.amazon.com/dynamodb/) table. It uses the following defaults: -1. Defaults to using the [On-Demand capacity](https://aws.amazon.com/dynamodb/pricing/on-demand/) to make it perfectly serverless. -2. Enable [Point-in-Time Recovery](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/PointInTimeRecovery.html) to make sure that you don't lose your data. -3. Provides a nicer interface for defining indexes. +- Defaults to using the [On-Demand capacity](https://aws.amazon.com/dynamodb/pricing/on-demand/) to make it perfectly serverless. +- Enables [Point-in-Time Recovery](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/PointInTimeRecovery.html) to make sure that you don't lose your data. +- Provides a nicer interface for defining indexes. ## Initializer @@ -38,7 +38,7 @@ The internally created CDK `Table` instance. _Type_ : `{ [key: string]: cdk.dynamodb.AttributeType }` -An associative array with the list of atributes (fields) of the table. Where `key` is the name of field and the value is one of [`cdk.dynamodb.AttributeType`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-dynamodb.AttributeType.html). +An associative array with the list of fields of the table. Where `key` is the name of the field and the value is one of [`cdk.dynamodb.AttributeType`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-dynamodb.AttributeType.html). ### primaryIndex diff --git a/www/docs/constructs/topic.md b/www/docs/constructs/topic.md index 30b005037f..02f0f54cba 100644 --- a/www/docs/constructs/topic.md +++ b/www/docs/constructs/topic.md @@ -32,7 +32,7 @@ The internally created CDK `Topic` instance. ### subscriberFunctions -_Type_ : Function[] +_Type_ : `Function[]` A list of the internally created [`Function`](function.md) instances for the subscribers. @@ -66,7 +66,7 @@ _Parameters_ - **permissions** [`FunctionPermissions`](function.md#functionpermissions) -Attaches the given list of [permissions](function.md#functionpermissions) to a specific function in the list of `subscriberFunctions`. Where `index` (starting at 0) is used to identity the subscriber. This allows that subscriber to access other AWS resources. +Attaches the given list of [permissions](function.md#functionpermissions) to a specific function in the list of `subscriberFunctions`. Where `index` (starting at 0) is used to identify the subscriber. This allows that subscriber to access other AWS resources. Internally calls [`Function.attachPermissions`](function.md#attachpermissions). @@ -82,7 +82,7 @@ A list of [`FunctionDefinition`](function.md#functiondefinition) objects that'll _Type_ : [`cdk.aws-sns.Topic`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-sns.Topic.html), _defaults to_ `undefined` -Or optionally pass in a CDK `Topic` instance. This allows you to override the default settings this construct uses internally to create the topci. +Or optionally pass in a CDK `Topic` instance. This allows you to override the default settings this construct uses internally to create the topic. ## Examples @@ -103,6 +103,7 @@ new Topic(this, "Topic", { subscribers: ["src/subscriber1.main", "src/subscriber2.main"], snsTopic: new cdk.aws() - + cdk.aws - sns.Topic(stack, "MySnsTopic", { topicName: "my-topic", }), @@ -113,7 +114,7 @@ new Topic(this, "Topic", { Allow the subscriber functions to access S3. -```js {8} +```js {5} const topic = new Topic(this, "Topic", { subscribers: ["src/subscriber1.main", "src/subscriber2.main"], }); @@ -125,7 +126,7 @@ topic.attachPermissions(["s3"]); Allow the first subscriber function to access S3. -```js {8} +```js {5} const topic = new Topic(this, "Topic", { subscribers: ["src/subscriber1.main", "src/subscriber2.main"], }); From b8616136b0e2e798f15a445c52c95da30a379c05 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 1 Feb 2021 22:12:38 -0500 Subject: [PATCH 350/481] Fixing docs formatting --- www/docs/constructs/function.md | 6 +++--- www/docs/constructs/queue.md | 9 +++------ www/docs/constructs/topic.md | 9 +++------ 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/www/docs/constructs/function.md b/www/docs/constructs/function.md index d7bdd5e185..24a5634811 100644 --- a/www/docs/constructs/function.md +++ b/www/docs/constructs/function.md @@ -72,7 +72,7 @@ const fun = new Function(this, "Function", { handler: "src/lambda.main" }); 3. Access to a list of constructs ```js - const sns = new cdk.aws() - sns.Topic(this, "Topic"); + const sns = new sns.Topic(this, "Topic"); const table = new sst.Table(this, "Table"); fun.attachPermissions([sns, table]); @@ -93,8 +93,8 @@ const fun = new Function(this, "Function", { handler: "src/lambda.main" }); 4. Access to a list of specific permissions in a construct ```js - const sns = new cdk.aws() - sns.Topic(this, "Topic"); - const table = new cdk.aws() - dynamodb.Table(this, "Table"); + const sns = new sns.Topic(this, "Topic"); + const table = new dynamodb.Table(this, "Table"); fun.attachPermissions([ [topic, "grantPublish"], diff --git a/www/docs/constructs/queue.md b/www/docs/constructs/queue.md index c41cd4b50f..bc29d1ceaf 100644 --- a/www/docs/constructs/queue.md +++ b/www/docs/constructs/queue.md @@ -98,12 +98,9 @@ Override the internally created CDK `Queue` instance. ```js new Queue(this, "Queue", { consumer: "src/queueConsumer.main", - sqsQueue: - new cdk.aws() - - cdk.aws - - sqs.Queue(this, "MySqsQueue", { - queueName: "my-queue", - }), + sqsQueue: new sqs.Queue(this, "MySqsQueue", { + queueName: "my-queue", + }), }); ``` diff --git a/www/docs/constructs/topic.md b/www/docs/constructs/topic.md index 02f0f54cba..1247d5ad6f 100644 --- a/www/docs/constructs/topic.md +++ b/www/docs/constructs/topic.md @@ -101,12 +101,9 @@ Override the internally created CDK `Topic` instance. ```js new Topic(this, "Topic", { subscribers: ["src/subscriber1.main", "src/subscriber2.main"], - snsTopic: - new cdk.aws() - - cdk.aws - - sns.Topic(stack, "MySnsTopic", { - topicName: "my-topic", - }), + snsTopic: new sns.Topic(stack, "MySnsTopic", { + topicName: "my-topic", + }), }); ``` From 4dc5c240504bec9d4f3b5a6a0e7774fa3f8bd882 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 1 Feb 2021 23:02:11 -0500 Subject: [PATCH 351/481] Adding jest setup for resources tests --- packages/resources/jest.config.js | 15 +++++++-------- packages/resources/src/App.ts | 6 ++---- packages/resources/test/Function.test.ts | 6 +++--- packages/resources/test/setup-tests.js | 4 ++++ 4 files changed, 16 insertions(+), 15 deletions(-) create mode 100644 packages/resources/test/setup-tests.js diff --git a/packages/resources/jest.config.js b/packages/resources/jest.config.js index 63fe4bdfa3..9fd1289fad 100644 --- a/packages/resources/jest.config.js +++ b/packages/resources/jest.config.js @@ -1,12 +1,11 @@ module.exports = { - "roots": [ - "" - ], - "testMatch": [ + roots: [""], + testMatch: [ "**/__tests__/**/*.+(ts|tsx|js)", - "**/?(*.)+(spec|test).+(ts|tsx|js)" + "**/?(*.)+(spec|test).+(ts|tsx|js)", ], - "transform": { - "^.+\\.(ts|tsx)$": "ts-jest" + transform: { + "^.+\\.(ts|tsx)$": "ts-jest", }, -} + setupFilesAfterEnv: ["/test/setup-tests.js"], +}; diff --git a/packages/resources/src/App.ts b/packages/resources/src/App.ts index c01a01545c..5294085640 100644 --- a/packages/resources/src/App.ts +++ b/packages/resources/src/App.ts @@ -191,10 +191,8 @@ export class App extends cdk.App { } isJestTest(): boolean { - return ( - process.env.NODE_ENV === "test" && - process.env.JEST_WORKER_ID !== undefined - ); + // Check the env var set inside test/setup-tests.js + return process.env.JEST_RESOURCES_TESTS === "enabled"; } registerLambdaHandler(handler: FunctionHandlerProps): void { diff --git a/packages/resources/test/Function.test.ts b/packages/resources/test/Function.test.ts index ff8897e4ce..9214f0672d 100644 --- a/packages/resources/test/Function.test.ts +++ b/packages/resources/test/Function.test.ts @@ -1,16 +1,16 @@ /* eslint-disable @typescript-eslint/ban-types*/ import "@aws-cdk/assert/jest"; -import { ABSENT } from "@aws-cdk/assert"; -import * as apig from "@aws-cdk/aws-apigatewayv2"; import * as sns from "@aws-cdk/aws-sns"; +import { ABSENT } from "@aws-cdk/assert"; import * as lambda from "@aws-cdk/aws-lambda"; +import * as apig from "@aws-cdk/aws-apigatewayv2"; import { App, Stack, Function, - FunctionProps, HandlerProps, + FunctionProps, FunctionHandlerProps, } from "../src"; diff --git a/packages/resources/test/setup-tests.js b/packages/resources/test/setup-tests.js new file mode 100644 index 0000000000..d24bdd6b7f --- /dev/null +++ b/packages/resources/test/setup-tests.js @@ -0,0 +1,4 @@ +// Set an environment variable that we can use internally to identify that these +// are coming from the resources tests + +process.env.JEST_RESOURCES_TESTS = "enabled"; From ece6d2f7eb5f3ce84b982ea81998f7c2fa593a8f Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 2 Feb 2021 14:01:53 -0500 Subject: [PATCH 352/481] Adding links to new constructs in docs --- www/docs/packages/resources.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/www/docs/packages/resources.md b/www/docs/packages/resources.md index d900a91d5b..39e94e7b6f 100644 --- a/www/docs/packages/resources.md +++ b/www/docs/packages/resources.md @@ -50,4 +50,8 @@ These either extend or replace the native CDK constructs. These are higher level abstractions that wrap around multiple constructs to serve specific use cases. - [`Api`](../constructs/api.md) +- [`Cron`](../constructs/cron.md) +- [`Table`](../constructs/table.md) +- [`Topic`](../constructs/topic.md) +- [`Queue`](../constructs/queue.md) - More coming soon! From bdde965248f9455987937cb45ed70792e2915a1d Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 2 Feb 2021 14:04:00 -0500 Subject: [PATCH 353/481] v0.8.0 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/cli/test/add-cdk/package.json | 4 ++-- packages/cli/test/base-ts/package.json | 6 +++--- packages/cli/test/base/package.json | 6 +++--- packages/cli/test/build-bundle-no-srcpath/package.json | 6 +++--- packages/cli/test/build-bundle-srcpath/package.json | 6 +++--- packages/cli/test/build-no-bundle-no-srcpath/package.json | 6 +++--- packages/cli/test/build-no-bundle-srcpath/package.json | 6 +++--- packages/cli/test/cdk-command/package.json | 6 +++--- packages/cli/test/config-invalid/package.json | 6 +++--- packages/cli/test/config-no-name/package.json | 6 +++--- packages/cli/test/config-not-found/package.json | 6 +++--- packages/cli/test/config/package.json | 6 +++--- packages/cli/test/context/package.json | 6 +++--- packages/cli/test/eslint-ignore-rule/package.json | 6 +++--- packages/cli/test/eslint-ignore/package.json | 6 +++--- packages/cli/test/eslint-ts/package.json | 6 +++--- packages/cli/test/eslint/package.json | 6 +++--- packages/cli/test/handler-function-not-found/package.json | 6 +++--- packages/cli/test/handler-not-found/package.json | 6 +++--- packages/cli/test/jest-ts/package.json | 6 +++--- packages/cli/test/jest/package.json | 6 +++--- packages/cli/test/lambda-override-eslintrc/package.json | 6 +++--- packages/cli/test/lambda-override-tsconfig/package.json | 6 +++--- packages/cli/test/mismatched-cdk-versions/package.json | 6 +++--- packages/cli/test/stack-no-prefix/package.json | 6 +++--- packages/cli/test/stack-set-env/package.json | 6 +++--- packages/cli/test/start-base/package.json | 6 +++--- packages/cli/test/start-guide/package.json | 6 +++--- packages/cli/test/start-no-src-path/package.json | 6 +++--- packages/cli/test/template-app-ts/package.json | 6 +++--- packages/cli/test/template-app/package.json | 6 +++--- packages/core/package.json | 2 +- packages/create-serverless-stack/package.json | 2 +- packages/resources/package.json | 2 +- 36 files changed, 99 insertions(+), 99 deletions(-) diff --git a/lerna.json b/lerna.json index f73292fb86..1291e56e5d 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.7.3" + "version": "0.8.0" } diff --git a/packages/cli/package.json b/packages/cli/package.json index a66d164666..c501ff60df 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/cli", - "version": "0.7.3", + "version": "0.8.0", "description": "A CLI to help deploy Serverless Stack apps.", "scripts": { "prepare": "./bin/sync-cdk-version.js", @@ -47,8 +47,8 @@ "@babel/eslint-plugin": "^7.11.3", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.10.4", - "@serverless-stack/core": "^0.7.3", - "@serverless-stack/resources": "^0.7.3", + "@serverless-stack/core": "^0.8.0", + "@serverless-stack/resources": "^0.8.0", "@types/jest": "^26.0.7", "@types/node": "^14.0.27", "@typescript-eslint/eslint-plugin": "^3.9.1", diff --git a/packages/cli/test/add-cdk/package.json b/packages/cli/test/add-cdk/package.json index 48c76921b4..f5c8ab9698 100644 --- a/packages/cli/test/add-cdk/package.json +++ b/packages/cli/test/add-cdk/package.json @@ -2,12 +2,12 @@ "name": "@serverless-stack/cli-test-add-cdk", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "add-cdk": "sst add-cdk" }, "dependencies": { - "@serverless-stack/cli": "^0.7.3" + "@serverless-stack/cli": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/base-ts/package.json b/packages/cli/test/base-ts/package.json index 497b3939bb..0303617b35 100644 --- a/packages/cli/test/base-ts/package.json +++ b/packages/cli/test/base-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base-ts", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "start": "sst start", "build": "sst build", @@ -13,8 +13,8 @@ "dependencies": { "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/base/package.json b/packages/cli/test/base/package.json index 55b1e599ff..469e16cb62 100644 --- a/packages/cli/test/base/package.json +++ b/packages/cli/test/base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-base", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "start": "sst start", "build": "sst build", @@ -17,8 +17,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/build-bundle-no-srcpath/package.json b/packages/cli/test/build-bundle-no-srcpath/package.json index 1aec9d1a1d..4ec5cfd201 100644 --- a/packages/cli/test/build-bundle-no-srcpath/package.json +++ b/packages/cli/test/build-bundle-no-srcpath/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-build-bundle-no-srcpath", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "start": "sst start", "build": "sst build", @@ -15,8 +15,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3", + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0", "mirrarray": "^2.0.0", "zip-local": "^0.3.4" }, diff --git a/packages/cli/test/build-bundle-srcpath/package.json b/packages/cli/test/build-bundle-srcpath/package.json index 878b5a434b..6543ee1b63 100644 --- a/packages/cli/test/build-bundle-srcpath/package.json +++ b/packages/cli/test/build-bundle-srcpath/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-build-bundle-srcpath", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "start": "sst start", "build": "sst build", @@ -15,8 +15,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3", + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0", "mirrarray": "^2.0.0", "zip-local": "^0.3.4" }, diff --git a/packages/cli/test/build-no-bundle-no-srcpath/package.json b/packages/cli/test/build-no-bundle-no-srcpath/package.json index acff3f6a6b..1df2894d4c 100644 --- a/packages/cli/test/build-no-bundle-no-srcpath/package.json +++ b/packages/cli/test/build-no-bundle-no-srcpath/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-build-no-bundle-no-srcpath", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "start": "sst start", "build": "sst build", @@ -15,8 +15,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3", + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0", "mirrarray": "^2.0.0", "zip-local": "^0.3.4" }, diff --git a/packages/cli/test/build-no-bundle-srcpath/package.json b/packages/cli/test/build-no-bundle-srcpath/package.json index 216dafe90a..dc6e5a8d0e 100644 --- a/packages/cli/test/build-no-bundle-srcpath/package.json +++ b/packages/cli/test/build-no-bundle-srcpath/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-build-no-bundle-srcpath", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "start": "sst start", "build": "sst build", @@ -15,8 +15,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3", + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0", "mirrarray": "^2.0.0", "zip-local": "^0.3.4" }, diff --git a/packages/cli/test/cdk-command/package.json b/packages/cli/test/cdk-command/package.json index b0ab6457a6..74e73301e3 100644 --- a/packages/cli/test/cdk-command/package.json +++ b/packages/cli/test/cdk-command/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-cdk-command", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "cdk": "sst cdk" }, "dependencies": { - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/config-invalid/package.json b/packages/cli/test/config-invalid/package.json index dcd468782d..6602d5ea6e 100644 --- a/packages/cli/test/config-invalid/package.json +++ b/packages/cli/test/config-invalid/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-invalid", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/config-no-name/package.json b/packages/cli/test/config-no-name/package.json index 0fd85a8ed1..169eeb951b 100644 --- a/packages/cli/test/config-no-name/package.json +++ b/packages/cli/test/config-no-name/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-no-name", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/config-not-found/package.json b/packages/cli/test/config-not-found/package.json index b07cd6f67f..d629f461c6 100644 --- a/packages/cli/test/config-not-found/package.json +++ b/packages/cli/test/config-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-config-not-found", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/config/package.json b/packages/cli/test/config/package.json index 315bf7f2de..79f5a8fd04 100644 --- a/packages/cli/test/config/package.json +++ b/packages/cli/test/config/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-config-test", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/context/package.json b/packages/cli/test/context/package.json index d0304e98c4..c516592f71 100644 --- a/packages/cli/test/context/package.json +++ b/packages/cli/test/context/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-context", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore-rule/package.json b/packages/cli/test/eslint-ignore-rule/package.json index bfff5e1358..14291e3799 100644 --- a/packages/cli/test/eslint-ignore-rule/package.json +++ b/packages/cli/test/eslint-ignore-rule/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ignore-rule", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ignore/package.json b/packages/cli/test/eslint-ignore/package.json index 2ad063fbd7..21ad40a875 100644 --- a/packages/cli/test/eslint-ignore/package.json +++ b/packages/cli/test/eslint-ignore/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ignore", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/eslint-ts/package.json b/packages/cli/test/eslint-ts/package.json index 7e1b01be50..da518d4bc8 100644 --- a/packages/cli/test/eslint-ts/package.json +++ b/packages/cli/test/eslint-ts/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint-ts", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/eslint/package.json b/packages/cli/test/eslint/package.json index 81afa3db1d..e55151ecee 100644 --- a/packages/cli/test/eslint/package.json +++ b/packages/cli/test/eslint/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-eslint", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/handler-function-not-found/package.json b/packages/cli/test/handler-function-not-found/package.json index ba0d89f492..a04f278a2a 100644 --- a/packages/cli/test/handler-function-not-found/package.json +++ b/packages/cli/test/handler-function-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-handler-function-not-found", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/handler-not-found/package.json b/packages/cli/test/handler-not-found/package.json index be63e356ca..3ea4602c73 100644 --- a/packages/cli/test/handler-not-found/package.json +++ b/packages/cli/test/handler-not-found/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-handler-not-found", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/jest-ts/package.json b/packages/cli/test/jest-ts/package.json index 6deaf18fe5..8624ab9c47 100644 --- a/packages/cli/test/jest-ts/package.json +++ b/packages/cli/test/jest-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest-ts", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "build": "sst build", "test": "sst test" @@ -18,8 +18,8 @@ "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/aws-sqs": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/jest/package.json b/packages/cli/test/jest/package.json index bef934d5b5..afc61bb0e5 100644 --- a/packages/cli/test/jest/package.json +++ b/packages/cli/test/jest/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-jest", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "test": "sst test" }, @@ -14,8 +14,8 @@ "dependencies": { "@aws-cdk/aws-dynamodb": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/lambda-override-eslintrc/package.json b/packages/cli/test/lambda-override-eslintrc/package.json index 6d693a331f..697dc89238 100644 --- a/packages/cli/test/lambda-override-eslintrc/package.json +++ b/packages/cli/test/lambda-override-eslintrc/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-eslintrc", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "build": "sst build", "start": "sst start" @@ -11,8 +11,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/lambda-override-tsconfig/package.json b/packages/cli/test/lambda-override-tsconfig/package.json index aea8d03ac1..da54676549 100644 --- a/packages/cli/test/lambda-override-tsconfig/package.json +++ b/packages/cli/test/lambda-override-tsconfig/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-lambda-override-tsconfig", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "build": "sst build", "start": "sst start" @@ -11,8 +11,8 @@ "@aws-cdk/aws-apigatewayv2": "1.79.0", "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC", "devDependencies": { diff --git a/packages/cli/test/mismatched-cdk-versions/package.json b/packages/cli/test/mismatched-cdk-versions/package.json index e3bfe87449..d8fb3a754d 100644 --- a/packages/cli/test/mismatched-cdk-versions/package.json +++ b/packages/cli/test/mismatched-cdk-versions/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-mismatched-cdk-versions", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "build": "sst build" }, @@ -12,8 +12,8 @@ "@aws-cdk/aws-iam": "1.57.0", "@aws-cdk/aws-s3": "^1.57.0", "@aws-cdk/core": "1.56.0", - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/stack-no-prefix/package.json b/packages/cli/test/stack-no-prefix/package.json index 3e8d0baa86..55c5142520 100644 --- a/packages/cli/test/stack-no-prefix/package.json +++ b/packages/cli/test/stack-no-prefix/package.json @@ -2,14 +2,14 @@ "name": "@serverless-stack/cli-test-stack-no-prefix", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "build": "sst build" }, "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/stack-set-env/package.json b/packages/cli/test/stack-set-env/package.json index 675c0e205d..769a846915 100644 --- a/packages/cli/test/stack-set-env/package.json +++ b/packages/cli/test/stack-set-env/package.json @@ -2,13 +2,13 @@ "name": "@serverless-stack/cli-test-stack-set-env", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "build": "sst build" }, "dependencies": { - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/start-base/package.json b/packages/cli/test/start-base/package.json index 569495f1c7..e4ed99b9b7 100644 --- a/packages/cli/test/start-base/package.json +++ b/packages/cli/test/start-base/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-base", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "start": "sst start", "build": "sst build", @@ -14,8 +14,8 @@ "@aws-cdk/aws-sns": "1.79.0", "@aws-cdk/aws-sns-subscriptions": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/start-guide/package.json b/packages/cli/test/start-guide/package.json index 76195a602b..e6b8252215 100644 --- a/packages/cli/test/start-guide/package.json +++ b/packages/cli/test/start-guide/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-guide", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "add-package": "sst add-package", "start": "sst start", @@ -19,8 +19,8 @@ "@aws-cdk/aws-iam": "1.79.0", "@aws-cdk/aws-s3": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "license": "ISC" } diff --git a/packages/cli/test/start-no-src-path/package.json b/packages/cli/test/start-no-src-path/package.json index dbcfd08fa8..8c856c3c07 100644 --- a/packages/cli/test/start-no-src-path/package.json +++ b/packages/cli/test/start-no-src-path/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/cli-test-start-no-src-path", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "start": "sst start", "build": "sst build", @@ -15,8 +15,8 @@ "@aws-cdk/aws-apigatewayv2-integrations": "1.79.0", "@aws-cdk/aws-lambda": "1.79.0", "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3", + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0", "mirrarray": "^2.0.0" }, "license": "ISC" diff --git a/packages/cli/test/template-app-ts/package.json b/packages/cli/test/template-app-ts/package.json index 9ee6b08328..fc33640663 100644 --- a/packages/cli/test/template-app-ts/package.json +++ b/packages/cli/test/template-app-ts/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/template-app-ts", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "start": "sst start", "build": "sst build", @@ -19,8 +19,8 @@ "license": "ISC", "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "devDependencies": { "@aws-cdk/assert": "1.79.0", diff --git a/packages/cli/test/template-app/package.json b/packages/cli/test/template-app/package.json index 83a5f39a1a..f434b94340 100644 --- a/packages/cli/test/template-app/package.json +++ b/packages/cli/test/template-app/package.json @@ -2,7 +2,7 @@ "name": "@serverless-stack/template-app", "private": true, "description": "tests", - "version": "0.7.3", + "version": "0.8.0", "scripts": { "start": "sst start", "build": "sst build", @@ -19,8 +19,8 @@ "license": "ISC", "dependencies": { "@aws-cdk/core": "1.79.0", - "@serverless-stack/cli": "^0.7.3", - "@serverless-stack/resources": "^0.7.3" + "@serverless-stack/cli": "^0.8.0", + "@serverless-stack/resources": "^0.8.0" }, "devDependencies": { "@aws-cdk/assert": "1.79.0" diff --git a/packages/core/package.json b/packages/core/package.json index 94db8eddc9..733de27dc8 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/core", - "version": "0.7.3", + "version": "0.8.0", "homepage": "https://serverless-stack.com", "description": "Core of the Serverless Stack Toolkit.", "main": "index.js", diff --git a/packages/create-serverless-stack/package.json b/packages/create-serverless-stack/package.json index b55454e4f4..c871c10995 100644 --- a/packages/create-serverless-stack/package.json +++ b/packages/create-serverless-stack/package.json @@ -1,6 +1,6 @@ { "name": "create-serverless-stack", - "version": "0.7.3", + "version": "0.8.0", "homepage": "https://serverless-stack.com", "description": "Create Serverless Stack apps.", "bin": { diff --git a/packages/resources/package.json b/packages/resources/package.json index 9a0fb39ffa..d30307b154 100644 --- a/packages/resources/package.json +++ b/packages/resources/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-stack/resources", - "version": "0.7.3", + "version": "0.8.0", "homepage": "https://serverless-stack.com", "description": "Helper AWS CDK constructs for Serverless Stack apps.", "main": "dist/index.js", From fbef3c5225fc57707e71cdcd51853a4eb9fd0208 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 2 Feb 2021 22:28:41 -0500 Subject: [PATCH 354/481] Adding FAQ and design principles to the docs --- www/config.js | 1 + www/docs/about.md | 15 +++-- www/docs/constructs/cron.md | 2 +- www/docs/deploying-your-app.md | 32 ++++++++- www/docs/design-principles.md | 120 +++++++++++++++++++++++++++++++++ www/docs/faq.md | 32 +++++++++ www/docs/installation.md | 109 ++++++++++++++++++++---------- www/docs/migrating-from-cdk.md | 10 +-- www/docs/working-locally.md | 4 +- www/sidebars.js | 6 +- www/src/css/custom.css | 7 +- 11 files changed, 281 insertions(+), 57 deletions(-) create mode 100644 www/docs/design-principles.md create mode 100644 www/docs/faq.md diff --git a/www/config.js b/www/config.js index f341acbc81..0e8382dcf4 100644 --- a/www/config.js +++ b/www/config.js @@ -1,4 +1,5 @@ module.exports = { + email: "contact@anoma.ly", twitter: "https://twitter.com/ServerlessStack", forums: "https://discourse.serverless-stack.com/", forkedCdk: "https://github.com/serverless-stack/aws-cdk", diff --git a/www/docs/about.md b/www/docs/about.md index 5b8a6a9332..0e744f170a 100644 --- a/www/docs/about.md +++ b/www/docs/about.md @@ -14,11 +14,12 @@ import config from "../config";